hisayukiです。
前回やったこちらの続きをやろうと思ったので、経過を書きます!
どこまでやるかわかんないので連載形式にしようと思います。
環境設定
前回はローカル環境でのテストまでだったので、実際に環境をプロファイル指定してデプロイしてみました。
まずはserverless.yml
の設定を追記。
service:
name: serverless-typescript-sample
# Add the serverless-webpack plugin
plugins:
- serverless-webpack
- serverless-offline
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: ap-northeast-1
profile: serverless
functions:
hello:
handler: handler.hello
events:
- http:
method: get
path: hello
provider
にstage、region、profileを追記。
今回は開発なのでステージをdev
に、リージョンはデフォルトだとバージニアなのでap-northeast-1
にして東京を指定。
最後にprofile
は実際にデプロイする先のアカウントを指定します。
このとき、どうやら環境変数にAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYが設定されてるとprofileを無視されてる気がする。
対処法としてはexport AWS_ACCESS_KEY_ID=
とかで環境変数内のAWS_ACCESS_KEY_ID
を消しておきましょう。
まぁ・・・AWS CLIも出来る限りちゃんとプロファイル分けて--profile
をつける癖をつけたほうが可読性も高くなるしミスも減ると思う。
いざデプロイ
yarn sls deploy
yarn run v1.15.2
$ /Users/hisayuki/vscode/serverless-typescript-sample/node_modules/.bin/sls deploy
Serverless: Bundling with Webpack...
Time: 1473ms
Built at: 2019/04/17 20:54:59
Asset Size Chunks Chunk Names
handler.js 33.5 KiB 0 [emitted] handler
handler.js.map 170 KiB 0 [emitted] handler
Entrypoint handler = handler.js handler.js.map
[0] ./node_modules/source-map/lib/util.js 12.6 KiB {0} [built]
[1] ./node_modules/source-map/lib/source-map-generator.js 14 KiB {0} [built]
[2] ./node_modules/source-map/lib/base64-vlq.js 4.6 KiB {0} [built]
[3] ./node_modules/source-map/lib/array-set.js 3.12 KiB {0} [built]
[4] ./handler.ts 297 bytes {0} [built]
[5] ./node_modules/source-map-support/register.js 25 bytes {0} [built]
[6] ./node_modules/source-map-support/source-map-support.js 17.6 KiB {0} [built]
[7] ./node_modules/source-map/source-map.js 405 bytes {0} [built]
[9] ./node_modules/source-map/lib/mapping-list.js 2.28 KiB {0} [built]
[10] ./node_modules/source-map/lib/source-map-consumer.js 39.6 KiB {0} [built]
[13] ./node_modules/source-map/lib/source-node.js 13.5 KiB {0} [built]
[14] external "path" 42 bytes {0} [built]
[15] external "fs" 42 bytes {0} [optional] [built]
[16] ./node_modules/buffer-from/index.js 1.56 KiB {0} [built]
[17] external "module" 42 bytes {0} [optional] [built]
+ 3 hidden modules
Serverless: Packaging service...
Serverless: Service files not changed. Skipping deployment...
Service Information
service: serverless-typescript-sample
stage: dev
region: ap-northeast-1
stack: serverless-typescript-sample-dev
resources: 10
api keys:
None
endpoints:
GET - https://xxxxxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/hello
functions:
hello: serverless-typescript-sample-dev-hello
layers:
None
✨ Done in 5.00s.
こんな感じでデプロイ無事成功❗
この画面では指定したステージとリージョンになっていることとはわかりますが、どのプロファイル使ったかまでは表示されないです。
ただ、指定のプロファイルがある環境でLambdaを確認したらこんな感じでデプロイされてます❗
ステージごとに環境変更
やり方はいろいろあるんだけど・・・結局こんな感じに落ち着きました。
provider:
name: aws
runtime: nodejs8.10
region: ap-northeast-1
stage: ${opt:stage, self:custom.defaultStage}
profile: ${self:custom.profiles.${self:provider.stage}}
custom:
defaultStage: dev
defaultRegion: ap-northeast-1
profiles:
dev: serverless
prd: serverless_prd
opt:stage
でデプロイコマンドにstageオプションをつけることが出来ます。
オプションがなければself:custom.profiles.defaultStage
が呼ばれます。self:
はserverless.yml内を指してるので、defaultStageはdevになります。
profile: ${self:custom.profiles.${self:provider.stage}}
も同様に、serverless.yml内のcustom.profiles.
を呼んで、その先を可変にしてます。
可変部分はprovider.stage
なので、今回はdevが入ります。
結果、プロファイルはserverless
が呼ばれるって感じですね!
次はコマンドをstageオプション付きで実行しました。
yarn sls deploy --stage prd
yarn run v1.15.2
$ /Users/hisayuki/vscode/serverless-typescript-sample/node_modules/.bin/sls deploy --stage prd
Serverless: Bundling with Webpack...
Time: 1397ms
Built at: 2019/04/17 21:22:03
Asset Size Chunks Chunk Names
handler.js 33.5 KiB 0 [emitted] handler
handler.js.map 170 KiB 0 [emitted] handler
Entrypoint handler = handler.js handler.js.map
[0] ./node_modules/source-map/lib/util.js 12.6 KiB {0} [built]
[1] ./node_modules/source-map/lib/source-map-generator.js 14 KiB {0} [built]
[2] ./node_modules/source-map/lib/base64-vlq.js 4.6 KiB {0} [built]
[3] ./node_modules/source-map/lib/array-set.js 3.12 KiB {0} [built]
[4] ./handler.ts 297 bytes {0} [built]
[5] ./node_modules/source-map-support/register.js 25 bytes {0} [built]
[6] ./node_modules/source-map-support/source-map-support.js 17.6 KiB {0} [built]
[7] ./node_modules/source-map/source-map.js 405 bytes {0} [built]
[9] ./node_modules/source-map/lib/mapping-list.js 2.28 KiB {0} [built]
[10] ./node_modules/source-map/lib/source-map-consumer.js 39.6 KiB {0} [built]
[13] ./node_modules/source-map/lib/source-node.js 13.5 KiB {0} [built]
[14] external "path" 42 bytes {0} [built]
[15] external "fs" 42 bytes {0} [optional] [built]
[16] ./node_modules/buffer-from/index.js 1.56 KiB {0} [built]
[17] external "module" 42 bytes {0} [optional] [built]
+ 3 hidden modules
Serverless: Packaging service...
Serverless: Creating Stack...
Error --------------------------------------------------
Profile serverless_prd does not exist
For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
OS: darwin
Node Version: 11.12.0
Serverless Version: 1.40.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
まだserverless_prd
のプロファイルは作っていないのでエラーになりますが、ちゃんと切り替わっていることはわかります❗
まとめ
今日は環境切り替えのためのserverless.ymlの書き方をやりました。
最初の環境変数にAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYが設定されてるとprofileを無視されてるにはハマりました・・・・(;´∀`)
コメント