without haste but without rest
[aws] aws lambda로 s3에 파일 저장하기 본문
참조 - www.youtube.com/watch?v=vXiZO1c5Sk0
단계 요약
1. aws lambda 함수 생성
2. IAM 롤 부여
3. S3 버킷 생성
4. lambda 환경에서 스크립트 작성
5. 테스트 및 배포
참조한 영상에서는 IAM을 먼저 생성하고 람다 함수를 작성하는데, 굳이 순서를 따라하지 않아도 된다. 본 포스팅은 람다를 이용해서 s3에 파일 저장하는 방법을 정리했다.
1. 람다 함수 생성
적당한 이름으로 람다 함수를 하나 생성한다. 랭귀지는 파이썬을 선택했다. 편한 언어로 선택하도록 하자
권한은 기본으로 설정한다. 추후에 해당 롤에 권한을 추가 해준다.
람다 함수를 생성하면 이와 같은 화면으로 넘어간다. 권한 카테고리를 눌러서 IAM의 권한을 추가 해줘야 한다.
권한 카테고리의 역할이름 밑 파란색 링크를 눌러준다.
정책 연결을 눌러준다.
S3 를 입력하고 적당한 권한을 연결해준다. 참조한 영상에서는 ReadOnlyAccess를 선택하고 추가로 입력 권한을 주어서 최소 권한을 유지하는 방식을 선택했다.
일단 정상작동하는지 빠르게 파악하기 위해서 FullAccess 권한을 선택했다.
2. 버킷 생성
s3 버킷은 이름만 적당히 지정해주고 퍼블릭 액세스나 기타 옵션은 안 건드려도 된다. 람다에서 접근하는 경우 롤을 정해주면 별도의 인증은 필요없다. (cli 환경에서 접속할 때는 키를 이용해서 인증을 해야했던 걸로 기억한다.)
다시 람다로 돌아와서 스크립트를 작성한다. 버킷에 임의로 만든 json 파일을 추가하는 코드다.
<python sample code>
import json
import boto3
import datetime
def lambda_handler(event, context):
bucket = 'Your-Bucket-name' #당신의 버킷 이름
file_name = str(datetime.datetime.now())[:-7]
file = dict()
file['customerID'] = 'jinyes'
file['age'] = '25'
file['product'] = 'aws_solution'
result = upload_file_s3(bucket, file_name + '.json', file)
if result:
return {
'statusCode': 200,
'body': json.dumps("upload success")
}
else:
return {
'statusCode': 400,
'body': json.dumps("upload fail")
}
def upload_file_s3(bucket, file_name, file):
encode_file = bytes(json.dumps(file).encode('UTF-8'))
s3 = boto3.client('s3')
try:
s3.put_object(Bucket=bucket, Key=file_name, Body=encode_file)
return True
except:
return False
3. 테스트 및 배포
배포 버튼 아래 섹션에 있는 test / deploy 에서 테스트 환경으로 진입하면 테스트를 해볼 수 있다. 기본 템플릿인 hello-world 에서 이벤트 이름만 입력해주고 실행해본다.
위와 같은 화면이 뜨면 성공이다. 배포를 해보자
배포를 해보니 버킷에 정상적으로 저장이 된 것을 확인할 수 있다. 위 코드에서 파일명은 저장한 시각으로 저장했다. 파일이 14시 인걸 보니 타임존이 북미로 설정되어있는 듯 하다.
파일 내용도 이상없다.
aws 제품들은 한 번 샘플 코드로 돌려보면 그 이후부터는 사용하기가 굉장히 쉬운데, 처음 배울 때가 까다로운 것 같다. 해외 유튜버들이 올려둔 튜토리얼 영상보고 따라하는 게 시간상 제일 좋은 것 같고, 코드만 필요할 때는 aws 공식 도큐먼트가 최고다.
'Cloud' 카테고리의 다른 글
LocalStack S3를 python boto3로 접근하기 (0) | 2022.01.04 |
---|---|
LocalStack - AWS를 로컬 환경에서 사용하기 (0) | 2022.01.04 |
[aws] boto3 도큐먼트 (0) | 2020.11.28 |
[aws] aws lambda로 http 리퀘스트 핸들링 (0) | 2020.11.27 |
[aws] 파이썬으로 aws S3에 파일 업로드 하기 (0) | 2020.08.05 |