AWS CLI에서 Lambda 사용 - AWS Lambda

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CLI에서 Lambda 사용

AWS Command Line Interface를 사용하여 함수 및 기타 AWS Lambda 리소스를 관리할 수 있습니다. AWS CLI는 AWS SDK for Python (Boto)를 사용하여 Lambda API와 상호 작용합니다. 이를 통해 API에 대해 배운 후 그 지식을 바탕으로 AWS SDK에서 Lambda를 사용하는 애플리케이션을 빌드할 수 있습니다.

이 자습서에서는 AWS CLI를 사용하여 Lambda 함수를 관리하고 호출합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서AWS CLI란 무엇입니까? 단원을 참조하세요.

사전 조건

이 자습서에서는 사용자가 기본적인 Lambda 작업과 Lambda 콘솔에 대해 어느 정도 알고 있다고 가정합니다. 아직 콘솔로 Lambda 함수 생성의 지침을 따르지 않았다면 지금 따르세요.

다음 단계를 완료하려면 AWS Command Line Interface(AWS CLI) 버전 2가 필요합니다. 명령과 예상 결과는 별도의 블록에 나열됩니다.

aws --version

다음 결과가 표시됩니다.

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

긴 명령의 경우 이스케이프 문자(\)를 사용하여 명령을 여러 행으로 분할합니다.

Linux 및 macOS는 선호 셸과 패키지 관리자를 사용합니다.

참고

Windows에서는 Lambda와 함께 일반적으로 사용하는 일부 Bash CLI 명령(예:zip)은 운영 체제의 기본 제공 터미널에서 지원되지 않습니다. Ubuntu와 Bash의 Windows 통합 버전을 가져오려면 Linux용 Windows Subsystem을 설치합니다. 이 안내서의 예제 CLI 명령은 Linux 형식을 사용합니다. Windows CLI를 사용하는 경우 인라인 JSON 문서를 포함하는 명령의 형식을 다시 지정해야 합니다.

실행 역할 생성

함수에 AWS 리소스에 액세스할 수 있는 권한을 제공하는 실행 역할을 만듭니다. AWS CLI를 사용하여 실행 역할을 생성하려면 create-role 명령을 사용합니다.

다음 예에서는 신뢰 정책 인라인을 지정합니다. JSON 문자열의 인용 부호 요구 사항은 셸에 따라 다릅니다.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

JSON 파일을 사용하여 역할에 대한 신뢰 정책을 정의할 수도 있습니다. 다음 예제에서 trust-policy.json은 최신 디렉터리의 파일입니다. 이 신뢰 정책을 통해 Lambda는 서비스 보안 주체에 lambda.amazonaws.com 권한을 제공하여 AWS Security Token Service(AWS STS)AssumeRole 작업을 호출하기 위해 역할의 권한을 사용할 수 있습니다.

예 trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

다음 결과가 표시됩니다.

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }

역할에 권한을 추가하려면 attach-policy-to-role 명령을 사용하세요. 먼저 AWSLambdaBasicExecutionRole 관리형 정책을 추가합니다.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

AWSLambdaBasicExecutionRole정책에는 함수가 로그를 로그에 기록하는 데 필요한 권한이 있습니다. CloudWatch

함수 생성

다음 예제는 환경 변수의 값과 이벤트 객체를 로깅합니다.

예 index.js
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.log("EVENT\n" + JSON.stringify(event, null, 2)) return context.logStreamName }
함수를 만들려면
  1. 샘플 코드를 index.js 파일에 복사합니다.

  2. 배포 패키지를 만듭니다.

    zip function.zip index.js
  3. create-function 명령을 사용해 Lambda 함수를 만듭니다. 역할 ARN에서 강조 표시된 텍스트를 계정 ID로 바꿉니다.

    aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --role arn:aws:iam::123456789012:role/lambda-ex

    다음 결과가 표시됩니다:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }

명령줄에서 호출에 대한 로그를 가져오려면 --log-type 옵션을 사용하세요. 호출에서 base64로 인코딩된 로그를 최대 4KB까지 포함하는 LogResult 필드가 응답에 포함됩니다.

aws lambda invoke --function-name my-function out --log-type Tail

다음 결과가 표시됩니다:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

base64 유틸리티를 사용하면 로그를 디코딩할 수 있습니다.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d

다음 결과가 표시됩니다:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64는 Linux, macOS 및 Ubuntu on Windows에서 사용할 수 있습니다. macOS의 경우, 명령은 base64 -D입니다.

명령줄에서 전체 로그 이벤트를 가져오기 위해 앞의 예와 같이 함수 출력에 로그 스트림 이름을 포함할 수 있습니다. 다음 예제 스크립트는 my-function이라는 함수를 호출하고 마지막 5개 로그 이벤트를 다운로드합니다.

예 get-logs.sh 스크립트

이 예에서는 my-function이 로그 스트림 ID를 반환해야 합니다.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name $(cat out) --limit 5

스크립트는 sed를 사용하여 출력 파일에서 따옴표를 제거하고, 로그를 사용할 수 있는 시간을 허용하기 위해 15초 동안 대기합니다. 출력에는 Lambda의 응답과 get-log-events 명령의 출력이 포함됩니다.

./get-logs.sh

다음 결과가 표시됩니다.

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

함수 업데이트

함수를 만든 후 트리거, 네트워크 액세스, 파일 시스템 액세스와 같은 함수에 대한 추가 기능을 구성할 수 있습니다. 함수와 관련된 리소스(예: 메모리 및 동시성)를 조정할 수도 있습니다. 이러한 구성은 .zip 파일 아카이브로 정의된 함수와 컨테이너 이미지로 정의된 함수에 적용됩니다.

update-function-configuration명령을 사용하여 함수를 구성합니다. 다음 예제에서는 함수 메모리를 256MB로 설정합니다.

예 update-function-configuration 명령
aws lambda update-function-configuration \ --function-name my-function \ --memory-size 256

계정의 Lambda 함수 목록 표시

다음 AWS CLI list-functions 명령을 실행하여, 생성한 함수의 목록을 검색할 수 있습니다.

aws lambda list-functions --max-items 10

다음 결과가 표시됩니다:

{ "Functions": [ { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", ... }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", ... }, ... ], "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=" }

응답에서 Lambda는 최대 10개의 함수로 이루어진 목록을 반환합니다. 검색할 수 있는 함수가 추가로 있는 경우, NextToken은 다음 list-functions 요청에서 사용할 수 있도록 마커를 제공합니다. 다음의 list-functions AWS CLI 명령은 --starting-token 파라미터를 보여주는 예제입니다.

aws lambda list-functions --max-items 10 --starting-token eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=

Lambda 함수 검색

Lambda CLI get-function 명령은 함수의 배포 패키지를 다운로드할 때 사용할 수 있도록 Lambda 함수 메타데이터와 미리 서명된 URL을 반환합니다.

aws lambda get-function --function-name my-function

다음 결과가 표시됩니다.

{ "Configuration": { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }, "Code": { "RepositoryType": "S3", "Location": "https://awslambda-us-east-2-tasks.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..." } }

자세한 내용은 을 참조하십시오 GetFunction.

정리

다음 delete-function 명령을 실행하여 my-function 함수를 삭제합니다.

aws lambda delete-function --function-name my-function

IAM 콘솔에서 생성한 IAM 역할을 삭제합니다. 역할 삭제에 대한 내용은 IAM 사용 설명서역할 또는 인스턴스 프로필 삭제를 참조하세요.