Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 60 additions & 5 deletions .github/workflows/deploy-lambda.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -105,24 +105,65 @@ jobs:

echo "image_uri=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> "$GITHUB_OUTPUT"

# Lambda 함수 업데이트
- name: Deploy new image to AWS Lambda
# Lambda 함수 존재 여부 확인
- name: Check if Lambda function exists
id: check-lambda
shell: bash
run: |
set +e
RESULT=$(aws lambda get-function \
--function-name "${{ vars.LAMBDA_FUNCTION_NAME }}" 2>&1)
STATUS=$?
set -e

if [[ $STATUS -eq 0 ]]; then
echo "exists=true" >> "$GITHUB_OUTPUT"
elif [[ "$RESULT" == *"ResourceNotFoundException"* ]]; then
echo "exists=false" >> "$GITHUB_OUTPUT"
else
echo "$RESULT"
exit $STATUS
fi

# 기존 Lambda 함수 코드 업데이트
- name: Update existing Lambda function code
if: steps.check-lambda.outputs.exists == 'true'
run: |
aws lambda update-function-code \
--function-name "${{ vars.LAMBDA_FUNCTION_NAME }}" \
--image-uri "${{ steps.build-image.outputs.image_uri }}"

# 코드 업데이트가 완료될 때까지 대기
- name: Wait for Lambda function update to complete
if: steps.check-lambda.outputs.exists == 'true'
run: |
aws lambda wait function-updated \
--function-name ${{ vars.LAMBDA_FUNCTION_NAME }}

# Lambda 환경 변수 설정
- name: Update Lambda Environment Variables
# 기존 Lambda 함수의 실행 역할 및 환경 변수 업데이트
- name: Update existing Lambda function configuration
if: steps.check-lambda.outputs.exists == 'true'
run: |
aws lambda update-function-configuration \
--function-name "${{ vars.LAMBDA_FUNCTION_NAME }}" \
--role "${{ vars.LAMBDA_EXECUTION_ROLE_ARN }}" \
--environment "Variables={ \
REGION_NAME=${{ vars.AWS_REGION }}, \
LAMBDA_FUNCTION_NAME=${{ vars.LAMBDA_FUNCTION_NAME }}, \
ECR_REPOSITORY_NAME=${{ vars.ECR_REPOSITORY_NAME }}, \
BUCKET_NAME=${{ vars.BUCKET_NAME }}, \
THUMBNAIL_BUCKET=${{ vars.THUMBNAIL_BUCKET }} \
}"

# Lambda 함수가 없으면 신규 생성
- name: Create Lambda function
if: steps.check-lambda.outputs.exists == 'false'
run: |
aws lambda create-function \
--function-name "${{ vars.LAMBDA_FUNCTION_NAME }}" \
--package-type Image \
--code "ImageUri=${{ steps.build-image.outputs.image_uri }}" \
--role "${{ vars.LAMBDA_EXECUTION_ROLE_ARN }}" \
--environment "Variables={ \
REGION_NAME=${{ vars.AWS_REGION }}, \
LAMBDA_FUNCTION_NAME=${{ vars.LAMBDA_FUNCTION_NAME }}, \
Expand All @@ -131,6 +172,20 @@ jobs:
THUMBNAIL_BUCKET=${{ vars.THUMBNAIL_BUCKET }} \
}"

# 기존 Lambda 설정 업데이트가 완료될 때까지 대기
- name: Wait for Lambda configuration update to complete
if: steps.check-lambda.outputs.exists == 'true'
run: |
aws lambda wait function-updated \
--function-name ${{ vars.LAMBDA_FUNCTION_NAME }}

# 신규 Lambda 함수가 Active 상태가 될 때까지 대기
- name: Wait for new Lambda function to become active
if: steps.check-lambda.outputs.exists == 'false'
run: |
aws lambda wait function-active-v2 \
--function-name ${{ vars.LAMBDA_FUNCTION_NAME }}

- name: Summarize deployment metadata
shell: bash
env:
Expand All @@ -143,4 +198,4 @@ jobs:
echo "- Environment: $DEPLOY_ENVIRONMENT"
echo "- ECR Repository: ${{ vars.ECR_REPOSITORY_NAME }}"
echo "- Lambda Function: ${{ vars.LAMBDA_FUNCTION_NAME }}"
} >> "$GITHUB_STEP_SUMMARY"
} >> "$GITHUB_STEP_SUMMARY"
Loading