Lambda 関数の一覧を取得する (lambda list-functions)
$ aws lambda list-functions --max-items 10
$ aws lambda list-functions --max-items 10
--query "Functions[].FunctionName"
$ aws lambda list-functions --function-version ALL --output text
--query "Functions[?Runtime=='nodejs10.x'].FunctionArn
AWS から来た「Node.js 10 のサポート切れるから乗り換えてね」というメール (2021-06-04) に書かれていたやり方です。
Lambda 関数の情報を取得する (lambda get-function)
$ aws lambda get-function --function-name my-function
{
"Configuration": {
"FunctionName": "my-function",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-function",
"Runtime": "nodejs12.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-ap-northeast-1-tasks.s3.ap-northeast-1.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..."
}
}
Lambda 関数のデプロイパッケージをダウンロードするために使用できる、Lambda 関数メタデータと署名付き URL が含まれています。
Lambda 関数を作成する (lambda create-function)
$ aws lambda create-function
--function-name my-function \
--runtime nodejs12.x \
--handler index.handler \
--zip-file fileb://function.zip \
--role arn:aws:iam::123456789012:role/lambda-ex
{
"FunctionName": "my-function",
"FunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-function",
"Runtime": "nodejs12.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",
...
}
タグを付けるときは、関数の作成時に次のようなオプションを追加します。
--tags Department=Marketing,CostCenter=1234ABCD
Lambda 関数を削除する (lambda delete-function)
$ aws lambda delete-function --function-name my-function
Lambda 関数の ZIP パッケージをアップロードする (lambda update-function-code)
aws lambda update-function-code \
--function-name my-function \
--zip-file fileb://function.zip
{
"FunctionName": "my-function",
"FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
"Runtime": "nodejs12.x",
"Role": "arn:aws:iam::123456789012:role/lambda-role",
"Handler": "index.handler",
"CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "Active"
},
"RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d",
...
}
Lambda 関数を呼び出す (lambda invoke)
$ aws lambda invoke --function-name my-function output.yml
ExecutedVersion: $LATEST
StatusCode: 200
$ cat output.yml
{"body": "Hello World!", "statusCode": 200}
Lambda 関数のリソースベースポリシー設定
Lambda のリソースベースポリシーは、他のサービスからの Lambda 関数へのアクセス許可設定を保持しています。 Lambda 関数は 1 つの リソースベースポリシー を持ち、その中にアクセス権限を表現する複数の ステートメント が含まれている、という構成になります。
ステートメントを追加する (lambda add-permission)
他のサービスに Lambda 関数を呼び出す権限を与えるには、Lambda 関数のリソースベースポリシーに、ステートメントを追加します。
$ aws lambda add-permission \
--function-name my-function \
--action lambda:InvokeFunction \
--statement-id sns \
--principal sns.amazonaws.com \
Statement: '{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-function"}'
この例では、sns
という名前のステートメントを Lambda 関数のポリシーに追加しています。
コマンドの実行結果として、追加されたステートメントの内容(JSON 形式)が出力されます。
ここで割り当てたステートメント ID(上記の例では sns
)は、ステートメントを削除する場合などに使用します。
上記の例では、すべての SNS トピックからのアクセスを許可していますが、特定の SNS トピックからの Lambda 関数呼び出し (lambda:InvokeFunction
) を許可するには、--source-arn
パラメータを追加で指定します。
$ aws lambda add-permission \
--function-name my-function \
--action lambda:InvokeFunction \
--statement-id sns-my-topic \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:ap-northeast-1:123456789012:my-topic
Statement: '{"Sid":"sns-my-topic","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-function","Condition":{"ArnLike":{"AWS:SourceArn":"arn:aws:sns:ap-northeast-1:123456789012:my-topic"}}}'
例外的に S3 バケットの ARN にはアカウント ID が含まれないため、特定のアカウントの S3 バケットからのアクセスを許可するには、source-account
パラメータでアカウントを指定する必要があります。
$ aws lambda add-permission \
--function-name my-function \
--action lambda:InvokeFunction \
--statement-id s3-account \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::my-bucket-123456 \
--source-account 123456789012
その他の例
$ aws lambda add-permission \
--function-name "my-function" \
--action lambda:InvokeFunction \
--statement-id "appsync" \
--principal appsync.amazonaws.com \
--output text
$ aws lambda add-permission \
--function-name "my-function" \
--action lambda:InvokeFunction \
--statement-id "appsync" \
--principal appsync.amazonaws.com \
--source-arn "<AppSync API ARN>" \
--output text
ステートメントを削除する (lambda remove-permission)
$ aws lambda remove-permission \
--function-name my-function \
--statement-id sns
リソースベースポリシーを取得する (lambda get-policy)
$ aws lambda get-policy \
--function-name my-function \
--query "Policy" --output text
{"Version":"2012-10-17","Id":"default","Statement":[{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-function"},{"Sid":"sns-my-topic","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:ap-northeast-1:123456789012:function:my-function","Condition":{"ArnLike":{"AWS:SourceArn":"arn:aws:sns:ap-northeast-1:123456789012:my-topic"}}}]}
Lambda 関数のリソースベースポリシーの内容は、上記のような一行の JSON テキストとして保存されているので、そのままでは見にくいかもしれません。 下記はこの JSON レスポンスを Ruby で YAML 形式に整形する例です。
$ aws lambda get-policy \
--function-name my-function \
--query "Policy" --output text \
| ruby -ryaml -e 'puts YAML.load(STDIN).to_yaml'
---
Version: '2012-10-17'
Id: default
Statement:
- Sid: sns
Effect: Allow
Principal:
Service: sns.amazonaws.com
Action: lambda:InvokeFunction
Resource: arn:aws:lambda:ap-northeast-1:123456789012:function:my-function
- Sid: sns-my-topic
Effect: Allow
Principal:
Service: sns.amazonaws.com
Action: lambda:InvokeFunction
Resource: arn:aws:lambda:ap-northeast-1:123456789012:function:my-function
Condition:
ArnLike:
AWS:SourceArn: arn:aws:sns:ap-northeast-1:123456789012:my-topic
この Lambda 関数のポリシーとしては、sns
と sns-my-topic
というステートメントで、外部からのアクセスを許可していることがわかります。
Lambda 関数のタグを制御する
タグを追加する (lambda tag-resource)
$ aws lambda tag-resource \
--resource arn:aws:lambda:ap-northeast-1:123456789012:function:my-func
--tags Department=Marketing,CostCenter
タグを削除する (lambda untag-resource)
$ aws lambda untag-resource \
--resource arn:aws:lambda:ap-northeast-1:123456789012:function:my-func
--tag-keys Department
タグの一覧を取得する (lambda list-tags)
$ aws lambda list-tags \
--resource arn:aws:lambda:ap-northeast-1:123456789012:function:my-func
Tags:
Key1: Value1
Key2: Value2
Key3: Value3
ARN じゃなくて関数名で取得したいのであれば、get-function
で。
$ aws lambda get-function \
--function-name my-func --query "Tags"
Key1: Value1
Key2: Value2
Key3: Value3