기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출
이 자습서에서는 콘솔을 사용하여 Lambda 함수를 생성하고 Amazon Simple Storage Service(Amazon S3) 버킷에 대한 트리거를 구성합니다. Amazon S3 버킷에 객체를 추가할 때마다 함수가 실행되어 Amazon CloudWatch Logs에 객체 유형을 출력합니다.
Amazon S3 트리거와 함께 Lambda 함수를 사용하여 다양한 유형의 파일 처리 작업을 수행할 수 있습니다. 예를 들어, Lambda 함수를 사용하여 Amazon S3 버킷에 이미지 파일이 업로드될 때마다 썸네일을 생성하거나 업로드된 문서를 다른 형식으로 변환할 수 있습니다. 이 자습서를 마친 후에는 자습서: Amazon S3 트리거를 사용하여 썸네일 이미지 생성을 시도하여 이미지 처리 작업을 수행할 수 있습니다.
이 자습서를 완료하려면 다음 단계를 수행하세요.
-
Amazon S3 버킷을 생성합니다.
-
Amazon S3 버킷에 있는 객체의 유형을 반환하는 Lambda 함수를 생성합니다.
-
객체가 버킷에 업로드될 때 함수를 호출하는 Lambda 트리거를 구성합니다.
-
먼저 더미 이벤트로 함수를 테스트한 다음 트리거를 사용하여 함수를 테스트합니다.
이 단계를 완료하면 Amazon S3 버킷에서 객체가 추가되거나 삭제될 때마다 실행되도록 Lambda 함수를 구성하는 방법을 알게 됩니다. AWS Management Console만 사용하여 이 자습서를 완료할 수 있습니다.
사전 조건
AWS 계정 항목이 없으면 다음 절차에 따라 생성하십시오.
AWS 계정에 가입하려면
온라인 지시 사항을 따릅니다.
가입 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.
AWS 계정에 가입하면 AWS 계정 루트 사용자이(가) 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스및 리소스에 액세스하는 권한이 있습니다. 보안 모범 사례는 관리 사용자에게 관리자 액세스 권한을 할당하고, 루트 사용자만 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.
가입 프로세스가 완료되면 AWS가 확인 이메일을 전송합니다. 언제든지 https://aws.amazon.com/
AWS 계정에 가입하고 AWS 계정 루트 사용자를 보안하며 AWS IAM Identity Center을 활성화하고 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 생성합니다.
귀하의 AWS 계정 루트 사용자 보호
-
루트 사용자를 선택하고 AWS 계정이메일 주소를 입력하여 AWS Management Console
에 계정 소유자로 로그인합니다. 다음 페이지에서 암호를 입력합니다. 루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 사용 설명서의 루트 사용자로 로그인을 참조하십시오.
-
루트 사용자에 대해 다중 인증(MFA)을 활성화합니다.
지침은 IAM 사용 설명서의 AWS 계정 루트 사용자용 가상 MFA 디바이스 활성화(콘솔)를 참조하십시오.
관리 사용자 생성
-
IAM Identity Center를 활성화합니다.
지침은 AWS IAM Identity Center 사용 설명서에서 Enabling AWS IAM Identity Center를 참조하세요.
-
IAM Identity Center에서 관리 사용자에게 관리 액세스 권한을 부여합니다.
IAM Identity Center 디렉터리를 ID 소스로 사용하는 방법에 대한 자습서는 AWS IAM Identity Center 사용 설명서의 Configure user access with the default IAM Identity Center 디렉터리를 참조하세요.
관리 사용자로 로그인
-
IAM 자격 증명 센터 사용자로 로그인하려면 IAM 자격 증명 센터 사용자를 생성할 때 이메일 주소로 전송된 로그인 URL을 사용합니다.
IAM Identity Center 사용자로 로그인하는 데 도움이 필요한 경우 AWS 로그인 사용 설명서의 AWS 액세스 포털에 로그인을 참조하십시오.
Amazon S3 버킷 생성
먼저 AWS Management Console을 사용하여 Amazon S3 버킷을 생성합니다.
Amazon S3 버킷을 생성하려면
-
Amazon S3 콘솔
을 열고 버킷 페이지를 선택합니다. -
버킷 생성을 선택합니다.
-
[일반 구성(General configuration)]에서 다음을 수행합니다.
-
버킷 이름에 Amazon S3 버킷 이름 지정 규칙을 충족하는 전역적으로 고유한 이름을 입력합니다. 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)만 포함할 수 있습니다.
-
AWS 리전에서 리전을 선택합니다. 자습서 뒷부분에서 동일한 리전에 Lambda 함수를 생성해야 합니다.
-
-
다른 모든 옵션을 기본값으로 두고 버킷 생성을 선택합니다.
버킷에 테스트 객체 업로드
자습서 뒷부분에서 Lambda 콘솔에서 Lambda 함수를 테스트합니다. 함수 코드가 제대로 작동하는지 확인하려면 Amazon S3 버킷에 테스트 객체가 있어야 합니다. 이 객체는 사용자가 선택한 임의의 파일이 될 수 있습니다(예: HappyFace.jpg
).
테스트 객체 업로드
-
Amazon S3 콘솔의 버킷
페이지를 열고 이전 단계 중 생성한 버킷을 선택합니다. -
업로드를 선택합니다.
-
파일 추가를 선택하고 파일 선택기를 사용하여 업로드할 객체를 선택합니다.
-
열기를 선택한 후 업로드를 선택합니다.
자습서 후반부에서 함수 코드를 테스트할 때 업로드한 객체의 파일 이름이 포함된 데이터를 전달하므로 지금 기록해 두세요.
권한 정책 생성
Lambda 함수의 실행 역할을 생성하려면 먼저 권한 정책을 생성하여 필요한 AWS 리소스에 액세스할 권한을 함수에 부여합니다. 이 자습서에서는 정책을 통해 Lambda가 Amazon S3 버킷에서 객체를 가져오고 Amazon Logs에 쓸 수 있도록 허용합니다. CloudWatch
정책 생성
-
IAM 콘솔에서 정책 페이지
를 엽니다. -
정책 생성을 선택하세요.
-
JSON 탭에서 다음과 같은 사용자 지정 정책을 JSON 편집기에 붙여 넣습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::*/*" } ] }
-
다음: 태그를 선택합니다.
-
다음: 검토(Next: Review)를 선택합니다.
-
정책 검토의 이름에
s3-trigger-tutorial
를 입력합니다. -
정책 생성을 선택합니다.
실행 역할 만들기
실행 역할은 AWS 서비스 및 리소스에 액세스할 수 있는 권한을 Lambda 함수에 부여하는 AWS Identity and Access Management(IAM) 역할입니다. 함수가 Amazon S3 버킷에서 객체를 가져오도록 하려면 이전 단계에서 생성한 권한 정책을 연결합니다.
실행 역할을 생성하고 사용자 지정 권한 정책을 연결하려면
-
IAM 콘솔에서 역할 페이지
를 엽니다. -
역할 생성을 선택합니다.
-
신뢰할 수 있는 엔터티의 유형으로 AWS 서비스를 선택한 다음 사용 사례로 Lambda를 선택합니다.
-
다음을 선택합니다.
-
정책 검색 상자에
s3-trigger-tutorial
를 입력합니다. -
검색 결과에서 생성한 정책(
s3-trigger-tutorial
)을 선택한 후, 다음(Next)을 선택합니다. -
Role details(역할 세부 정보)에서 Role name(역할 이름)에
lambda-s3-trigger-role
을 입력한 다음 Create role(역할 생성)을 선택합니다.
Lambda 함수 생성
이 예제에서는 Node.js 16.x 런타임을 사용하여 콘솔에서 Lambda 함수를 생성합니다. 콘솔에서 생성하는 함수에는 몇 가지 기본 'Hello World' 코드가 포함되어 있습니다. 다음 단계에서는 이를 함수 코드로 바꿔 Amazon S3 버킷에서 객체를 가져옵니다.
Lambda 함수를 생성하려면
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
Amazon S3 버킷을 생성한 동일한 AWS 리전에서 작업 중인지 확인합니다. 화면 상단의 드롭다운 목록을 사용하여 리전을 변경할 수 있습니다.
-
함수 생성을 선택합니다.
-
새로 작성을 선택합니다.
-
기본 정보에서 다음과 같이 합니다.
-
함수 이름에
s3-trigger-tutorial
을 입력합니다. -
런타임에는 Node.js 16.x를 선택합니다.
-
아키텍처에서는 x86_64를 선택합니다.
-
-
기본 실행 역할 변경 탭에서 다음을 수행합니다.
-
탭을 확장한 다음 기존 역할 사용을 선택합니다.
-
이전에 생성한
lambda-s3-trigger-role
을 선택합니다.
-
-
함수 생성을 선택합니다.
함수 코드 배포
Lambda 함수는 Amazon S3에서 수신하는 event
파라미터에서 업로드된 객체의 키 이름과 버킷 이름을 검색합니다. 그런 다음 함수는 AWS SDK for JavaScript에서 HeadObject
API 호출을 사용하여 업로드된 객체의 유형을 가져옵니다.
이 자습서에서는 Node.js 16.x 런타임을 사용하지만 다른 런타임의 예제 코드 파일도 제공했습니다. 다음 상자에서 탭을 선택하여 관심 있는 런타임에 대한 코드를 볼 수 있습니다. 배포할 JavaScript 코드는 레이블이 표시된 탭에 표시된 첫 번째 예제입니다. JavaScript
함수 코드 배포
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
이전 단계에서 생성한 함수를 선택합니다(
s3-trigger-tutorial
). -
코드 탭을 선택합니다.
-
제공된 JavaScript 코드를 복사하여 코드 소스 창의 index.js 탭에 붙여넣습니다.
-
배포를 선택합니다.
Amazon S3 트리거를 생성합니다
이제 함수 코드를 배포했으므로 함수를 호출할 Amazon S3 트리거를 생성합니다.
Amazon S3 트리거 생성 방법
-
함수의 콘솔 페이지의 함수 개요 창에서 트리거 추가를 선택합니다.
-
S3를 선택합니다.
-
버킷에서 자습서 앞부분에서 생성한 버킷을 선택합니다.
-
이벤트 유형에서 모든 객체 생성 이벤트를 선택합니다. 객체가 삭제될 때 Lambda를 호출하도록 트리거를 구성할 수도 있지만 이 자습서에서는 해당 옵션을 사용하지 않습니다.
-
재귀 호출에서 확인란을 선택하여 입력 및 출력에 동일한 Amazon S3 버킷 사용이 권장되지 않음을 확인합니다. Serverless Land의 Recursive patterns that cause run-away Lambda functions
를 읽고 Lambda의 재귀 호출 패턴에 대해 자세히 알아볼 수 있습니다. -
추가를 선택합니다.
더미 이벤트로 Lambda 함수 테스트
Lambda 함수를 생성하고 구성했으므로 이제 테스트할 준비가 되었습니다. 먼저 더미 Amazon S3 이벤트 전송을 통해 함수를 테스트하여 제대로 작동하는지 확인합니다.
더미 이벤트로 Lambda 함수 테스트
-
함수의 Lambda 콘솔 페이지에서 코드 탭을 선택합니다.
-
코드 소스 창에서 테스트를 선택합니다.
-
테스트 이벤트 구성 페이지에서 다음을 수행합니다.
-
이벤트 이름에
MyTestEvent
를 입력합니다. -
템플릿에서 S3 Put을 선택합니다.
-
Event JSON(이벤트 JSON)에서 다음 값을 바꿉니다.
-
us-east-1
을 Amazon S3 버킷을 생성한 리전으로 바꿉니다. -
my-bucket
의 두 인스턴스를 모두 자체 Amazon S3 버킷의 이름으로 바꿉니다. -
test%2FKey
를 이전에 버킷에 업로드한 테스트 객체의 이름(예:HappyFace.jpg
)으로 바꿉니다.
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "
us-east-1
", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "my-bucket
", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::my-bucket
" }, "object": { "key": "test%2Fkey
", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] } -
-
저장을 선택합니다.
-
-
코드 소스 창에서 테스트를 선택합니다.
-
함수가 성공적으로 실행되면 실행 결과 탭에 다음과 비슷한 출력이 표시됩니다.
Response "image/jpeg" Function Logs START RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Version: $LATEST 2021-02-18T21:40:59.280Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO INPUT BUCKET AND KEY: { Bucket: 'my-bucket', Key: 'HappyFace.jpg' } 2021-02-18T21:41:00.215Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO CONTENT TYPE: image/jpeg END RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 REPORT RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Duration: 976.25 ms Billed Duration: 977 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 430.47 ms Request ID 12b3cae7-5f4e-415e-93e6-416b8f8b66e6
Amazon S3 트리거로 Lambda 함수 테스트
구성된 트리거로 함수를 테스트하려면 콘솔을 사용하여 Amazon S3 버킷에 객체를 업로드합니다. Lambda 함수가 올바르게 호출되었는지 확인하려면 Logs를 CloudWatch 사용하여 함수의 출력을 확인합니다.
Amazon S3 버킷에 객체 업로드
-
Amazon S3 콘솔의 버킷
페이지를 열고 앞서 생성한 버킷을 선택합니다. -
업로드를 선택합니다.
-
파일 추가를 선택하고 파일 선택기를 사용하여 업로드할 객체를 선택합니다. 이 객체는 사용자가 선택한 임의의 파일이 될 수 있습니다.
-
열기를 선택한 후 업로드를 선택합니다.
로그를 사용하여 올바른 작동을 확인하려면 CloudWatch
-
CloudWatch 콘솔
을 엽니다. -
Lambda 함수를 생성한 동일한 AWS 리전에서 작업 중인지 확인합니다. 화면 상단의 드롭다운 목록을 사용하여 리전을 변경할 수 있습니다.
-
로그를 선택한 후 로그 그룹을 선택합니다.
-
함수에 대한 로그 그룹(
/aws/lambda/s3-trigger-tutorial
)을 선택합니다. -
로그 스트림에서 가장 최근의 로그 스트림을 선택합니다.
-
Amazon S3 트리거에 대한 응답으로 함수가 제대로 호출된 경우 다음과 유사한 출력이 표시됩니다. 표시되는
CONTENT TYPE
은 버킷에 업로드한 파일 유형에 따라 달라집니다.2022-05-09T23:17:28.702Z 0cae7f5a-b0af-4c73-8563-a3430333cc10 INFO CONTENT TYPE:
image/jpeg
리소스 정리
이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.
Lambda 함수를 삭제하려면
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
생성한 함수를 선택합니다.
-
작업, 삭제를 선택합니다.
-
텍스트 입력 필드에
delete
를 입력하고 Delete(삭제)를 선택합니다.
집행 역할 삭제
-
IAM 콘솔에서 역할 페이지
를 엽니다. -
생성한 실행 역할을 선택합니다.
-
Delete를 선택합니다.
-
텍스트 입력 필드에 역할의 이름을 입력하고 Delete(삭제)를 선택합니다.
S3 버킷을 삭제하려면
-
Amazon S3 콘솔
을 엽니다. -
생성한 버킷을 선택합니다.
-
Delete를 선택합니다.
-
텍스트 입력 필드에 버킷 이름을 입력합니다.
-
버킷 삭제(Delete bucket)를 선택합니다.
다음 단계
좀 더 수준이 높은 자습서를 진행해보세요. 이 자습서에서는 Amazon S3 트리거가 함수를 호출하여 버킷에 업로드된 각 이미지 파일에 대해 썸네일 이미지를 생성합니다. 이 자습서를 진행하려면 중급 수준의 AWS 및 Lambda 분야 지식이 필요합니다. AWS Command Line Interface(AWS CLI)를 사용하여 리소스를 생성하고, 함수 및 해당 종속 항목에 대한 .zip 파일 아카이브 배포 패키지를 생성합니다.