こんばんは
神谷です。投稿は3回め。
ここまで初心者レベルの投稿ばかりしてきましたが、今回も初心者っぽいやつ。
まぁAWSのお仕事ってほぼaws cliとExcel VBAマクロで作業ですおね。
ほとんど自動化出来るお仕事なんですから、ほとんど自動化しちゃいましょう。
インフラのお仕事でよくやる「IDのリスト化」
サブネット名/サブネットID
とか
セキュリティグループ名/セキュリティグループID
とかのリスト、よく作りますよね。僕なんかそういうの自動化でやらなきゃバカだと思うんですけど、周りの人、ほとんど根性でやってるんですよね。人力なんて遅いしミスるしいい事一つも無いよ。
という事で、パパっとシェルを作ってあげたので、公開してみます。
自分用には、もちょっと便利な機能とか付けてますが、作った人じゃないと判らない仕組みは公開しない方がいいっしょ。
サブネットIDリスト化シェル
#!/bin/bash
sids=`aws ec2 describe-subnets --query 'Subnets[*].Tags[?Key==\`Name\`].Value' --output text`
for sid in ${sids[@]}; do
echo ${sid} " " `aws ec2 describe-subnets --filters Name=tag-value,Values=${sid} --query 'Subnets[*].SubnetId' --output text`
done
結果
SUBNETA sub-hogehoge1
SUBNETB sub-hogehoge2
セキュリティグループIDリスト化シェル
#!/bin/bash
sgs=`aws ec2 describe-security-groups --query 'SecurityGroups[*].Tags[?Key==\`Name\`].Value' --output text`
for sg in ${sgs[@]}; do
echo ${sg} " " `aws ec2 describe-security-groups --filters Name=tag-value,Values=${sg} --query 'SecurityGroups[*].GroupId' --output text`
done
結果
SecurityGroupA sg-hogehoge1
SecurityGroupB sg-hogehoge2
SecurityGroupC sg-hogehoge3
AMI-IDリスト化シェル
aws ec2 describe-images --owner (AWSアカウントID) --query 'Images[].[Name,ImageId]' --output text
……と。他にもリスト化すべき何かあるかもだけど、上のを真似て自分でちゃちゃっと作ってみて欲しい。
リクエストしてくれたら作ってもいい。責任は負わないけれど。
特定のリソースだけをリスト化しよう
特定のサブネット以外のサブネットIDは取りたくないとか、そういう事あります。
例えば、AWS上ではセキュリティグループ100個ぐらいあるんだけど、今回の仕事ではうち5個だけをドキュメント化します、とか。
まず、100個のうち、どれをドキュメント化するのかはエクセルで来るでしょう。それをテキストファイルに入れましょう。コピペでちゃちゃっとね。
subnetid-list.txt
subnetNameAWS01Web1
subnetNameAWS02Web2
subnetNameAWS04Web1
subnetNameAWS10Web1
subnetNameAWS11Web4
な、すんげぇ紛らわしい。コレを1つ1つ手で指定して値を取得してコピペを繰り返すヤツは絶対に「間違えるヤツ」だ。パっと見て「自動化しなきゃダメな作業だな」って思いましょうよ。ねぇ。
実際、上のシェルをちょっと改造すれば、特定のリストだけをリスト化できます。
サブネットIDリスト化シェル(特定のだけバージョン)
#!/bin/bash
sids=`cat subnetid-list.txt`
for sid in ${sids[@]}; do
echo ${sid} " " `aws ec2 describe-subnets --filters Name=tag-value,Values=${sid} --query 'Subnets[*].SubnetId' --output text`
done
結果
subnetNameAWS01Web1 sub-hogehoge1
subnetNameAWS02Web2 sub-hogehoge2
subnetNameAWS04Web1 sub-hogehoge3
subnetNameAWS10Web1 sub-hogehoge4
subnetNameAWS11Web4 sub-hogehoge5
最後に
上のシェル、改良すべき点はまだまだいっぱいあります。
凝りに凝りに凝りまくれます。いくらでも。最終的に、実行するだけで、仕様書に「値をコピー」するだけで全部ドキュメントできちゃうぐらい凝ったシェルも作れますよー、ええ。Rubyとかエクセル触れるので、PowerShell+Rubyとか使えば、シェル実行するだけで勝手にパラメータシート全部作っちゃうぐらい出来ます。
ただ、フツーはやりません。作った方が早いから。
サーバ200台以上分のパラメータシートを作れって言われたら、まぁ、プログラム作る方が楽だから、そういうの作っちゃうかもですね。
どっからどこまで自動化して、どっからどこまで根性でやるのか。まぁ、プログラム組む速さによりますね。
(自分は、多少、プログラムの方が時間かかりそうでも、正確性を期してシェル化する事が多いですが)