2016年1月31日日曜日

[aws-cli] AMI 関連で、よく使うコマンド


[aws-cli] EC2 関連で、よく使うコマンド の続きです。

今回は、AMI 関連で、よく使うコマンドのメモを記載します。


AMIを作成する


以下の例では、インスタンスIDを指定して、AMIを作成しています。
"--reboot" をつけているので、インスタンスが起動中であればリブートされます。
instance_id=i-xxxx
ami_nm="AMI_node01_`date '+%Y%m%d'`"

aws ec2 create-image --instance-id ${instance_id} \
    --name "${ami_nm}" \
    --description "system backup" \
    --reboot \
    --output table


AMI名でAMIを検索する


以下の例では、AMI名でAMIを探しています。
jqコマンドを使って、実行結果からイメージIDとスナップショットIDを取得しています。
aws ec2 describe-images \
    --filters "Name=name,Values=${ami_nm}" \
    --output json > ${TMP_DIR}/$$.ami_attr

AMI_ID=`cat ${TMP_DIR}/$$.ami_attr|jq -r ".Images[0].ImageId"`
SNAP_ID1=`cat ${TMP_DIR}/$$.ami_attr|jq -r ".Images[0].BlockDeviceMappings[0].Ebs.SnapshotId"`
SNAP_ID2=`cat ${TMP_DIR}/$$.ami_attr|jq -r ".Images[0].BlockDeviceMappings[1].Ebs.SnapshotId"`


AMIにタグを設定する


以下の例では、AMIと、AMIに紐ついてるスナップショットにタグをつけています。
aws ec2 create-tags \
      --resources ${AMI_ID} \
      --tags "Key=Name,Value=${ami_nm}" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}"

aws ec2 create-tags \
      --resources ${SNAP_ID1} \
      --tags "Key=Name,Value=${ami_nm} sda" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}"

aws ec2 create-tags \
      --resources ${SNAP_ID2} \
      --tags "Key=Name,Value=${ami_nm} sdf" "Key=System,Value=${TAG_SYSTEM}" "Key=Env,Value=${TAG_ENV}"



AMIを削除する


以下の例では、AMIと、AMIに紐つくスナップショットを削除してます。
aws ec2 deregister-image --image-id ${AMI_ID} --output table
aws ec2 delete-snapshot --snapshot-id ${SNAP_ID1} --output table
aws ec2 delete-snapshot --snapshot-id ${SNAP_ID2} --output table








2016年1月30日土曜日

[aws-cli] ec2 関連で、よく使うコマンド


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





2016年1月21日木曜日

[CentOS7] Pacemaker をユニキャストでセットアップする


CentOS7のPacemakerをユニキャストで使用したい場合は、セットアップ時に以下のように指定できます。

pcs cluster setup --start --name testcluster node1 node2 --transport udpu

赤字部分がユニキャストの指定です。
デフォルトが、マルチキャストかユニキャストのどっちか忘れた場合は、明示的に指定したほうがいい。


AWSでは、マルチキャストが使用できないのでユニキャストを使用します。

また、AWSでは stonith が使えそうにないので、2ノードのクラスタではなく3ノードで クラスタを組んで、クォーラム機能でスプリットブレイン対策をしたほうが良さそう。