3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
3
Help us understand the problem. What are the problem?