📝
[小ネタ] 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": []
}
ハンドラーのファイル名が 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