LoginSignup
0
3

More than 3 years have passed since last update.

SAMを使った環境毎のデプロイ方法のまとめ

Posted at

はじめに

SAMを使ったサーバーレス環境の構築時に、1つのtemplate.yamlを使って、develop, staging, production毎に環境変数を切り替える方法を忘れるため、備忘もかねて記事にしました

目的

SAMのtemplateを使って、各環境毎に変数値を変えてlambdaを実行できるようにする

どうやるのか?

SAMテンプレートの中の、ParametersとMappingsを使うと、一つの環境変数でKey-Value方式で、複数の値を切り替えることができる

実例

まず、ParametersとMappingを記述する

Parameters:
  Environment:
    Type: String
    AllowedValues:
      - development # 開発環境
      - staging # ステージング環境
      - production # 本番環境
    Default: development

Mappings:
 EnvironmentMap:
   development:
     HELLO: 'developmen Hello World'
   staging:
     HELLO: 'staging Hello World'
   production:
     HELLO: 'production Hello World'

それを使いたい時は、以下のように指定すれば、環境変数がKeyになり、Valueが取得できる

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get
      Environment:
        Variables:
          SAMPLE_ENV: !FindInMap [ EnvironmentMap, !Ref Environment, HELLO]

動作確認

# ビルド
sam build

# 実行
sam local start-api --parameter-overrides Environment={書き換えたい環境変数}

アクセスして確認する

curl 'http://localhost:3000/hello'

CI/CDをどうするか?

CIに関しては、一つのtemplate.yamlをビルドするだけで良い
CDの時に、 --parameter-overrides を使って、Parametersを書き換えてデプロイするフローになる

❯ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [SAMPLE-ENV]: 
        AWS Region [ap-northeast-1]: 
        Parameter Environment [staging]: ← ここで使いたい環境を指定するだけで良い
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
---- 省略 ---- 

まとめ

かなり雑にまとめてしまいましたが、templateのParametersだけを使う場合だと、環境変数が多くなると管理が大変になるので、Mappingsを活用すると使いたい環境を指定するだけで、セットアップができる

誰かのご参考になれば幸いです

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3