CloudFormationでLambdaのコード込みでデプロイしてみた
はじめに
こんにちは、山本 翔大です。
CloudFormation で Lambda 関数を作成する際、関数の設定だけでなくコードもテンプレート側で指定できます。
代表的なものとして、テンプレートにコードを直接書く方法と、S3 にアップロードした zip ファイルを参照する方法があります。
今回はこの 2 つの方法を、実際に試してみました。
Code.ZipFile
まずは Code.ZipFile を使って、CloudFormation テンプレートに Lambda のコードを直接書く方法を試します。
小さな検証用 Lambda 関数や、CloudFormation のカスタムリソース用 Lambda 関数に向いている方法です。
テンプレートの作成
まずローカルに inline-lambda.yaml を作成し、以下の内容を記述します。
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy Lambda with inline code using Code.ZipFile
Resources:
InlineLambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: cfn-inline-lambda-role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
InlineLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: cfn-inline-lambda-demo
Runtime: python3.12
Handler: index.handler
Role: !GetAtt InlineLambdaExecutionRole.Arn
Timeout: 10
Code:
ZipFile: |
def handler(event, context):
name = event.get("name", "World")
return {
"statusCode": 200,
"message": f"Hello, {name}! This Lambda was deployed with Code.ZipFile."
}
Outputs:
FunctionName:
Description: Lambda function name
Value: !Ref InlineLambdaFunction
Lambda のコードを書いているのは以下の部分です。
Code:
ZipFile: |
def handler(event, context):
...
ZipFile に Lambda のコードを直接書いています。
CloudFormation はインラインコードを index というファイル名で扱うため、ハンドラーは index.handler で指定しています。
スタックの作成
作成したテンプレートを使って、CloudFormation コンソールからスタックを作成します。
CloudFormation から「スタックの作成」をクリックし、「新しいリソースを使用」を選択します。
テンプレートの指定では「テンプレートファイルのアップロード」を選び、先ほど作成した inline-lambda.yaml をアップロードして次へ進みます。

スタックの詳細を指定する画面に進んだら、以下の設定を入力します。
- スタック名:
cfn-inline-lambda-demo
このテンプレートにはパラメータがないため、そのまま次へ進みます。
スタックオプションも特に変更せず、次の確認画面まで進んでください。
最後の確認画面では、今回のテンプレートで IAM ロールを作成するため、「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します」にチェックを入れたうえで送信をクリックします。
ステータスが CREATE_COMPLETE になれば作成完了です。
作成した Lambda 関数を確認しコードを見てみるとテンプレートに記載したコードが反映されているのがわかります。

Code.S3Bucket / S3Key
次に、Lambda のコードを zip ファイルにして S3 にアップロードし、CloudFormation からその zip ファイルを参照する方法を試してみます。
今回は単一のファイルで行いますが、複数ファイル構成や外部ライブラリを含めたい場合にも対応できます。
Lambda コードと zip ファイルの作成
まずは Lambda にデプロイするコードを用意します。
ローカルに lambda_function.py を作成し、以下の内容を記述します。
def handler(event, context):
name = event.get("name", "World")
return {
"statusCode": 200,
"message": f"Hello, {name}! This Lambda was deployed from an S3 zip file."
}
作成したファイルを zip 化して function.zip という名前で保存します。
S3 バケットの作成とアップロード
次に、zip ファイルを置くための S3 バケットを作成します。
マネジメントコンソールから S3 を開き、以下の設定でバケットを作成してください。
- バケット名:
cfn-lambda-code-demo-20260529(任意の一意な名前) - リージョン: アジアパシフィック(東京) ap-northeast-1
- その他: デフォルトのまま
バケットを作成したら、先ほどの function.zip をバケット直下にアップロードします。

テンプレートの作成
続いて CloudFormation テンプレートを作成します。
ローカルに s3-lambda.yaml を作成し、以下の内容を記述します。
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy Lambda with code from S3 zip
Parameters:
CodeBucketName:
Type: String
Description: S3 bucket name for Lambda deployment package
CodeS3Key:
Type: String
Description: S3 key for Lambda deployment package
Default: function.zip
Resources:
S3ZipLambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: cfn-s3zip-lambda-role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
S3ZipLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: cfn-s3zip-lambda-demo
Runtime: python3.12
Handler: lambda_function.handler
Role: !GetAtt S3ZipLambdaExecutionRole.Arn
Timeout: 10
Code:
S3Bucket: !Ref CodeBucketName
S3Key: !Ref CodeS3Key
Outputs:
FunctionName:
Description: Lambda function name
Value: !Ref S3ZipLambdaFunction
Lambda のコードを指定しているのは以下の部分です。
Code:
S3Bucket: !Ref CodeBucketName
S3Key: !Ref CodeS3Key
今回は直接コードを書かず、!Ref を使用して S3 バケット名と zip ファイルのオブジェクトキーを指定します。
具体的な値はスタック作成時に設定するため、今はパラメータ名だけ書いておきます。
スタックの作成
作成したテンプレートを使って、CloudFormation コンソールからスタックを作成します。
CloudFormation から「スタックの作成」をクリックし、「新しいリソースを使用」を選択します。
テンプレートの指定では「テンプレートファイルのアップロード」を選び、先ほど作成した s3-lambda.yaml をアップロードして次へ進みます。
スタックの詳細を指定する画面に進んだら、以下の設定を入力します。
- スタック名:
cfn-s3zip-lambda-demo - CodeBucketName: 先ほど作成した S3 バケット名
- CodeS3Key:
function.zip

スタックオプションは特に変更せず次へ進み、最後の確認画面で「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します」にチェックを入れて送信をクリックします。
ステータスが CREATE_COMPLETE になれば作成完了です。
Lambda のコードを開くと、function.zip の中身が反映されています。

おわりに
以上で、CloudFormation で Lambda をコード入りでデプロイする方法の紹介は終了です。
前回紹介した IaC ジェネレーター は Lambda のコードまで変換できないため、今回の方法を使って Lambda のコード部分をテンプレートに含めることもできます。
ぜひ前回の記事と合わせて試してみてください。
参考資料
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました







