본문 바로가기
Spring/SpringBoot

[SpringBoot] AWS Lambda로 배치 만들기 (3) - GitLab으로 자동배포하기

by J4J 2022. 12. 15.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 AWS Lambda 배치 만들기 마지막인 GitLab으로 자동 배포하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

이전 글

 

[SpringBoot] AWS Lambda로 배치 만들기 (1) - Spring 세팅 및 로컬 테스트

[SpringBoot] AWS Lambda로 배치 만들기 (2) - Lambda 생성해서 배포하기

 

 

반응형

 

 

IAM 설정

 

[ 1. IAM 접속 ]

 

IAM 접속

 

 

 

[ 2. 사용자 추가 ]

 

좌측에서 사용자 메뉴를 선택한 뒤 우측에 있는 사용자 추가 버튼을 클릭합니다.

 

사용자 추가

 

 

 

[ 3. 사용자 정보 설정 - 세부 정보 및 액세스 유형 설정 ]

 

세부 정보 설정에서는 사용하실 사용자 이름을 자유롭게 입력해주면 됩니다.

 

액세스 유형에서는 액세스 키를 선택해주면 됩니다.

 

사용자 정보 설정 - 세부 정보 및 액세스 유형 설정

 

 

 

[ 4. 사용자 정보 설정 - 권한 설정 ]

 

권한 설정은 각자 상황에 맞게 자유로운 방식을 선택해서 설정해주시면 됩니다.

 

결과적으로 AmazonS3FullAccess, AWSLambda_FullAccess 권한이 부여되어 있으면 됩니다.

 

모든 권한이 설정되어 있다면 사용자를 최종적으로 만들어주시면 됩니다.

 

사용자 정보 설정 - 권한 설정

 

사용자 정보 설정 - 권한 설정

 

 

 

[ 5. 사용자 액세스 키 확인 ]

 

사용자 생성이 완료되면 다음과 같은 화면이 보입니다.

 

여기서 보이는 액세스 키 ID와 비밀 액세스 키 값은 아래에서 사용될 예정이니 csv로 다운로드를 하던 키 값을 어딘가에 저장해둠으로 써 보관을 해줘야 합니다.

 

사용자 액세스 키 확인

 

 

 

 

GitLab 설정

 

[ 1. variable 설정 ]

 

지금까지 작업한 Spring 프로젝트를 관리하는 GitLab Repository를 생성한 뒤 해당 Repository의 좌측 메뉴를 통해 다음과 같이 CI/CD로 접속해줍니다.

 

CI/CD 접속

 

 

 

그다음 Variables를 찾은 뒤 Add variable를 눌러 필요한 변숫값을 추가해줍니다.

 

Add variable

 

 

 

필요한 변숫값들은 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION이 있습니다.

 

각각 순서대로 위에서 생성한 IAM의 액세스 키 ID, IAM의 비밀 액세스 키, Lambda가 사용되는 지역을 넣어주시면 됩니다.

 

저와 같은 경우는 다음과 같이 추가를 해줄 수 있습니다.

※ Branch가 protected 되어 있지 않으면 Flags의 체크박스를 해제해줘야 합니다.

 

AWS_ACCESS_KEY_ID 추가

 

AWS_SECRET_ACCESS_KEY 추가

 

AWS_DEFAULT_REGION 추가

 

 

 

[ 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에 변경 시간이 적용되면서 설정한 값에 맞게 수정된 것을 확인할 수 있습니다.

 

S3 적용 확인

 

Lambda 적용 확인

 

 

 

 

 

 

 

 

 

이상으로 AWS Lambda 배치 만들기 마지막인 GitLab으로 자동 배포하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글