aws-cli の使い方を忘れて、いつも調べ直すので、EC2関連でよく使うコマンドをメモしておこうと思います。
シェルで使うことを前提に記載しています。
aws-cli は "--output" で実行結果の出力形式を変えられますが、個人的には以下のような使い分けをしています。
table
テーブル形式で実行結果を表示します。
目で見て確認したり、--filters で使用するパラメータ名を調べたいときは "table" を指定しています。
text
テキスト形式で実行結果を表示します。
実行結果を "awk" や "grep" などのOS標準コマンドで処理したい場合は "text" を指定しています。
json
JSON形式で実行結果を表示します。
jqコマンドを使用して特定のパラメータ値(インスタンスIDとか)を取得したい場合は "json" を指定しています。
固定IPアドレスのEC2インスタンスを作成する
以下の例では、固定IPアドレスをもったEC2インスタンスを作成しています。
複数のセキュリティグループに所属するようにし、「インスタンス削除の保護機能」を有効にしています。
複数のセキュリティグループを指定したい場合は space で区切ります。
AMI_ID=ami-xxxx SG_ID="sg-xxxx sg-yyyy" INSTANCE_TYPE=t2.micro SUBNET_ID=subnet-xxxx IP=10.0.0.11 AZ=ap-northeast-1c KEY_NAME=keypaire01 aws ec2 run-instances \ --image-id ${AMI_ID} \ --security-group-ids ${SG_ID} \ --instance-type ${INSTANCE_TYPE} \ --subnet-id ${SUBNET_ID} \ --disable-api-termination \ --private-ip-address ${IP} \ --placement AvailabilityZone=${AZ},GroupName=,Tenancy=default \ --key-name ${KEY_NAME} \ --count 1 \ --output table
IPアドレスでEC2インスタンスを検索する
以下の例では、プライベートIPアドレスでEC2インスタンスを検索し、JSON形式で実行結果を取得している。
また、jqコマンドを使用して、実行結果からインスタンスIDなどを抽出している。
ip=10.0.0.11 aws ec2 describe-instances \ --filters "Name=private-ip-address,Values=${ip}" \ --output json \ > ${TMP_DIR}/$$.ec2_attr instance_id=`cat ${TMP_DIR}/$$.ec2_attr | jq -r ".Reservations[0].Instances[0].InstanceId"` instance_status=`cat ${TMP_DIR}/$$.ec2_attr | jq -r ".Reservations[0].Instances[0].State.Name"` vol_id1=`cat ${TMP_DIR}/$$.ec2_attr | jq -r ".Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId"` vol_id2=`cat ${TMP_DIR}/$$.ec2_attr | jq -r ".Reservations[0].Instances[0].BlockDeviceMappings[1].Ebs.VolumeId"` nic_id1=`cat ${TMP_DIR}/$$.ec2_attr | jq -r ".Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId"`
タグを設定する
以下の例では、EC2インスタンス、ボリュームなどにタグを設定しています。
複数のタグを設定する場合は、spaceで区切ります。
host=node01 TAG_SYSTEM=website TAG_ENV=Develop aws ec2 create-tags \ --resources ${instance_id} \ --tags "Key=Name,Value=${host}" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}"" aws ec2 create-tags \ --resources ${vol_id1} \ --tags "Key=Name,Value=${host} sda" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}" aws ec2 create-tags \ --resources ${vol_id2} \ --tags "Key=Name,Value=${host} sdf" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}" aws ec2 create-tags \ --resources ${nic_id1} \ --tags "Key=Name,Value=${host} eth0" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}"
EC2インスタンスを削除する
以下の例では、インスタンスIDを指定して「削除保護機能」を無効にしてからEC2インスタンスを削除しています。
# 削除保護機能をOFF aws ec2 modify-instance-attribute --instance-id $instance_id --no-disable-api-termination --output table # インスタンス削除 aws ec2 terminate-instances --instance-ids $instance_id --output table
EC2インスタンスを機動/停止する
以下の例では、インスタンスIDを指定してEC2インスタンスを停止、機動しています。
# インスタンス停止 aws ec2 stop-instances --instance-ids $instance_id --output table # インスタンス機動 aws ec2 start-instances --instance-ids $instance_id --output table