@@ -45,13 +45,13 @@ cleanup() {
4545 " ${APP_DIR} /src/main/java/com/unicorn/store/data/UnicornPublisher.java"
4646 fi
4747
48- # Revert deployment to baseline if in deploy mode (disabled for testing)
49- # if [[ "$DEPLOY_MODE" == true && -n "$ACCOUNT_ID" ]]; then
50- # log_info "Reverting deployment to :latest..."
51- # local ecr_uri="${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${IMAGE_NAME}"
52- # kubectl set image deployment/unicorn-store-spring \
53- # unicorn-store-spring="${ecr_uri}:latest" -n unicorn-store-spring 2>/dev/null || true
54- # fi
48+ # Revert deployment to baseline if --revert flag is set
49+ if [[ " $REVERT_MODE " == true && " $DEPLOY_MODE " == true && -n " $ACCOUNT_ID " ]]; then
50+ log_info " Reverting deployment to :latest..."
51+ local ecr_uri=" ${ACCOUNT_ID} .dkr.ecr.${AWS_REGION} .amazonaws.com/${IMAGE_NAME} "
52+ kubectl set image deployment/unicorn-store-spring \
53+ unicorn-store-spring=" ${ecr_uri} :latest" -n unicorn-store-spring 2> /dev/null || true
54+ fi
5555
5656 exit $exit_code
5757}
@@ -74,11 +74,13 @@ METHODS=(
7474
7575# Parse arguments
7676DEPLOY_MODE=false
77+ REVERT_MODE=false
7778ONLY_METHOD=" "
7879
7980while [[ $# -gt 0 ]]; do
8081 case $1 in
8182 --deploy) DEPLOY_MODE=true; shift ;;
83+ --revert) REVERT_MODE=true; shift ;;
8284 --only) ONLY_METHOD=" $2 " ; shift 2 ;;
8385 * ) log_error " Unknown option: $1 " ; exit 1 ;;
8486 esac
@@ -113,8 +115,43 @@ needs_code_change() {
113115 [[ " $1 " == " 09-crac" ]]
114116}
115117
116- # Start PostgreSQL for training
118+ # Database configuration - try AWS first, fallback to local Docker
119+ USE_AWS_DB=false
120+ SPRING_DATASOURCE_URL=" "
121+ SPRING_DATASOURCE_USERNAME=" "
122+ SPRING_DATASOURCE_PASSWORD=" "
123+
124+ init_db_config () {
125+ log_info " Checking for AWS database configuration..."
126+
127+ # Try to get AWS database credentials
128+ local aws_url aws_secret
129+ aws_url=$( aws ssm get-parameter --name workshop-db-connection-string --no-cli-pager 2> /dev/null | jq --raw-output ' .Parameter.Value' 2> /dev/null) || true
130+ aws_secret=$( aws secretsmanager get-secret-value --secret-id workshop-db-secret --no-cli-pager 2> /dev/null | jq --raw-output ' .SecretString' 2> /dev/null) || true
131+
132+ if [[ -n " $aws_url " && " $aws_url " != " null" && -n " $aws_secret " && " $aws_secret " != " null" ]]; then
133+ SPRING_DATASOURCE_URL=" $aws_url "
134+ SPRING_DATASOURCE_USERNAME=$( echo " $aws_secret " | jq -r .username)
135+ SPRING_DATASOURCE_PASSWORD=$( echo " $aws_secret " | jq -r .password)
136+
137+ if [[ -n " $SPRING_DATASOURCE_USERNAME " && " $SPRING_DATASOURCE_USERNAME " != " null" ]]; then
138+ USE_AWS_DB=true
139+ log_info " Using AWS RDS database for training"
140+ return 0
141+ fi
142+ fi
143+
144+ log_info " AWS database not available, will use local Docker PostgreSQL"
145+ USE_AWS_DB=false
146+ }
147+
148+ # Start PostgreSQL for training (only if not using AWS DB)
117149start_build_db () {
150+ if [[ " $USE_AWS_DB " == true ]]; then
151+ log_info " Using AWS RDS database (no local DB needed)"
152+ return 0
153+ fi
154+
118155 log_info " Starting PostgreSQL for training..."
119156 docker rm -f build-postgres 2> /dev/null || true
120157 docker run -d --name build-postgres \
@@ -128,10 +165,19 @@ start_build_db() {
128165 until docker exec build-postgres pg_isready -U unicorn -d unicornstore > /dev/null 2>&1 ; do
129166 sleep 1
130167 done
168+
169+ # Set local DB credentials
170+ SPRING_DATASOURCE_URL=" jdbc:postgresql://host.docker.internal:5432/unicornstore"
171+ SPRING_DATASOURCE_USERNAME=" unicorn"
172+ SPRING_DATASOURCE_PASSWORD=" unicorn"
173+
131174 log_info " PostgreSQL ready"
132175}
133176
134177stop_build_db () {
178+ if [[ " $USE_AWS_DB " == true ]]; then
179+ return 0
180+ fi
135181 docker rm -f build-postgres 2> /dev/null || true
136182}
137183
@@ -188,12 +234,12 @@ build_image() {
188234 crac_pre_build
189235 fi
190236
191- # Start DB if needed
237+ # Start DB if needed and set build args (all methods use same SPRING_DATASOURCE_* args)
192238 if needs_db " $tag " ; then
193239 start_build_db
194- build_args=" --build-arg SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:5432/unicornstore "
195- build_args=" ${build_args} --build-arg SPRING_DATASOURCE_USERNAME=unicorn "
196- build_args=" ${build_args} --build-arg SPRING_DATASOURCE_PASSWORD=unicorn "
240+ build_args=" --build-arg SPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL} "
241+ build_args=" ${build_args} --build-arg SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME} "
242+ build_args=" ${build_args} --build-arg SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} "
197243 fi
198244
199245 # Build with --progress=plain for cleaner logs
@@ -373,6 +419,9 @@ rm -rf "${OUTPUT_DIR}"
373419mkdir -p " ${OUTPUT_DIR} "
374420log_info " Output: ${OUTPUT_DIR} "
375421
422+ # Initialize database configuration (AWS or local Docker)
423+ init_db_config
424+
376425# Initialize deploy mode
377426if [[ " $DEPLOY_MODE " == true ]]; then
378427 log_info " Deploy mode enabled - will push to ECR and deploy to EKS"
0 commit comments