こんにちは。implの坂田です。
本日はshell script と aws CloudFormation について記事を投稿しようと思います。
shell scriptとは
一般的にLinuxやUnixOSで実行できる簡易なスクリプト言語です。OS操作で利用します。
CLIを利用される方はわかると思いますが、コマンド入力する場合は毎回引数などて入力する必要が出てきます。それだと少し手間が多いです。
なので、こういったときに決まったコマンドをまとめてしまい、一つのファイルでコマンドをまとめて実行するのがシェルスクリプトの利点です。
shell scriptで何ができるようになるの?
あまり馴染みのない方は多いと思います。僕も最近理解を深めてきているとところです。
gitlabのパイプラインで、CloudFormationからawsにあらゆるリソースの設定をまとめてプッシュする光景をプロジェクト内で何度も確認しており、なんて便利な使い方なんだと日々感心しています。
そんなインフラ構築の数々は、このshellスクリプトでまとめられていることが多いです。
実際のCloudFormationの例を見てみる
CloudFormation 複数のスタックを実行し、各インフラを構築する。
#!/bin/bash
# AWS CLIコマンドを使用するためのプロファイル名を指定してください
profile="your-profile"
# スタック1を作成
echo "Creating Stack 1..."
aws cloudformation create-stack --profile $profile --stack-name Stack1 --template-body file://path/to/stack1.yaml --capabilities CAPABILITY_NAMED_IAM
echo "Stack 1 created"
# スタック2を作成
echo "Creating Stack 2..."
aws cloudformation create-stack --profile $profile --stack-name Stack2 --template-body file://path/to/stack2.yaml
echo "Stack 2 created"
# スタック3を作成
echo "Creating Stack 3..."
aws cloudformation create-stack --profile $profile --stack-name Stack3 --template-body file://path/to/stack3.yaml --parameters ParameterKey=KeyName,ParameterValue=my-key --capabilities CAPABILITY_NAMED_IAM
echo "Stack 3 created"
# スタック4を作成
echo "Creating Stack 4..."
aws cloudformation create-stack --profile $profile --stack-name Stack4 --template-body file://path/to/stack4.yaml --parameters ParameterKey=BucketName,ParameterValue=my-bucket
echo "Stack 4 created"
CloudFormation 各種サービスに向けて、yamlファイルに定義したテンプレートファイルを連続して実行します。
こうすることで手作業のボリュームが減り、ミスが格段に減ります。
上記の記載だと、ただコマンドを並べているだけなので、下記のように関数化することもできます。
関数化したコマンドを実行する。
#!/bin/bash
# AWS CLIコマンドを使用するためのプロファイル名を指定してください
profile="your-profile"
# CloudFormationスタックを作成する関数
create_stack() {
local stack_name=$1
local template_path=$2
echo "Creating Stack: $stack_name"
# スタックを作成
aws cloudformation create-stack --profile $profile --stack-name $stack_name --template-body file://$template_path
echo "Stack creation initiated for: $stack_name"
}
# スタック1を作成
create_stack "Stack1" "path/to/stack1.yaml"
# スタック2を作成
create_stack "Stack2" "path/to/stack2.yaml"
こんな感じでテンプレートをもとに、パイプラインと同時にCloudFormationを実行してあげると開発の手間がグッと減りそうですね。
終わりに
いかがだったでしょうか?
いろんなプログラミング言語がありますが、あまり注目されない言語は、開発時に本当に大事な言語だったりします。javascriptやPythonなど人気な言語もありますが、こういった言語にも注目する良い機会になると思います。少し勉強するだけでかなり身に付くので、少し勉強してみるのも良いかもしれません。