AWS Lambda
開発者ガイド

AWS Command Line Interface での AWS Lambda の使用

AWS Command Line Interface を使用して関数と他の AWS Lambda リソースを管理できます。AWS CLI は、AWS SDK for Python (Boto) を使用して Lambda API を操作します。これを使用して API について調べ、AWS SDK で Lambda を使用するアプリケーションの構築にその知識を応用できます。

このチュートリアルでは、AWS CLI を使用して Lambda 関数を管理して呼び出します。

前提条件

このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。まだ作成していない場合は、AWS Lambda の使用開始 の指示に従って、まず Lambda 関数を作成します。

このガイドの手順に従うには、コマンドを実行するためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/lambda-project$ this is a command this is output

コマンドが長い場合は、エスケープ文字 (\) を使用して、コマンドを複数の行に分割します。

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合バージョンの Ubuntu および Bash を入手できます。

実行ロールを作成する

AWS リソースにアクセスするためのアクセス権限を関数に付与する実行ロールを作成します。

実行ロールを作成するには

  1. IAM コンソールの [Roles] ページを開きます。

  2. [ロールの作成] を選択します。

  3. 次のプロパティでロールを作成します。

    • [信頼されたエンティティ] – [AWS Lambda]。

    • [アクセス許可] – [AWSLambdaBasicExecutionRole]。

    • ロール名lambda-cli-role

AWSLambdaBasicExecutionRole ポリシーには、ログを CloudWatch Logs に書き込むために関数が必要とするアクセス許可があります。

関数を作成する

次の例では、環境変数の値とイベントオブジェクトをログに記録します。

例 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 関数を作成します。

    $ aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs10.x \ --role arn:aws:iam::123456789012:role/lambda-cli-role { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs10.x", "Role": "arn:aws:iam::123456789012:role/lambda-cli-role", "Handler": "index.handler", "CodeSize": 322, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2019-06-13T23:56:27.308+0000", "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: 100 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64 ユーティリティは、Linux、macOS、および Windows の Ubuntu で使用できます。macOS の場合、コマンドは base64 -D です。

コマンドラインから完全なログイベントを取得するには、前の例に示すように、関数の出力にログストリーム名を含めることができます。次の例のスクリプトは、my-function という名前の関数を呼び出し、最後の 5 つのログイベントをダウンロードします。

例 get-logs.sh スクリプト

この例では、my-function がログストリーム ID を返す必要があります。

aws lambda invoke --function-name my-function --payload '{"key": "value"}' out sed -i 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name=file://out --limit 5

このスクリプトは sed を使用して出力ファイルから引用符を削除し、15 秒間スリープ状態にすることにより、ログを使用できるようにします。この出力には Lambda からのレスポンスと、get-log-events コマンドからの出力が含まれます。

$ ./get-log.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: 100 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

アカウントの 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": "nodejs10.x", "Role": "arn:aws:iam::123456789012:role/lambda-cli-role", "Handler": "index.handler", "CodeSize": 322, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2019-06-13T23:56:27.308+0000", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff" }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs8.10", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSize": 1572488, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2019-03-20T21:17:52.564+0000", "CodeSha256": "TSGmGwJEsBSaTZcViXJ/Xz3ntZUmSF7AURodpt2zAeo=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "2e4e549a-6259-4f8a-aacc-3e6614962812" }, ... ], "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": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs10.x", "Role": "arn:aws:iam::123456789012:role/lambda-cli-role", "Handler": "index.handler", "CodeSize": 322, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2019-06-13T23:56:27.308+0000", "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 ユーザーガイド』の「ロールまたはインスタンスプロファイルの削除」を参照してください。