sam deploy コマンドで異なる環境にデプロイする。
Posted on
はじめに
SAMを初めにデプロイするときは、sam deploy --guided
を使用すると、デプロイのパラメータを聞かれるので、それに従ってデプロイできます。
2回以降は guided のオプションを省略した場合、 samconfig.toml に保存されたデフォルトパラメータを使って簡単にデプロイできます。
さらに samconfig.toml にはデフォルト以外のパラメータも設定できるようになっています。
ここでは、sam deploy
のデフォルト以外の環境のパラメータの呼び出し方について調べました。
やること
sam deploy --guided
を使ってふたつのリージョン(ap-northeast-1,us-east-1)にデプロイします。
ap-northeast-1 へのデプロイは デフォルトの環境として指定します。
us-east-1 へのデプロイは、hogeという環境名に指定します。
結果それぞれの設定が、samconfig.toml にどのように記載されるのかを見てみます。
最後にhoge環境を指定したデプロイ sam deploy --config-env hoge
を実行して、hogeのパラメータが読み込まれたことも確認します。
やってみた。
1). サンプルのsamを作成する。
samのアプリはなんでも良いので、サンプルのアプリを使用する。
$ sam init
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
What package type would you like to use?
1 - Zip (artifact is a zip uploaded to S3)
2 - Image (artifact is an image uploaded to an ECR image repository)
Package type: 1
Which runtime would you like to use?
1 - nodejs14.x
2 - python3.8
3 - ruby2.7
4 - go1.x
5 - java11
6 - dotnetcore3.1
7 - nodejs12.x
8 - nodejs10.x
9 - python3.7
10 - python3.6
11 - python2.7
12 - ruby2.5
13 - java8.al2
14 - java8
15 - dotnetcore2.1
Runtime: 2
Project name [sam-app]: sample
Cloning from https://github.com/aws/aws-sam-cli-app-templates
AWS quick start application templates:
1 - Hello World Example
2 - EventBridge Hello World
3 - EventBridge App from scratch (100+ Event Schemas)
4 - Step Functions Sample App (Stock Trader)
5 - Elastic File System Sample App
Template selection: 1
-----------------------
Generating application:
-----------------------
Name: sample
Runtime: python3.8
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Next steps can be found in the README file at ./sample/README.md
2). samをビルドする。
コンテナを使用してsamをビルドする。
$ cd sample
$ sam build --use-container
3). sam deploy --guided
を使って ap-northeast-1 にデプロイする。
sam deploy --guided
を使ってデプロイしていく。
SAM configuration environment [default]:
は、空欄のままにしてdefaultの環境として登録する。
$ sam deploy --guided
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] : Not found
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]:
AWS Region [ap-northeast-1]: ← メモ) 'ap-northeast-1' なので空欄のママ
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: y
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: y
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]: ← メモ) 'default' なので空欄のママ
:
:
4). samconfig.toml を確認する。
samconfig.tomlが作成されているので、内容を確認すると 先ほど記載した内容が default に登録されている。
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "sam-app"
s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-geiohp0cab5e"
s3_prefix = "sam-app"
region = "ap-northeast-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"
5). パラメータの読み込みを確認するため、sam deploy
を実行する
sam deploy
を実行すると、samconfig.toml の default の設定が読み込まれていることがわかる。
(デプロイ自体は、samに変更が入っていないので失敗する。)
$ sam deploy
File with same data already exists at sam-app/88bd6722efd39f95c2a8ca00aad6e623, skipping upload
Deploying with following values
===============================
Stack name : sam-app
Region : ap-northeast-1
Confirm changeset : True
Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-geiohp0cab5e
Capabilities : ["CAPABILITY_IAM"]
Parameter overrides : {}
Signing Profiles : {}
Initiating deployment
=====================
File with same data already exists at sam-app/21689c3b30d88b36636078755484b3b1.template, skipping upload
Waiting for changeset to be created..
Error: No changes to deploy. Stack sam-app is up to date
6). sam deploy --guided
を使って us-east-1 にデプロイする。
再度デプロイをするが、今度はリージョンを us-east-1 にしてenvironmentの設定は hoge に設定する。
$ 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 [sam-app]:
AWS Region [ap-northeast-1]: us-east-1 ← メモ) 'us-east-1'を指定
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [Y/n]: y
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: y
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]: hoge ← メモ) environmentの設定を hoge にする
:
:
7). 再度samconfig.toml を確認する。
再度内容を確認すると hoge が追記されている。 region = “us-east-1” になっている。
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "sam-app"
s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-geiohp0cab5e"
s3_prefix = "sam-app"
region = "ap-northeast-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"
[hoge]
[hoge.deploy]
[hoge.deploy.parameters]
stack_name = "sam-app"
s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-1tn7p7zgvh8ru"
s3_prefix = "sam-app"
region = "us-east-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"
5). sam deploy --config-env hoge
を実行する
sam deploy --config-env hoge
を実行すると、Region が us-east-1 になっており hoge の設定が読み込まれていることがわかる。
$ sam deploy --config-env hoge
File with same data already exists at sam-app/88bd6722efd39f95c2a8ca00aad6e623, skipping upload
Deploying with following values
===============================
Stack name : sam-app
Region : us-east-1 ← メモ) hogeで設定していた'us-east-1'になっている。
Confirm changeset : True
Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1tn7p7zgvh8ru
Capabilities : ["CAPABILITY_IAM"]
Parameter overrides : {}
Signing Profiles : {}
Initiating deployment
=====================
File with same data already exists at sam-app/abcf6d1173df7e618c27780727d47358.template, skipping upload
Waiting for changeset to be created..
Error: No changes to deploy. Stack sam-app is up to date
まとめ
samの実装時など、検証環境へのデプロイを何回もするとおもいますが 今回の環境の切り替えができれば、楽ができるかと思いました。