📝

[小ネタ] Python ランタイムの Lambda 関数を CloudFormation からデプロイする際のファイル名について

に公開

Python ランタイムの Lambda 関数を CloudFormation からデプロイした際のハンドラーのファイル名は index.py でした。

1. コンソールから Lambda 関数を作成した場合

Lambda コンソールから Python ランタイムの Lambda 関数を作成した場合、デフォルトではハンドラーのファイル名は lambda_function.py です。

また、ハンドラー設定も lambda_function.lambda_handler となっています。

2. CloudFormation から Lambda 関数を作成した場合

AWSTemplateFormatVersion: "2010-09-09"

Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.13
      Role: arn:aws:iam::012345678901:role/LambdaBasicExecutionRole
      Handler: lambda_function.lambda_handler
      Code:
        ZipFile: |
          def lambda_handler(event, context):
              return {
                  'statusCode': 200,
                  'body': 'Hello from Lambda!'
              }

上記のようなテンプレートで CloudFormation から Lambda 関数を作成した場合、ハンドラーのファイル名は index.py でした。

上記テンプレートではハンドラーを lambda_function.lambda_handler に設定しているため、この状態で関数を実行しても以下のエラーが発生します。

{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'lambda_function'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "",
  "stackTrace": []
}

LambdaのRuntime.ImportModuleError: Unable to import module ‘lambda_function’: No module named ‘lambda_function’ Tracebackというエラーに遭遇したときの対処方法 | DevelopersIO

ハンドラーのファイル名が index.py である一方、ハンドラーの設定では lambda_function.py というファイル名が指定されていることで上記のエラーが発生します。

そのため、上記テンプレートを以下のように修正すればエラーを回避できます。

AWSTemplateFormatVersion: "2010-09-09"

Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.13
      Role: arn:aws:iam::012345678901:role/LambdaBasicExecutionRole
      Handler: index.lambda_handler
      Code:
        ZipFile: |
          def lambda_handler(event, context):
              return {
                  'statusCode': 200,
                  'body': 'Hello from Lambda!'
              }

まとめ

今回は Python ランタイムの Lambda 関数を CloudFormation からデプロイする際のファイル名について紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion