LoginSignup
2
1

More than 5 years have passed since last update.

[Serverless Framework] serverless.ymlでデプロイステージごとに異なる変数を扱う

Last updated at Posted at 2018-11-25

はじめに

 2018年の夏ぐらいから、serverless frameworkによるプロダクト開発に取り組んでいます。元々エンジニア経験の少ない私にとって、インフラ整備などをあまり気にすることなく、プロダクトやコードの開発・改善に集中できるため、非常に効果的なフレームワークだと感じています。
 知識の整理を含めて、これまで取り組んできたことをQiitaに投稿していきます。また、独学がメインなので、Serverlessに関するコミュニティなどあったら、教えて頂けると幸いです。

構成

  • serverless framework
  • AWS
  • Node.js v8.10(AWS lambdaなど。今回の記事には関係ありません)

内容

 本題ですが、タイトルにあるように、serverlessのデプロイステージごとにserverless.ymlで異なる変数を使いたい状況がありました。具体的に私のプロダクトでは、デプロイステージごとにアクセスするAWS S3バケットを変える必要がありました。

デプロイステージ S3 バケット名
本番 (prd) xyz
開発 (dev) xyz-dev

 本番も開発環境もxyz-{ステージ名}という構成で良ければ、

xyz-${opt:stage}

とすることで対応できますが、本番環境はハイフンなしのバケット名をつける必要がありました。
(実際は、本番環境の開発を色々と進めてしまっていたので、開発環境を用意する時点でバケット名を変えるのが大変になってしまったのです。。)

そこで、以下のように、カスタム変数を使って、疑似的に条件分岐しているような形を実現しました。stageName配下のprdとdevがデプロイステージ名に対応して変数(この場合、"" or -dev)を切り替えます。この形式で開発やデプロイは問題なく進められています。

serverless.ymlの抜粋
service: s3Action

provider:
  name: aws
  runtime: nodejs8.10

custom:
  stageName:
    prd: ""
    dev: -dev

functions:
  s3Action:
    handler: index.handler
    events: 
      - s3: 
        bucket: xyz${self:custom.stageName.${self:provider.stage}} # sls deploy --stage prdのときxyz / sls deploy --stage devのとき xyz-dev
        event: s3:ObjectCreated:* #上記バケットにオブジェクトが生成されたときにindex.handlerを実行

補足

  • stageNameで用意していないステージにデプロイしようとすると、対応する変数名がないとエラーが発生します。
    ex) sls deploy --stage stg

  • serverless.yml内で条件分岐のような処理ができるか調べましたが、対応していないようでした。

参考

2
1
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
2
1