AWS SAM のtemplate.yamlをdeploy環境ごとに切り替える
develop や staging 、 productionなどの複数の環境で template.yaml を変更したいことがあります。
まずtemplate.yaml に Parametersを追加します。ここで追加した値が sam deploy時の --parameter-overridesに利用できる値が定義できますので今回はデプロイ環境を定義します。
Parameters:
Environment:
Type: String
AllowedValues:
- development # 開発環境
- staging # ステージング環境
- production # 本番環境
Default: development
次にMappingsで各環境ごとの設定したい値を指定します。今回はデプロイ環境ごとにlambdaのRoleを切り替えたかったので以下のように定義しています。
Mappings:
EnvironmentMap:
development:
lambdaRole: 'arn:aws:iam::xxxxxx'
staging:
lambdaRole: 'arn:aws:iam::yyyyy'
production:
lambdaRole: 'arn:aws:iam::yyyyy'
最後に可変させたい箇所を !FindInMap [EnvironmentMap, !Ref Environment, lambdaRole]とします。
Resources:
SetFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: xxx/
Handler: app.lambdaHandler
Runtime: nodejs14.x
Role: !FindInMap [EnvironmentMap, !Ref Environment, lambdaRole]
Events:
HelloWorld:
Type: Api
Properties:
Path: /xxx/
Method: post
これでdeploy時に--parameter-overridesを指定することでdeploy環境ごとtemplate.yamlの値を切り替えることが可能になります。
sam deploy .... --parameter-overrides Environment=development
スポンサードリンク
«AWS Lambda(Node.js)でJimpを使って画像のバリデーションを行う | メイン | AWS CloudFront FunctionsでBasic認証を設定する»