VPC Lambdaの一覧を取得するために実行したlist-functionsの結果にVpcConfigが含まれない時と含まれるけど中身が空の時がある

2022.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、岩城です。

以下のようなコマンドからVPC Lambdaの一覧を取得したところ、VPCIDが表示されるもの、Noneが表示されるもの、何も表示されない結果が返ってきました。 なぜこのような結果の違いになるのか調べたの共有します。

$ aws lambda list-functions --query 'Functions[].{FunctionName:FunctionName,VPCID:VpcConfig.VpcId}' --output table
---------------------------------------------------------------------
|                           ListFunctions                           |
+-----------------------------------------+-------------------------+
|              FunctionName               |          VPCID          |
+-----------------------------------------+-------------------------+
|  test-function-1                        |  vpc-xxxxxxxxxxxxxxxxx  |
|  test-function-2                        |  None                   |
|  test-function-3                        |                         |
+-----------------------------------------+-------------------------+

結論

まずは結論です。

  • VPCIDが表示される
    • VPC Lambdaであることを示す
    • VpcConfigにVPCやサブネットなどの情報が記録されている
  • None表示される
    • VPC Lambdaではないことを示す
    • 過去に一度でもVPC Lambdaとして設定したことがなく、VpcConfigパラメーターが存在しない
  • 何も表示されない
    • VPC Lambdaではないことを示す
    • 過去に一度でもVPC Lambdaとして設定したことがあり、VpcConfigパラメーターが存在する

確認してみた

VPCIDが表示されるパターン

VpcConfigを確認するとサブネットIDやVPCIDが記録されていますので、VPC Lambdaであることがわかります。

$ aws lambda get-function --function-name vpcconfig-test-1
{
    "Configuration": {
        "FunctionName": "vpcconfig-test-1",
        "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:vpcconfig-test-1",
        "Runtime": "nodejs16.x",
        "Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/vpcconfig-test-role-avjihgst",
        "Handler": "index.handler",
        "CodeSize": 304,
        "Description": "",
        "Timeout": 3,
        "MemorySize": 128,
        "LastModified": "2022-05-31T07:50:40.000+0000",
        "CodeSha256": "BoZeaw/DbJn9WCuwWo55uYOBIKfOwod6Mg372ZVNbSI=",
        "Version": "$LATEST",
        "VpcConfig": {
            "SubnetIds": [
                "subnet-0e631f5d739936811",
                "subnet-08a27acc1efdceff9"
            ],
            "SecurityGroupIds": [
                "sg-06e39c4a3dc758c77"
            ],
            "VpcId": "vpc-0a7d3950c035d3947"
        },
        "TracingConfig": {
            "Mode": "PassThrough"
        },
        "RevisionId": "7ac91128-6861-4352-9f87-df6dd5f98172",
        "State": "Active",
        "LastUpdateStatus": "InProgress",
        "LastUpdateStatusReason": "The function is being created.",
        "LastUpdateStatusReasonCode": "Creating",
        "PackageType": "Zip",
        "Architectures": [
            "x86_64"
        ]
    }
}

Noneが表示されるパターン

非VPC Lambdaで関数を新規作成した時点では、VpcConfigは存在しません。当然ですがVPC Lambdaではありません。

$ aws lambda get-function --function-name vpcconfig-test-2
{
    "Configuration": {
        "FunctionName": "vpcconfig-test-2",
        "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:vpcconfig-test-2",
        "Runtime": "nodejs16.x",
        "Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/vpcconfig-test-2-role-jjufgkdn",
        "Handler": "index.handler",
        "CodeSize": 304,
        "Description": "",
        "Timeout": 3,
        "MemorySize": 128,
        "LastModified": "2022-05-31T07:41:53.140+0000",
        "CodeSha256": "BoZeaw/DbJn9WCuwWo55uYOBIKfOwod6Mg372ZVNbSI=",
        "Version": "$LATEST",
        "TracingConfig": {
            "Mode": "PassThrough"
        },
        "RevisionId": "ffbb1f9c-97a1-419e-b94d-53efa1ad42c2",
        "State": "Active",
        "LastUpdateStatus": "Successful",
        "PackageType": "Zip",
        "Architectures": [
            "x86_64"
        ]
    }
}

何も表示されないパターン

一度VPC Lambdaに設定した後に非VPC Lambdaに設定変更した場合、VpcConfigは存在しますが中身は空となります。

$ aws lambda get-function --function-name vpcconfig-test-3
{
    "Configuration": {
        "FunctionName": "vpcconfig-test-3",
        "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:vpcconfig-test-3",
        "Runtime": "nodejs16.x",
        "Role": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/vpcconfig-test-role-avjihgst",
        "Handler": "index.handler",
        "CodeSize": 304,
        "Description": "",
        "Timeout": 3,
        "MemorySize": 128,
        "LastModified": "2022-05-31T07:48:44.000+0000",
        "CodeSha256": "BoZeaw/DbJn9WCuwWo55uYOBIKfOwod6Mg372ZVNbSI=",
        "Version": "$LATEST",
        "VpcConfig": {
            "SubnetIds": [],
            "SecurityGroupIds": [],
            "VpcId": ""
        },
        "TracingConfig": {
            "Mode": "PassThrough"
        },
        "RevisionId": "ac2861ee-eb8c-4fe3-b493-73731de431c2",
        "State": "Active",
        "LastUpdateStatus": "InProgress",
        "LastUpdateStatusReason": "The function is being created.",
        "LastUpdateStatusReasonCode": "Creating",
        "PackageType": "Zip",
        "Architectures": [
            "x86_64"
        ]
    }
}

おわりに

分かってしまえば簡単なことでしたが、また一つ疑問が解消されたので良かったです。

本エントリがどなたかのお役に立てれば幸いです。