TIL 20220119 AWS Lambda를 boto3로 호출하기

jiffydev·2022년 1월 19일
0

aws lambda로 크롤링을 하게 되었는데 의외로 boto3로 호출하는 방법이 잘 안나와 있어서 기록.
람다 함수 생성 등은 다른 블로그에도 많이 있으니 찾아보면 될 듯.

event handler

def event_handler(event, context):
  name = event['name']
  age = event['age']
  return {'lambda_name': f'lambda {name}', 'lambda_age': age}

lambda 호출하는 코드

import boto3
import json

lambda_client = boto3.client('lambda',
                             region_name='ap-northeast-2',
                             aws_access_key_id='ACCESS_KEY_ID',
                             aws_secret_access_key='SECRET_ACCESS_KEY')
payload = {'name': 'foo', 'age': 20}
res = lambda_client.invoke(FunctionName='test-function', 
                           InvocationType='RequestResponse', # RequestResponse외에도 Event 등이 있으니 필요에 따라 수정
                           Payload=json.dumps(payload))
                           

여기서 res 의 값에는, 람다 함수에서 설정한 리턴값 + 메타데이터가 들어 있다.
(출처: https://stackoverflow.com/questions/58751026/getting-aws-lambda-response-when-using-boto3-invoke)

{'ResponseMetadata': {'RequestId': 'xxxxxxxxx', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Thu, 07 Nov 2019 14:28:25 GMT', 'content-type': 'application/json', 'content-length': '51', 'connection': 'keep-alive', 'x-amzn-requestid': 'xxxxxxxxxx', 'x-amzn-remapped-content-length': '0', 'x-amz-executed-version': '$LATEST', 'x-amzn-trace-id': 'root=xxxxxxxxx;sampled=0'}, 'RetryAttempts': 0}, 'StatusCode': 200, 'ExecutedVersion': '$LATEST', 'Payload': <botocore.response.StreamingBody object at 0x0000023D15716048>}

맨 마지막 'Payload'에 StreamingBody 타입으로 들어가 있으므로 필요한 Payload를 가져오려면 이를 read 해야 한다.

# 위 코드에 이어서 작성
data = json.loads(res['Payload'].read())
print(data)

>> {'lambda_name': 'lambda foo', 'lambda_age': 20}
profile
잘 & 열심히 살고싶은 개발자

0개의 댓글