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認証を設定する»