안녕하세요. J4J입니다.
이번 포스팅은 AWS Lambda 배치 만들기 마지막인 GitLab으로 자동 배포하는 방법에 대해 적어보는 시간을 가져보려고 합니다.
이전 글
[SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트
[SpringBoot] AWS Lambda로 배치 만들기 (2) - Lambda 생성해서 배포하기
IAM 설정
[ 1. IAM 접속 ]
[ 2. 사용자 추가 ]
좌측에서 사용자 메뉴를 선택한 뒤 우측에 있는 사용자 추가 버튼을 클릭합니다.
[ 3. 사용자 정보 설정 - 세부 정보 및 액세스 유형 설정 ]
세부 정보 설정에서는 사용하실 사용자 이름을 자유롭게 입력해주면 됩니다.
액세스 유형에서는 액세스 키를 선택해주면 됩니다.
[ 4. 사용자 정보 설정 - 권한 설정 ]
권한 설정은 각자 상황에 맞게 자유로운 방식을 선택해서 설정해주시면 됩니다.
결과적으로 AmazonS3FullAccess, AWSLambda_FullAccess 권한이 부여되어 있으면 됩니다.
모든 권한이 설정되어 있다면 사용자를 최종적으로 만들어주시면 됩니다.
[ 5. 사용자 액세스 키 확인 ]
사용자 생성이 완료되면 다음과 같은 화면이 보입니다.
여기서 보이는 액세스 키 ID와 비밀 액세스 키 값은 아래에서 사용될 예정이니 csv로 다운로드를 하던 키 값을 어딘가에 저장해둠으로 써 보관을 해줘야 합니다.
GitLab 설정
[ 1. variable 설정 ]
지금까지 작업한 Spring 프로젝트를 관리하는 GitLab Repository를 생성한 뒤 해당 Repository의 좌측 메뉴를 통해 다음과 같이 CI/CD로 접속해줍니다.
그다음 Variables를 찾은 뒤 Add variable를 눌러 필요한 변숫값을 추가해줍니다.
필요한 변숫값들은 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION이 있습니다.
각각 순서대로 위에서 생성한 IAM의 액세스 키 ID, IAM의 비밀 액세스 키, Lambda가 사용되는 지역을 넣어주시면 됩니다.
저와 같은 경우는 다음과 같이 추가를 해줄 수 있습니다.
※ Branch가 protected 되어 있지 않으면 Flags의 체크박스를 해제해줘야 합니다.
[ 2. .gitlab-ci.yml 작성 ]
Spring 프로젝트에 .gitlab-ci.yml 파일을 생성한 뒤 다음과 같이 작성해줍니다.
이전 글에서 만들었던 S3와 Lambda 정보들이 그대로 설정될 수 있도록 .gitlab-ci.yml 에서 정의해줄 수 있습니다.
# 실행될 stage 지정 (위에서 아래로 차례대로 실행)
stages:
- build
- package
- deploy
variables:
S3_BUCKET_NAME: j4j-lambda-deploy-bucket
S3_OBJECT_NAME: lambdaBatch-0.0.1-SNAPSHOT-aws.jar
LAMBDA_NAME: log-batch-lambda
build: # JOB 이름
# 사용될 이미지 설정
image: maven:3.8.4-jdk-11
# stage 설정
stage: build
# 실행될 script 설정
script:
- mvn clean package -DskipTests
# artifacts 설정 (bulld를 통해 생성된 파일을 job artifacts에 보관하여 다음에 수행되는 JOB에서 가져다 활용할 수 있게 도와줌)
artifacts:
# 보관이 이루어질 경로 설정
paths:
- target/*-aws.jar
# 유효기간 설정
expire_in: 1 days
# JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
only:
- master
package: # JOB 이름
# 사용될 이미지 설정
image: docker:latest
# stage 설정
stage: package
# service 설정 (설정한 image가 작업이 이루어지는 동안 실행되는 docker 이미지)
services:
- docker:dind
# 실행될 script 설정
script:
- apk add --no-cache curl jq python3 py3-pip
- pip install awscli
- aws s3 cp target/*-aws.jar s3://$S3_BUCKET_NAME/$S3_OBJECT_NAME
# JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
only:
- master
deploy: # JOB 이름
# 사용될 이미지 설정
image: docker:latest
# stage 설정
stage: deploy
# service 설정 (설정한 image가 작업이 이루어지는 동안 실행되는 docker 이미지)
services:
- docker:dind
# 실행될 script 설정
script:
- apk add --no-cache curl jq python3 py3-pip
- pip install awscli
- aws configure set region ap-northeast-2
- aws lambda update-function-code
--function-name $LAMBDA_NAME
--s3-bucket $S3_BUCKET_NAME
--s3-key $S3_OBJECT_NAME
- aws lambda update-function-configuration
--function-name $LAMBDA_NAME
--runtime java11
--handler com.lambda.batch.handler.LambdaLogHandler
--memory-size 512
--timeout 120
--environment "Variables={TZ=Asia/Seoul}"
# profile 설정이 필요한 경우
# --environment "Variables={TZ=Asia/Seoul, SPRING_PROFILES_ACTIVE=dev}"
# JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
only:
- master
테스트
모든 설정이 끝났다면 .gitlab-ci.yml이 실행될 수 있게 push를 해줍니다.
그러면 다음과 같이 파이프라인이 동작된 것을 확인할 수 있습니다.
파이프라인 동작이 모두 정상적으로 완료되었다면 S3와 Lambda에 정상적으로 업데이트가 이루어졌는지 확인해줍니다.
정상적으로 업데이트가 되었다면 다음과 같이 S3와 Lambda에 변경 시간이 적용되면서 설정한 값에 맞게 수정된 것을 확인할 수 있습니다.
이상으로 AWS Lambda 배치 만들기 마지막인 GitLab으로 자동 배포하는 방법에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Spring > SpringBoot' 카테고리의 다른 글
[SpringBoot] 이메일 발신하기 (0) | 2023.01.16 |
---|---|
[SpringBoot] encodeURIComponent, decodeURIComponent 사용하기 (0) | 2022.12.29 |
[SpringBoot] AWS Lambda로 배치 만들기 (2) - Lambda 생성해서 배포하기 (0) | 2022.12.12 |
[SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트 (0) | 2022.12.05 |
[SpringBoot] QueryDSL에서 DB Function 사용하기 (0) | 2022.09.29 |
댓글