【小ネタ】AWS環境用作業手順書に記載したコマンドを少し楽にする方法

AWS

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どういう意味か?

インスタンスIDやボリュームIDなどの英数字の文字を扱うことが非常に多いです。
作業手順書を作成する中で長いインスタンスIDを手動コピーはいけてなく、コピペミスによって
「そのコマンドは違うよ」と言ったメッセージが出るだけでMPが削られる気持ちになります。 小ネタとばかりにAWS環境の手順書を作成する際に少し楽になる方法をご紹介します。

簡単に1行で書くと?

ずばり、シェル変数にインスタンスIDを入れ込むことで後々のコマンドを実行すれば良いと思います。

具体的には?

  • EC2にログインする describe-instancesをフィルタ指定することでインスタンスを絞り、
    jqでDNS名のみをシェル変数に入れてsshしてます。
$ EC2_DNS=`aws ec2 describe-instances --filters "Name=tag-key,Values=Name,Name=tag-value,Values=<タグ名>" | ¥
jq -r '.Reservations[].Instances[] | .PublicDnsName'`

$ ssh -i <キーペア名> -l <ユーザー名> ${EC2_DNS}
  • EC2にタグ付与 EC2インスタンスへタグを付与します。
$ EC2_DNS=`aws ec2 describe-instances --filters "Name=tag-key,Values=Name,Name=tag-value,Values=<タグ名>" | ¥
jq -r '.Reservations[].Instances[] | .PublicDnsName'`

$ aws ec2 create-tags --resources ${EC2_ID} --tags Key=Name,Value=<タグ名>
  • ボリューム作成 ボリューム追加を既存インスタンスにアタッチしてみます。
$ aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=${EC2_ID}"

$ ADD_DK_AZ=`aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=${EC2_ID}" | ¥
jq -r '.Volumes[].AvailabilityZone'`

$ ADD_DK_TYPE=`aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=${EC2_ID}" | ¥
jq -r '.Volumes[].VolumeType'`

$ aws ec2 create-volume --size 10 --availability-zone ${ADD_DK_AZ} --volume-type ${ADD_DK_TYPE}

$ ADD_VOL_ID=`aws ec2 describe-volumes --filter "Name=status,Values=available"| ¥
jq -r '.Volumes[].VolumeId'`

$ aws ec2 attach-volume --volume-id ${ADD_VOL_ID} --instance-id ${EC2_ID} --device /dev/sdf

$ aws ec2 describe-volumes --volume-id ${ADD_VOL_ID}

最後に

このような形で少しでも作業者が手を動かすだけの手順に近づけられると良いかなと思いました。
レビュー、実作業、トラブルで切り戻す時も作業手順書があることで大きく変わりますし、
決め打ちの手順書では後々の手順書メンテナンスで漏れが発生するのでご利用頂ければと思います。

AWS Cloud Roadshow 2017 福岡