All Articles

Bitbucket pipelines를 이용해 AWS Lambda 배포하기

Intro

AWS Lambda 함수는 AWS 웹사이트에서 쉽게 만들고 수정할 수 있습니다.

하지만 코드 관리를 위해 Git을 사용하게 된다면 CLI(터미널)에서 배포를 하는 것이 편리할 것입니다.

또한 배포 스크립트를 파일로 저장해 한 번에 실행시킬 수 있다면 더더욱 좋을 것입니다.

이번 글은 Bitbucket에서 Lambda Function 배포를 간편하게 하는 방법을 살펴보겠습니다.

How to do

먼저 CLI 환경에서 Lambda Function 생성, 수정 등을 하기 위해서는 AWS 인증키가 필요합니다. 해당 키는 Lambda 생성,수정에 대한 권한이 있는 키여야 합니다.

AWS Key 발급받는 법

access_key, secret_key 는 노출되지 않도록 조심해야 합니다.

생성된 키는 bitbucket 프로젝트의 환경변수로 저장할 것입니다. 환경변수로 저장할 값들은 다음과 같습니다.

  1. AWS_ACCESS_KEY

  2. AWS_SECRET_ACCESS_KEY

  3. AWS_ROLE_ARN

    AWS Lambda에 접근 가능한 role의 ARN이어야 합니다. 사용자(user)가 아니고 역할(role)의 ARN입니다.

  4. AWS_DEFAULT_REGION

    사용중인 region. 저는 ap-northeast-2입니다.


환경변수는 Bitbucket에서 해당 repository의 설정 메뉴에서 repository variable 메뉴에서 설정할 수 있습니다.

  1. 환경변수를 설정하기 전에, 해당 프로젝트에서 pipeline 사용을 활성화 해줘야 합니다.
  2. 프로젝트로 들어가 왼쪽 하단에 있는 톱니바퀴 버튼을 클릭합니다.

setting_button-min.png

  1. 왼쪽 메뉴의 PIPELINES 카테고리에서 Settings 를 클릭합니다.

pipeline_setting-min.png

  1. Enable Pipelines를 on 상태로 설정해줍니다.

enable_pipelines-min.png

  1. 이제 환경변수를 등록해야 합니다. 왼쪽 메뉴에서 Repository variables 를 클릭합니다.

repositry_variables-min.png

  1. 여기에 발급받은 AWS Key들을 Name/Value쌍으로 입력합니다.

set_repository_variables-min.png

bitbucket-pipelines.yml 파일 생성

환경변수 등록을 마쳤다면 bitbucket이 인식할 수 있는 배포 스크립트를 만들어줘야 합니다.

프로젝트 최상단 폴더에서bitbucket-pipelines.yml 라는 파일을 생성합니다.

파일명이 pipelines 인걸 보면 알 수 있 듯이 여러 개의 파이프라인을 정의할 수 있습니다.

이 파일에 배포 스크립트를 정의하면 bitbucket 프로젝트 페이지에서 이를 실행시킬 수 있습니다.

예제에서는 두 개의 파이프라인을 만들어 보겠습니다.

pipelines_code-min.png

image: node:10
options:
  max-time: 30

pipelines:
  branches:
    function-1:
      - step:
          script:
            - echo Deploy AWS Lambda Function1
            - cd function1
            - npm install
            - npm install node-lambda -g
            - node-lambda deploy -a $AWS_ACCESS_KEY_ID -o $AWS_ROLE_ARN -s $AWS_SECRET_ACCESS_KEY -r $AWS_DEFAULT_REGION -n function1
    function-2:
      - step:
          script:
            - echo Deploy AWS Lambda Function2
            - cd function2
            - npm install
            - npm install node-lambda -g
            - node-lambda deploy -a $AWS_ACCESS_KEY_ID -o $AWS_ROLE_ARN -s $AWS_SECRET_ACCESS_KEY -r $AWS_DEFAULT_REGION -n function2

function1function2 , 두 개의 함수를 독립적으로 배포하는 스크립트입니다.

각 스크립트는 동일한 스텝으로 이루어져 있으며 함수 이름만 변경하여 진행합니다.

라인별로 살펴보면,

  1. echo Deploy AWS Lambda Function1

    echo는 프로그래밍 언어에서 print함수와 같습니다. echo ~~ 하게 되면 echo 뒤에 따라오는 문장이 배포화면에서 출력됩니다.

  2. cd function1 , npm install

    function1 폴더로 들어가 package.json 에 있는 모듈들을 설치합니다.

  3. npm install node-lambda -g

    람다 배포를 진행해줄 node-lambda 라이브러리를 설치합니다.

  4. node-lambda 를 이용해 배포합니다.

    스크립트에서 각각의 옵션은 다음을 의미합니다.

    -a : $AWSACCESSKEY (환경변수)

    -o : $AWSROLEARN (환경변수)

    -s : $AWSSECRETACCESS_KEY (환경변수)

    -n : 배포할 Lambda Function 이름

설정에서 bitbucket pipelines를 활성화 시켰으며 bitbucket-pipelines.yml 을 생성했다면 이제 파이프라인을 이용한 배포를 할 수 있습니다.


배포는 간단합니다.

  1. bitbucket 해당 프로젝트페이지에서 commit 메뉴로 들어갑니다.

commit_menu-min.png

  1. 원하는 commit 번호를 클릭합니다.

commit_number-min.png

  1. 오른쪽 메뉴의 run pipelines 버튼을 클릭합니다.

run_pipelines-min.png

  1. 원하는 파이프라인을 선택하고 run 버튼을 누릅니다.

select_pipelines-min.png

  1. 완료될 때까지 기다립니다.

pipelines-ongoing-min.png

Wrapping up

이번 글에서는 node-labmda 라이브러리를 이용해 bitbucket에서 배포를 간편하게 할 수 있는 방법을 살펴봤습니다. 제가 소개한 방법 말고도 lambda를 배포하는 방법은 여러가지가 있습니다.

가장 대표적인 방법은 serverless-framework를 이용하는 것입니다. serverless는 API Gateway도 통합적으로 관리할 수 있게 해줘서 lambda를 이용한 REST API 설계에 최적화돼있습니다.

저의 경우는 기존에 사용중이던 Lambda Function에 배포만 덧입혀야 하는 상황이어서 Lambda만 독립적으로 사용할 수 있는 방법을 찾다보니 node-lambda를 이용하게 됐습니다.

이 글에서 다룬 것은 Lambda 배포이지만 다른 AWS 서비스를 배포하는 것도 이와 유사한 프로세스를 갖고 있습니다. (AWS뿐만 아니라 다른 클라우드 서비스들도 그럴 것으로 보입니다)