AWS Cliメモ

シェルスクリプトで使ったものをそのまま引用しているので
以下$のついてる変数部分は自分用に変えてください。

# EC2
・インスタンスの作成

```
aws ec2 run-instances --image-id $IMAGE_ID --security-groups $SECURITY_GROUP --instance-type $INSTANCE_TYPE --region $REGION --count 1 --key-name $KEY_NAME
```

・インスタンスの起動

```
aws ec2 start-instances --instance-ids $INSTANCE_ID --region $REGION
```

・インスタンスの停止

```
aws ec2 stop-instances --instance-ids $INSTANCE_ID --region $REGION
```

・インスタンスタイプ変更

```
aws ec2 modify-instance-attribute --instance-id $INSTANCE_ID --region $REGION --attribute instanceType --value $NEW_INSTANCE_TYPE
```

・インスタンスを作成し、そのインスタンスidを取得

```
aws ec2 run-instances --image-id $IMAGE_ID --security-groups $SECURITY_GROUP --instance-type $INSTANCE_TYPE --region $REGION --count 1 --key-name $KEY_NAME | jq -r .Instances[].InstanceId
```

・インスタンスのpublicIP取得

```
aws ec2 describe-instances --instance-id $INSTANCE_ID --region $REGION | jq -r .Reservations[].Instances[].PublicIpAddress
```

・インスタンスにタグを追加

```
aws ec2 create-tags --resources $INSTANCE_ID --tag Key=$TAG_NAME,Value=$TAG_VALUE --region $REGION
```

・タグ名に一致するインスタンスのidを取得

```
aws ec2 describe-instances --region $REGION --filter "Name=tag:$TAG_NAME,Values=$TAG_VALUE" "Name=tag:$ANOTHER_TAG_NAME,Values=$ANOTHER_TAG_VALUE" | jq -r .Reservations[].Instances[].InstanceId
```

・インスタンスのstateを取得

```
aws ec2 describe-instances --instance-id $INSTANCE_ID --region $REGION | jq -r '.Reservations[].Instances[].State.Name'
```

・stateがrunningのインスタンスのID取得

```
aws ec2 describe-instances --region $REGION --filters "Name=instance-state-name,Values=running" | jq '.Reservations[].Instances[].InstanceId'
```

・ElasticIPの割り当て

```
aws ec2 allocate-address --region $REGION
```

・ElasticIPの割り当て & 関連付け

```
ALLOCATION_ID=$(aws ec2 allocate-address --region $REGION | jq -r .AllocationId)
aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOCATION_ID --region $REGION
```

# ELB
・ELBに追加されているインスタンスのID取得

```
aws elb describe-instance-health --load-balancer-name $ELB_NAME --region $REGION | jq -r .InstanceStates[].InstanceId
```

・ELBにインスタンスを追加

```
aws elb register-instances-with-load-balancer --load-balancer-name $ELB_NAME --region $REGION --instances $INSTANCE_ID
```

・ELBからインスタンス削除

```
aws elb deregister-instances-from-load-balancer --load-balancer-name $ELB_NAME --region $REGION --instances $INSTANCE_ID
```

# Route53

・レコードの作成（Aレコード）

```
# ゾーンIDの取得
ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name $DOMAIN --max-items 1 | jq -r '.HostedZones[] | .Id')
# ゾーン ID から余計なプレフィックスを除去
ZONE_ID=${ZONE_ID##*/}
cat <<EOT > /tmp/recordset.json
{
  "Comment": "create A record",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "${DOMAIN}",
        "Type": "A",
        "TTL": 300 ,
        "ResourceRecords": [
         {
           "Value": "${IP_ADDRESS}"
         }
        ]
      }
    }
  ]
}
EOT
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch file:///tmp/recordset.json
rm -rf /tmp/recordset.json
```

・レコードの作成（Alias）

```
# ゾーンIDの取得
ZONE_ID=$(aws route53 list-hosted-zones-by-name --dns-name $DOMAIN --max-items 1 | jq -r '.HostedZones[] | .Id')
# ゾーン ID から余計なプレフィックスを除去
ZONE_ID=${ZONE_ID##*/}
cat <<EOT > /tmp/alias_recordset.json
{
  "Comment": "create alias A record",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "${ALIAS_DOMAIN}",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "${ZONE_ID}",
          "DNSName": "${ALIAS_TARGET}",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
EOT
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch file:///tmp/alias_recordset.json
rm -rf /tmp/alias_recordset.json
```


## 番外編
・指定したタグを持つインスタンスを全て起動するワンライナー

```
aws ec2 describe-instances --region $REGION --filter "Name=tag:$TAG_NAME,Values=$TAG_VALUE" | jq -r .Reservations[].Instances[].InstanceId | xargs aws ec2 start-instances --region $REGION --instance-ids
```

## 参考
[AWS CLIを使ってEC2インスタンスの情報を取得する](http://qiita.com/toshiro3/items/37821bdcc50c8b6d06dc)
[AWS Cli自分用Tips](http://qiita.com/takachan/items/421928dc61c51af97fb1)