Lambda
Lambda는 AWS의 대표적인 서버리스 서비스이다. 별도의 물리적인 서버없이 등록한 함수가 실행될 수 있도록 설정할 수 있다. Lambda는 마치 Python의 lambda 함수처럼 어떤 함수 하나를 등록해 사용할 수 있다.
AWS Lambda 함수 생성
'함수 생성' 버튼을 통해 Python 함수 하나를 등록하고 실행해보자. 아래 함수는 AWS의 s3에서 트리거(온도)를 전달 받아 온도의 정도(뜨거운지 아닌지)를 판단하는 함수이다.
import json
import boto3
from datetime import datetime
client = boto3.client('s3')
def lambda_handler(event, context):
what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
try:
response = client.get_object(Bucket=bucket, Key=key)
text = response['Body'].read().decode()
data = json.loads(text)
if data['temperature'] > 40:
print(f"Temperature detected : {data['temperature']}C at {what_time}")
print("Be careful! It's getting really hot!!")
else:
print("So far so good")
except Exception as e:
print(e)
raise e
이름과 실행시킬 프로그래밍 언어(런타임)를 선택한 후 함수를 생성해준다.
생성한 함수 상세페이지에 진입하면, 하단에 소스 코드를 수정할 수 있는 페이지가 나타난다. 여기에 위에 있는 파이썬 함수를 붙여넣어 보자.
이후 좌측에 있는 'Deploy' 버튼을 눌러야 코드가 함수에 적용된다.
S3 설정
이제 미리 만들어 둔 S3 버킷에 아래 내용이 담긴 json 파일을 업로드하자.
{
"temperature": 45
}
그 다음 버킷의 '속성' 탭에 진입,
이벤트 알림 항목에 '이벤트 알림 생성'을 통해 S3가 위에서 설정한 함수에 json파일에 있는 데이터를 보낼 수 있도록 설정한다.
이벤트 유형은 '전송'으로 설정하고 전달할 lambda 함수를 지정해준 뒤 이벤트를 생성해주면 된다.
이제 다시 lambda 함수 페이지로 되돌아와 새로고침을 눌러주면, 위 이미지와 같이 트리거에 'S3'가 생긴 것을 볼 수 있다.
이제 모니터링 탭으로 가서 CloudWatch Logs 중 가장 최신 로그를 선택해보자.
의도한대로 45를 넣었더니 매우 뜨겁다고 말하는 로그가 적혀있는 것을 확인할 수 있다.
만약 위 로그가 뜨지 않고 [ERROR] ClientError: An error occurred (AccessDenied) when calling the GetObject operation 라는 로그가 떠 있다면, 아래 해결 방법을 참고해보자.
원인
- 권한 부족: Lambda 함수에 연결된 IAM 역할(lambda-test-role-h4y52dod)에 s3:GetObject 권한이 없습니다. 이로 인해 S3 객체에 접근할 수 없습니다.
- 버킷 정책 문제: S3 버킷 정책이 해당 역할에 대해 s3:GetObject 권한을 명시적으로 허용하지 않을 수 있습니다.
해결 방법
- IAM 역할에 권한 추가:
- IAM 콘솔에서 lambda-test-role-h4y52dod 역할을 찾습니다.
- 역할에 다음과 같은 정책을 추가하여 s3:GetObject 권한을 부여합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-565393054532/ex.json"
}
]
}
'Minding's Programming > AWS' 카테고리의 다른 글
[AWS] AWS Redshift Serverless 설치 (무료 평가판 / Free Trial) (0) | 2024.10.29 |
---|---|
[AWS] ApiGateway (0) | 2024.10.28 |
[AWS] ECS / ECR (0) | 2024.10.28 |
[AWS] AWS CLI (Command Line Interface) (0) | 2024.10.25 |
[AWS] CI / CD (CodeCommit, CodeBuild, CodeDeploy, CodePipeline) (2) | 2024.10.25 |