본문 바로가기
Spring/SpringBoot

[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (4) - GitLab으로 Lambda 자동배포하기

by J4J 2023. 5. 10.
300x250
반응형

안녕하세요. J4J입니다.

 

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

 

 

 

이전 글

 

[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (1) - Spring 세팅 및 로컬 테스트

[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (2) - Lambda 생성해서 배포하기

[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (3) - API Gateway에 Lambda 연결하기

 

 

반응형

 

 

IAM 설정

 

[ 1. IAM 접속 ]

 

IAM 접속

 

 

 

[ 2. 사용자 추가 ]

 

왼쪽 사용자 메뉴를 선택한 뒤 오른쪽에 있는 사용자 추가 버튼을 클릭해 줍니다.

 

사용자 추가

 

 

 

[ 3. 사용자 상세 설정 ]

 

사용자 상세 설정은 다음과 같이 진행해 주시면 됩니다.

 

여기서 필수적으로 해야 되는 것은 AmazonS3FullAccess, AWSLambda_FullAccess 권한들을 추가해줘야 합니다.

 

사용자 세부 정보

 

권한 설정 정보 - AmazonS3FullAccess

 

권한 설정 정보 - AWSLambad_FullAccess

 

 

 

[ 4. 사용자 액세스 키 발급 ]

 

생성한 사용자를 목록에서 선택하여 상세 정보로 들어갑니다.

 

사용자 상세 정보 이동

 

 

 

그리고 보안 자격 증명 탭을 선택한 뒤 액세스 키 만들기를 클릭해 줍니다.

 

액세스 키 만들기

 

 

 

액세스 키 사례는 다음과 같이 "AWS 컴퓨팅 서비스에서 실행되는 애플리케이션"을 선택하여 액세스 키를 생성해 줍니다.

 

액세스 키 사례

 

 

 

그러면 다음과 같이 액세스 키 값을 확인할 수 있으며 해당 정보는 자동 배포를 위한 GitLab 설정을 할 때 사용되니 백업을 해두셔야 합니다.

 

액세스 키 확인

 

 

 

 

GitLab 설정

 

[ 1. variables 설정 ]

 

Lambda에 배포할 소스를 관리하는 GitLab Repository로 접속해 줍니다.

 

그리고 Settings → CI/CD로 이동해 줍니다.

 

CI/CD 설정 이동

 

 

 

아래로 스크롤하면 Variables가 보이는데 Collapse를 클릭한 뒤 Add variable을 이용하여 총 3개의 변수를 넣어줍니다.

 

variables 추가하기

 

 

 

추가해 줄 변수는 총 3개입니다.

 

  • AWS_ACCESS_KEY_ID → IAM 사용자 액세스 키
  • AWS_SECRET_ACCESS_KEY → IAM 사용자 비밀 액세스 키
  • AWS_DEFAULT_REGION → 사용하는 Region

 

여기서 주의해야 할 점은 배포되는 branch가 protected (보호모드)가 적용되어 있지 않다면 Flags에서 Protect variable 체크를 해제해야 합니다.

 

액세스 키 추가

 

비밀 액세스 키 추가

 

Region 추가

 

 

 

[ 2. .gitlab-ci.yml 작성 ]

 

Spring 프로젝트 최상단에 .gitlab-ci.yml 파일을 생성하여 이전 글에서 수동으로 한 것처럼 자동 배포 될 수 있게 코드를 작성해 보겠습니다.

 

# 실행될 stage 지정 (위에서 아래로 차례대로 실행)
stages:
  - build
  - package
  - deploy

variables:
  S3_BUCKET_NAME: j4j-lambda-apigateway-bucket
  S3_OBJECT_NAME: lambdaApiGateway-0.0.1-SNAPSHOT-aws.jar
  LAMBDA_NAME: apigateway-lambda

build:  # JOB 이름
  # 사용될 이미지 설정
  image: gradle:7.6.1-jdk11
  # stage 설정
  stage: build
  # 실행될 script 설정
  script:
    - chmod +x gradlew
    - ./gradlew build
  # artifacts 설정 (bulld를 통해 생성된 파일을 job artifacts에 보관하여 다음에 수행되는 JOB에서 가져다 활용할 수 있게 도와줌)
  artifacts:
    # 보관이 이루어질 경로 설정
    paths:
      - build/libs/*-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 build/libs/*-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.apigateway.handler.LambdaApiGatewayHandler
      --memory-size 512
      --timeout 120
      --environment "Variables={MAIN_CLASS=com.lambda.apigateway.LambdaApiGatewayApplication, TZ=Asia/Seoul}"
  # JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
  only:
    - master

 

 

 

 

테스트

 

모든 설정이 끝났다면 Repository에 코드를 push 해줍니다.

 

그러면 CI/CD Pipelines에 다음과 같이 파이프라인 동작하는 것을 확인할 수 있습니다.

 

파이프라인 동작

 

 

 

파이프라인 동작이 모두 완료되었다면 올바르게 배포가 되었는지 확인해 주시면 됩니다.

 

S3, Lambda 코드 소스, 기능 동작 등 테스트를 해보면 정상적으로 모두 적용된 것을 확인해 볼 수 있습니다.

 

S3 변경 이력

 

코드 소스 변경 이력

 

자동 배포 후 API 실행 결과

 

 

 

 

 

 

 

 

이상으로 AWS Lambda와 API Gateway로 Serverless 구성하기 마지막인 GitLab으로 Lambda 자동배포하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글