翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 統合バージョンを取得するには、Windows Subsystem for Linux をインストール
実行ロールを作成する
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
は現在のディレクトリにあるファイルです。この信頼ポリシーは、AWS Security Token Service (AWS STS) AssumeRole
アクションを呼び出すサービスプリンシパルの lambda.amazonaws.com
アクセス許可を付与することで、Lambda がロールのアクセス許可を使用できるようにします。
例 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 }
関数を作成するには
-
サンプルコードを
index.js
という名前のファイルにコピーします。 -
デプロイパッケージを作成します。
zip function.zip index.js
-
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
オプションを使用します。レスポンスには、LogResult
フィールドが含まれます。このフィールドには、呼び出しから base64 コードされた最大 4 KB のログが含まれます。
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 Windowsbase64 -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
例 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 ユーザーガイドの「ロールおよびインスタンスプロファイルを削除する」を参照してください。