AWS LambdaでAWS CLIから関数にLayerを追加・削除する方法

AWS CLIからLambda関数にLayerを追加・削除する方法がわかりにくかったのでメモ。


前提


  • AWSアカウントがある

  • AWS CLIが利用可能

  • 検証できるLambda関数がある


    • なければ新規作成




Lambda Layerを作成

検証で利用するLayerを作成します。今回は関数内で参照しないので、ファイル内に// だけ含んだファイルでLayerを作成します。空ファイルだとだめでした。

AWS CLIだとaws lambda publish-layer-version コマンドで作成ができます。

> echo '//' layer.js


> zip layer.zip layer.js

> aws lambda publish-layer-version \
--layer-name test-layer-1 \
--zip-file fileb://layer.zip \
--compatible-runtimes nodejs8.10

{
"Content": {
"Location": "https://prod-04-2014-layers.s3.amazonaws.com/snapshots/(略)",
"CodeSha256": "T4pRG6jK1iy8rjqOxxP2t3R1YSb5hl61Q90xHYHkePE=",
"CodeSize": 168
},
"LayerArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1",
"LayerVersionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1:1",
"Description": "",
"CreatedDate": "2019-06-20T07:05:45.061+0000",
"Version": 1,
"CompatibleRuntimes": [
"nodejs8.10"
]
}

> aws lambda publish-layer-version \
--layer-name test-layer-2 \
--zip-file fileb://layer.zip \
--compatible-runtimes nodejs8.10

{
"Content": {
"Location": "https://prod-04-2014-layers.s3.amazonaws.com/snapshots/(略)",
"CodeSha256": "T4pRG6jK1iy8rjqOxxP2t3R1YSb5hl61Q90xHYHkePE=",
"CodeSize": 168
},
"LayerArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2",
"LayerVersionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2:1",
"Description": "",
"CreatedDate": "2019-06-20T07:07:28.453+0000",
"Version": 1,
"CompatibleRuntimes": [
"nodejs8.10"
]
}


Lambda Layerを関数に追加

検証用の関数use-lambda-layer がある前提です。

Layerを指定する場合、上記にあるARNのうち、バージョンまで含まれているLayerVersionArn を指定する必要があります。複数Layerを追加するにはスペース区切りで指定します。

# 1つ追加

> aws lambda update-function-configuration \
--function-name use-lambda-layer \
--layers \
"arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1:1"

{
"FunctionName": "use-lambda-layer",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:use-lambda-layer",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/xxxxxxxxxxxx",
"Handler": "index.handler",
"CodeSize": 262,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T07:11:20.502+0000",
"CodeSha256": "F8AUyhyiHz5dsBaSl6+u86B5oiwWD3jtdi3IuvB0eKE=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
"SecurityGroupIds": [],
"VpcId": ""
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "f8ad4fd8-b8d2-4aba-ba12-9f28759df79d",
"Layers": [
{
"Arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1:1",
"CodeSize": 168
}
]
}

# 2つ追加
> aws lambda update-function-configuration \
--function-name use-lambda-layer \
--layers \
"arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1:1" \
"arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2:1"

{
"FunctionName": "use-lambda-layer",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:use-lambda-layer",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/xxxxxxxxxxxx",
"Handler": "index.handler",
"CodeSize": 262,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T07:12:47.938+0000",
"CodeSha256": "F8AUyhyiHz5dsBaSl6+u86B5oiwWD3jtdi3IuvB0eKE=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
"SecurityGroupIds": [],
"VpcId": ""
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "8737bdfe-3b0d-404e-b3a0-c9fd57e971a9",
"Layers": [
{
"Arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-1:1",
"CodeSize": 168
},
{
"Arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2:1",
"CodeSize": 168
}
]
}


Lambda Layerを関数から削除

Layerを削除というよりは利用するLayerを再指定することになります。

すべて削除するには--layers [] として、空配列を指定する必要があります。わかりにくい

# 1つ削除

> aws lambda update-function-configuration \
--function-name use-lambda-layer \
--layers \
"arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2:1"

{
"FunctionName": "use-lambda-layer",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:use-lambda-layer",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/xxxxxxxxxxxx",
"Handler": "index.handler",
"CodeSize": 262,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T07:13:27.749+0000",
"CodeSha256": "F8AUyhyiHz5dsBaSl6+u86B5oiwWD3jtdi3IuvB0eKE=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
"SecurityGroupIds": [],
"VpcId": ""
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "fa942867-332a-4d32-ae2d-31209ce9cc30",
"Layers": [
{
"Arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:layer:test-layer-2:1",
"CodeSize": 168
}
]
}

# 全部削除
> aws lambda update-function-configuration \
--function-name use-lambda-layer \
--layers []

{
"FunctionName": "use-lambda-layer",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:use-lambda-layer",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/xxxxxxxxxxxx",
"Handler": "index.handler",
"CodeSize": 262,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T07:13:53.065+0000",
"CodeSha256": "F8AUyhyiHz5dsBaSl6+u86B5oiwWD3jtdi3IuvB0eKE=",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
"SecurityGroupIds": [],
"VpcId": ""
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "c060cba7-2cf4-48af-88d3-4e5f653965a2"
}


参考

AWS Lambda Layers - AWS Lambda

https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

publish-layer-version — AWS CLI 1.16.182 Command Reference

https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-layer-version.html