🏇
最速でLambdaを用意するCloudFormationテンプレート
この記事の概要
intro
ちょっとLambdaの検証をしたい時や、書き捨てのLambdaを用意したいシーンがあると思います。
画面からポチポチして作った場合
IAMロールやロググループなど、不要なリソースは関数を消しても残りがちです。
実体とスタックが合っている必要もないですし、HelloWorld関数をCloudFormationで作って
そこから色々改変していけば、関数の片付けも簡単に出来ますね。
今回作れるもの
- LambdaのHelloWorld関数
- Lambda実行用IAMロール
- ロググループ
やり方
テンプレートの用意
以下のコードをエディタ等に貼り付けて、保存して下さい。
コード(クリックで開く)
tmp-lambda.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: temporary lambda function
Parameters:
FunctionName:
Description: Function Name you want to create.
Type: String
# S3Bucket:
# Description: location of artifact
# Type: String
# DeployPackageName:
# Description: Zip Package Name you has been uploaded.
# Type: String
Resources:
######## Lambda Function
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Description: Lambda Function
FunctionName: !Ref FunctionName
Architectures:
- x86_64
Handler: index.lambda_handler
# Code:
# S3Bucket: !Ref S3Bucket
# S3Key: !Ref DeployPackageName
Code:
ZipFile: |
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
MemorySize: 128
Role: !GetAtt IAMRole.Arn
Runtime: python3.8
Timeout: 30
TracingConfig:
Mode: PassThrough
DependsOn: IAMRole
######## Lambda Log Group
LogsLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${FunctionName}"
RetentionInDays: 14
DependsOn: LambdaFunction
######## IAMRole
IAMRole:
Type: AWS::IAM::Role
Properties:
Path: /
RoleName: !Sub ${FunctionName}-role
AssumeRolePolicyDocument: |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
MaxSessionDuration: 3600
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Description: Allows Lambda functions to call AWS services on your behalf.
CloudFormationスタックの作成
Step1:テンプレートの指定
CloudFormation
> スタック
> スタックの作成
> 新しいリソースを使用 (標準)
テンプレートファイルのアップロード
> ファイルの選択
> 前項で保存したファイルを選択
Step2:スタックの詳細を指定
スタック名・パラメータ(関数名)に任意の値を入力
Step3:スタックオプションの設定
特になにもせず次へ
Step4:レビュー
□ AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。
☑を入れる
→ スタックの作成
ポイント
LambdaをCloudFormationでデプロイする場合、S3にコードを置いて指定するのが一般的ですが
CloudFormationにLambdaのソースコードをベタ書きするやり方も存在します。
Code:
ZipFile: |
import json
~(略)~
この場合、ハンドラーがindex.lambda_handler
になることに注意して下さい。
コンソールからの手作りだと恐らく別の値になるはずです。
outro
検証用のリソースなど、作った人がいなくなった時に遺物となりがちなものは
時に現場を混乱させることがある思います。作ったものは片付けましょう(戒め)
Discussion