LoginSignup
0

More than 1 year has passed since last update.

Lambda が保留中のままタイムアウトするエラーの原因

Last updated at Posted at 2021-10-16

目的

Lamba のエラー通知を受信したので X-Ray で確認すると、Lambda の状態が「保留中」となったまま実行時間を過ぎてタイムアウトしまいエラーになっていることがありました。その原因がわかったため、ここに記録しておきます。

原因

このエラーは、VPC 内のプライベートサブネットに接続する必要がある Lambda に起こるようです。

Lambda が VPC 内のリソースに接続するとき、サブネットごとにネットワークインターフェイス(ENI)が作成されます。これによって Lambda は各 VPC 内のリソースに通信できるようになります。

この Lambda が長期間アクティブでない場合、Lambda はネットワークインターフェイスを回収し、アイドル状態になります。アイドル状態の Lambda を再度アクティブにするには、その Lambda を呼び出します。すると、この呼び出しは失敗し、ネットワークインターフェイスが使用可能になるまで、Lambda は保留(Pending)状態になります。

このとき、ネットワークインターフェースが使用可能になるまでにかかる時間が Lambda の実行時間を超えてしまうと、Lambda は終了し、エラーになるようです。

VPC 接続しない Lambda では、この様なエラーは確認されていません。

保留中のままタイムアウトした Lambda の X-Ray

下記は、タイムアウトを 5 秒に設定している Lambda が保留中のまま終了となり、エラーとなった際の X-Ray の表示内容です。

xray.png

Lambda の状態に関する情報を取得するコマンド

下記のコマンドで、Lambda API を使用して、関数の状態に関する情報を取得できます。表示される各項目の解説は、FunctionConfiguration を参照してください。

$ aws lambda get-function-configuration --function-name my-function
{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:XXXXXXXX:function:my-function",
    "Runtime": "go1.x",
    "Role": "arn:aws:iam::XXXXXXXX:role/XXXXXXXX",
    "Handler": "XXXXXXXX",
    "CodeSize": 123456789,
    "Description": "",
    "Timeout": 5,
    "MemorySize": 128,
    "LastModified": "2021-10-13T07:46:51.452+0000",
    "CodeSha256": "XXXXXXXX",
    "Version": "$LATEST",
    "VpcConfig": {
        "SubnetIds": [
            "subnet-XXXXXXXX",
            "subnet-XXXXXXXX"
        ],
        "SecurityGroupIds": [
            "sg-XXXXXXXX"
        ],
        "VpcId": "vpc-XXXXXXXX"
    },
    "Environment": {
        "Variables": {
            "XXXXXXXX": "XXXXXXXX",
        }
    },
    "TracingConfig": {
        "Mode": "Active"
    },
    "RevisionId": "XXXXXXXX",
    "State": "Active",
    "LastUpdateStatus": "Successful",
    "PackageType": "Zip"
}

以上です。

参照した記事一覧

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0