CLI로 AWS Lambda 함수 배포 자동화 해보자

Posted by 토토로 on January 21, 2019

CLI로 AWS Lambda 함수 배포 자동화하기

처음 알렉사 스킬을 개발할 때 파일들을 zip 압축해 lambda에 넣는 것을 반복하면서 업데이트하고 테스트하기를 반복했다.
zip파일들이 늘어가면서 파일들을 계속 정리하는 것은 너무 비효율적이라고 생각했고, 업데이트 할 때마다 lambda 페이지로 들어가서 버튼을 여러 번 누르는 것도 귀찮아져서, 자동화하는 방법을 찾게 되었고, CLI(command line interface)를 이용해 바로 업데이트하기 시작했다.

간략하게 먼저 순서를 말하면

  1. AWS CLI install
  2. AWS IAM user 셋업, keys 생성
  3. AWS CLI 사용자 설정
  4. 배포 위한 shell 작성(batch commands)

1. AWS CLI Install


pip install awscli

aws-cli 공식 문서

install 후 command를 통해 다음과 같은 항목들을 수정해야 한다.

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region name
  • Default output format

2. AWS IAM user 셋업, keys 생성

앞의 aws configure 의 항목에 넣어야하는 것들을 설정하는 방법을 알아보자. IAM에서 user관리를 해야 한다. IAM 사용자 관리에서 새로운 유저 생성/유저 관리를 통해 key ID와 Secret Access Key를 알 수 있다.

[IAM user관리 페이지]


[새로운 유저 만들기]

[기존 유저에게 엑세스 키 부여하기]
엑세스 키 만들기 버튼을 클릭해 키와 시크릿키를 받는다.


새로운 유저를 만들거나 기존의 유저에 key를 활성화 시켜 lambda function의 Access Key ID 와 Secret Access Key를 알 수 있다.
Default region name과 output format은 lambda function의 지역과 format에 맞게 지정한다.

3. AWS CLI 사용자 설정

다음 command를 실행한다.


aws configure

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region name
  • Default output format

항목들을 변경할 수 있는 입력란이 나오며, IAM user관리에서 찾았던 ID와 Key 등을 넣는다. 그리고 위에 적은 항목들이 제대로 적었는지 command로 확인해본다.


aws lambda list-functions

Access Key ID의 lambda function list를 확인

4. 배포 위한 shell 작성(batch commands)

결과값이 제대로 나온다면, 배포 자동화를 하고 싶은 root folder에 lambda 폴더를 하나 생성한다. 그리고 lambda 폴더 안에 배포하고자 하는 코드와 소스 파일들, 모듈들을 넣는다. (lambda function 파일 포함)

root folder에 publish.sh 파일을 생성한다.(window에선 publish.bat) 그리고 밑의 코드를 복사해서 넣는다.


rm index.zip 
cd lambda 
zip –X –r ../index.zip *
cd .. 
aws lambda update-function-code --function-name MyLambdaFunction --zip-file fileb://index.zip

window에선 1번째 줄 ->
del index.zip
window에선 3번째 줄 ->
7z a -r ..\index.zip *

이제 스크립트를 실행하면 된다.


./publish.sh

window: 그냥 publish
permission problem이 뜨면 chmod +x publish.sh

제일 처음 스크립트를 실행하면 ‘no file called index.zip exists’가 뜰 수 있다. 처음 한 번 이후에는 뜨지 않으니 걱정할 필요는 없다. 성공적으로 배포되면, output설정의 포맷으로 결과값이 나올 것이다.

이 문서를 만들 때 참고한 문서