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 に書き込むために関数が必要とするアクセス許可があります。

関数を作成する

次のコード例は、入力としてイベントを受け取り、受信イベントデータの一部を CloudWatch Logs にログ記録します。

例 index.js

console.log('Loading function'); exports.handler = function(event, context, callback) { console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); callback(null, "Success"); };

関数を作成するには

  1. サンプルコードを index.js という名前のファイルにコピーします。

  2. デプロイパッケージを作成します。

    $ zip function.zip index.js
  3. create-function コマンドを使用して Lambda 関数を作成します。

    $ aws lambda create-function --function-name helloworld \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs8.10 \ --role arn:aws:iam::123456789012:role/lambda-cli-role { "FunctionName": "helloworld", "CodeSize": 351, "MemorySize": 128, "FunctionArn": "function-arn", "Handler": "index.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-04-07T22:02:58.854+0000", "Runtime": "nodejs8.10", "Description": "" }

呼び出しコマンドを使用して Lambda 関数を呼び出します。

$ aws lambda invoke --function-name helloworld --log-type Tail \ --payload '{"key1":"value1", "key2":"value2", "key3":"value3"}' \ outputfile.txt { "LogResult": "base64-encoded-log", "StatusCode": 200 }

--log-type パラメータを指定することにより、コマンドは、関数によって生成されたログの末尾もリクエストします。レスポンスのログデータは、Base64 でエンコードされています。base64 プログラムを使用してログをデコードします。

$ echo base64-encoded-log | base64 --decode START RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value1 = value1 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value2 = value2 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value3 = value3 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 result: "value1" END RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 REPORT RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 Duration: 13.35 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 9 MB

デフォルトの呼び出しタイプ (RequestResponse) を使用して関数を呼び出したため、実行が完了するまで接続は開いたままです。Lambda は、出力ファイルにレスポンスを書き込みます。

アカウントの Lambda 関数をリストする

次の AWS CLI コマンド list-functions を実行して、作成した関数のリストを取得します。

$ aws lambda list-functions --max-items 10 { "Functions": [ { "FunctionName": "helloworld", "MemorySize": 128, "CodeSize": 412, "FunctionArn": "arn:aws:lambda:us-east-1:account-id:function:ProcessKinesisRecords", "Handler": "ProcessKinesisRecords.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-02-22T21:03:01.172+0000", "Runtime": "nodejs6.10", "Description": "" }, { "FunctionName": "ProcessKinesisRecords", "MemorySize": 128, "CodeSize": 412, "FunctionArn": "arn:aws:lambda:us-east-1:account-id:function:ProcessKinesisRecords", "Handler": "ProcessKinesisRecords.handler", "Role": "arn:aws:iam::account-id:role/lambda-execute-test-kinesis", "Timeout": 3, "LastModified": "2015-02-22T21:03:01.172+0000", "Runtime": "nodejs6.10", "Description": "" }, ... ], "NextMarker": null }

応答で、Lambda は最大 10 個の関数のリストを返します。取得できる関数がさらにある場合、NextMarker は、次の list-functions リクエストで使用できるマーカーを提供します。それ以外の場合、値は null です。次の list-functions AWS CLI コマンドは、--marker パラメータを示す例です。

$ aws lambda list-functions --max-items 10 \ --marker value-of-NextMarker-from-previous-response

Lambda 関数を取得する

Lambda CLI get-function コマンドは、関数のデプロイパッケージをダウンロードするために使用できる、Lambda 関数メタデータと署名付き URL を返します。

$ aws lambda get-function --function-name helloworld { "Code": { "RepositoryType": "S3", "Location": "pre-signed-url" }, "Configuration": { "FunctionName": "helloworld", "MemorySize": 128, "CodeSize": 287, "FunctionArn": "arn:aws:lambda:us-west-2:account-id:function:helloworld", "Handler": "index.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-04-07T22:02:58.854+0000", "Runtime": "nodejs8.10", "Description": "" } }

詳細については、「GetFunction」を参照してください。

クリーンアップ

次の delete-function コマンドを実行して、helloworld 関数を削除します。

$ aws lambda delete-function --function-name helloworld

IAM コンソールで作成した IAM ロールを削除します。ロールの削除の詳細については、『IAM ユーザーガイド』の「ロールまたはインスタンスプロファイルの削除」を参照してください。