AWS CLI 설치
Lambda에 코드를 배포할 용도로 AWS CLI를 설치해주자
pip3 install awscli --upgrade --user
AWS CLI에 사용할 사용자 권한 설정
Lambda에 코드를 배포하기 위한 권한으로 AWSCodeDeployRoleForLambda
가 필요하다.
옵션으로 AWSLambdaFullAccess
가 있는데, 향후 람다 외의 서비스에 접근할 경우에 추가해뒀다.
“IAM 서비스 -> 사용자 -> 사용자 추가 -> 권한 추가” 순서를 따르면 권한 설정 페이지를 찾을 수 있다.
# ~/.aws/credentials
[default]
aws_access_key_id = KEY_ID
aws_secret_access_key = SECRET_KEY
# ~/.aws/config
[default]
region = ap-northeast-2
KEY_ID
와 SECRET_KEY
에 사용자 생성 시 제공하는 키 값을 넣어주자.
ap-northeast-2
는 서울 리전을 가리킨다.
Lambda 및 버킷 생성하기
생성시
AWSLambdaExecute
권한을 선택하고 적절한 권한 이름을 만든다(예시:lambda-s3-role
).데이터를 저장할 버킷을 생성해둔다.
람다로 생성한 정보를 버킷에 저장하기
import boto3
Bucket = boto3.resource('s3').Bucket('Bucket')
def lambda_handler(event, context):
Bucket.put_object(
Key='hello.txt', Body='hello, world!')
boto3
는 파이썬 전용 AWS SDK 모듈이다.
외부 패키지와 함께 배포하기
배포 패키지는 함수 코드 및 종속성이 포함되어 있는 ZIP 아카이브 파일입니다. (중략..) 코드에서 AWS SDK 이외의 라이브러리와 종속성을 포함하려면 배포 패키지를 생성해야 합니다. - AWS Lambda 배포 패키지(Python) - AWS Lambda
AWS lambda에서는 다른 서버리스 서비스과 달리 외부 패키지 설치 기능이 없다. 그래서 수동으로 압축 파일을 만들어 두고 aws-cli를 통해 올려둬야 한다.
pip install --target ./package jejunuMeals
zip -r9 ./function.zip ./package
zip -g function.zip lambda_function.py
위 코드 블럭에선 람다에 올리고 싶은 외부 패키지를 편의상 별도의 디렉터리 안에서 관리하도록 했다.
만든 압축 파일에 lambda_function.py
를 추가하면 배포할 준비가 완료된다.
aws lambda update-function-code --function-name jejunu-meals --zip-file fileb://function.zip
혹시라도 이 부분에서 막혔다면 권한 설정을 다시 확인하기 바란다.
CloudWatch Events 설정
트리거 추가 -> CloudWatch Events -> cron(0 10 ? * MON *)
(매주 월요일 GMT 10시)
cron 표기식은 유닉스 시스템의 그것과는 조금 다르다. ?
, *
모두 와일드카드인데, ‘일’ 또는 ‘요일’ 필드 중 반드시 하나에 ?
를 사용해야 된다.
무슨 말이냐면 요일 필드에 MON
을 입력하고, 날짜 필드가 와일드 카드를 사용할 경우 *
대신 ?
를 입력해야 된다는 말이다.
자세한 사항은 규칙에 대한 예약 표현식 - Amazon CloudWatch Events 문서를 참고 바란다
구현 예시
구현 예시는 x86chi/aws-lambda-s3 저장소를 참고 바란다.