/ #AWS #ServerlessFramework 

ServerlessFrameworkでデプロイ時に変数を渡す方法

もくじ

今回作るもの

はい👻

サーバーレスフレームワークを使って、 開発環境(dev)と本番環境(prd)をデプロイ!! デプロイのおまけとして、環境毎のS3も同時作成します。

です。

で、デプロイ方法が下記な感じ

デプロイする環境 コマンド
prd $ sls deploy --zzzz prd
dev $ sls deploy --zzzz devまたは$ sls deploy

zzzzは適当な変数名です。

私的に説明時に変数名をいい感じのつけてしまうと、かえってわかりにくくなる、、、とおもってます笑

例えばstageという変数にするとー、、、

$ sls deploy --stage prdになるますが、このstageが公式にあるオプションなのか、作ったオプションなのか、私には直感的にわかりにくく感じたのです(泣)

前提

  1. 作業できるAWSの環境を持っている
  2. ServerlessFrameworkが導入されている

では 作っていきましょう

まず適当なLamdaを用意します。今回はこんな感じにしました笑

def yyyyyy(event, context):
    return {"statusCode": 200}

次にserverless.ymlを作ります。

service: demo-app-02

provider:
  name: aws
  runtime: python3.7
  region: ap-northeast-1
  stage: ${opt:zzzz, 'dev'}

functions:
  XXXXX:
    handler: XXXXX.yyyyyy
    events:
      - s3:
          bucket: xxxxxxxxx-${self:provider.stage}-20200412
          event: s3:ObjectCreated:*

ServerlessFrameworkのリファレンスに関しては公式 に投げるとします。

ここで大切なのは、この下記の部分です。

# 省略...
provider:
  # 省略...
  stage: ${opt:zzzz, 'dev'}
# 省略...

はい。${opt:zzzz, 'dev'}の説明を軽くします。

${opt:zzzz}がcliのコマンド入力時に設定したオプションの値です。

つまり$ sls deploy --zzzz XXXXだった場合はこの場所に値XXXXが入ってきます。

で右辺の'dev'ですが、これはオプションzzzzが指定されなかった場合の値です。

はい。上記2つのファイルを作って、下記な状態にして

カレントディレクトリ
├ serverless.yml
└ XXXXX.py

下記ーな感じで、コマンドをたたけばデプロイされます!

デプロイする環境 コマンド
prd $ sls deploy --zzzz prd
dev $ sls deploy --zzzz devまたは$ sls deploy

確認してみましょう。

はい。Lamdaの名前もS3のバケットもきちんと環境ごとに分かれました♪

こんな感じでしたね。

さくさく書きましたが、私はこれが苦手でよく調べ直します。。。

ではではお疲れさまでした!

削除方法

削除する環境 コマンド
prd $ sls remove --zzzz prd
dev $ sls remove --zzzz devまたは$ sls remove

余談

serverless.yml ← こいつの呼び名は何でしょうか?ちょっと調べたら見つからず。。。

ServerlessFrameworkの設定ファイル? プロパティリスト? う〜む、、、誰か知ってたら教えて下さい。。。

Author

Sisii

インフラが好きなエンジニアぶってるなにか