11#! /usr/bin/env bash
22set -eu pipefail
33
4+ invoke_lambda_with_retry () {
5+ local function_name=" $1 "
6+ local payload_file=" $2 "
7+ local max_attempts=3
8+ local delay=30
9+
10+ for attempt in $( seq 1 " $max_attempts " ) ; do
11+ echo " Invoking ${function_name} (attempt ${attempt} of ${max_attempts} )"
12+ aws lambda invoke --function-name " ${function_name} " --cli-binary-format raw-in-base64-out --payload " file://${payload_file} " out.txt > response.json
13+
14+ if ! eval " cat response.json | jq -e '.FunctionError' >/dev/null" ; then
15+ return 0
16+ fi
17+
18+ echo " Error calling lambda (attempt ${attempt} of ${max_attempts} )"
19+ cat out.txt
20+
21+ if [ " $attempt " -lt " $max_attempts " ]; then
22+ echo " Retrying in ${delay} seconds..."
23+ sleep " $delay "
24+ fi
25+ done
26+
27+ echo " Lambda ${function_name} failed after ${max_attempts} attempts"
28+ return 1
29+ }
30+
431echo " API type: ${API_TYPE} "
532echo " Specification path: ${SPEC_PATH} "
633echo " Specification version: ${VERSION_NUMBER} "
@@ -31,7 +58,7 @@ put_secret_lambda=lambda-resources-ProxygenPTLMTLSSecretPut
3158instance_put_lambda=lambda-resources-ProxygenPTLInstancePut
3259spec_publish_lambda=lambda-resources-ProxygenPTLSpecPublish
3360
34- if [[ " $APIGEE_ENVIRONMENT " =~ ^(int| sandbox| prod)$ ]]; then
61+ if [[ " $APIGEE_ENVIRONMENT " =~ ^(int| sandbox| prod)$ ]]; then
3562 put_secret_lambda=lambda-resources-ProxygenProdMTLSSecretPut
3663 instance_put_lambda=lambda-resources-ProxygenProdInstancePut
3764 spec_publish_lambda=lambda-resources-ProxygenProdSpecPublish
@@ -71,7 +98,7 @@ if [[ "${IS_PULL_REQUEST}" == "true" ]]; then
7198 jq ' ."x-nhsd-apim".temporary = true' " ${SPEC_PATH} " > temp.json && mv temp.json " ${SPEC_PATH} "
7299fi
73100
74- # Find and replace the specification version number
101+ # Find and replace the specification version number
75102jq --arg version " ${VERSION_NUMBER} " ' .info.version = $version' " ${SPEC_PATH} " > temp.json && mv temp.json " ${SPEC_PATH} "
76103
77104# Find and replace the x-nhsd-apim.target.url value
@@ -138,12 +165,7 @@ if [[ "${ENABLE_MUTUAL_TLS}" == "true" ]]; then
138165 --arg proxygenSecretName " ${proxygen_private_key_arn} " \
139166 ' {apiName: $apiName, environment: $environment, secretName: $secretName, secretKey: $secretKey, secretCert: $secretCert, kid, $kid, proxygenSecretName: $proxygenSecretName}' > payload.json
140167
141- aws lambda invoke --function-name " ${put_secret_lambda} " --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt > response.json
142- if eval " cat response.json | jq -e '.FunctionError' >/dev/null" ; then
143- echo ' Error calling lambda'
144- cat out.txt
145- exit 1
146- fi
168+ invoke_lambda_with_retry " ${put_secret_lambda} " payload.json
147169 echo " Secret stored successfully"
148170
149171 else
@@ -163,13 +185,7 @@ if [[ "${DRY_RUN}" == "false" ]]; then
163185 --arg proxygenSecretName " ${proxygen_private_key_arn} " \
164186 ' {apiName: $apiName, environment: $environment, specDefinition: $spec, instance: $instance, kid: $kid, proxygenSecretName: $proxygenSecretName}' > payload.json
165187
166- aws lambda invoke --function-name " ${instance_put_lambda} " --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt > response.json
167-
168- if eval " cat response.json | jq -e '.FunctionError' >/dev/null" ; then
169- echo ' Error calling lambda'
170- cat out.txt
171- exit 1
172- fi
188+ invoke_lambda_with_retry " ${instance_put_lambda} " payload.json
173189 echo " Instance deployed"
174190else
175191 echo " Would call ${instance_put_lambda} "
@@ -187,13 +203,7 @@ if [[ "${APIGEE_ENVIRONMENT}" == "int" ]]; then
187203 --arg proxygenSecretName " ${proxygen_private_key_arn} " \
188204 ' {apiName: $apiName, environment: $environment, specDefinition: $spec, instance: $instance, kid: $kid, proxygenSecretName: $proxygenSecretName}' > payload.json
189205
190- aws lambda invoke --function-name " ${spec_publish_lambda} " --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt > response.json
191-
192- if eval " cat response.json | jq -e '.FunctionError' >/dev/null" ; then
193- echo ' Error calling lambda'
194- cat out.txt
195- exit 1
196- fi
206+ invoke_lambda_with_retry " ${spec_publish_lambda} " payload.json
197207 echo " Spec deployed"
198208 else
199209 echo " Would call ${spec_publish_lambda} "
@@ -212,13 +222,7 @@ if [[ "${APIGEE_ENVIRONMENT}" == "internal-dev" && "${IS_PULL_REQUEST}" == "fals
212222 --arg proxygenSecretName " ${proxygen_private_key_arn} " \
213223 ' {apiName: $apiName, environment: $environment, specDefinition: $spec, instance: $instance, kid: $kid, proxygenSecretName: $proxygenSecretName}' > payload.json
214224
215- aws lambda invoke --function-name " ${spec_publish_lambda} " --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt > response.json
216-
217- if eval " cat response.json | jq -e '.FunctionError' >/dev/null" ; then
218- echo ' Error calling lambda'
219- cat out.txt
220- exit 1
221- fi
225+ invoke_lambda_with_retry " ${spec_publish_lambda} " payload.json
222226 echo " Spec deployed"
223227 else
224228 echo " Would call ${spec_publish_lambda} "
0 commit comments