AWS CLIの振り返り ~EC2入門編~

#本記事の目的
JAWS-UG CLI オンラインハンズオンの復習として、ハンズオンで取り上げられたAWSサービスに関する用語と、使用したAWS CLI コマンドを箇条書きでまとめる。
今回はEC2入門編を取り上げる。

#主なAWSサービス用語
####インスタンス
物理的なハードウェア上に作成された、OSを搭載した仮想的なコンピューター環境。仮想マシンとほぼ同義。

####イメージ(AMI)
インスタンスの作成に必要なソフトウェア構成(OS、ミドルウェア、アプリケーション)を含むテンプレート。Amazon Machine Image の略。

####インスタンスタイプ
様々なスペックを持つCPU、メモリ、ストレージ、ネットワークキャパシティーを組み合わせたインスタンスの種類。

####ユーザデータ
インスタンス起動時に実行するスクリプト。

####セキュリティグループ
インスタンスが通信する際のトラフィックを制御する仮想ファイアーウォール。


#主なAWS CLI コマンド一覧
####デフォルトVPCの作成
```
aws ec2 create-default-vpc
```

####VPCの詳細表示
```
aws ec2 describe-vpcs \
  --filters ${FILTER_CONDITION}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--filters|フィルタリング条件|任意|"`Name=isDefault,Values=true`"を指定する事で、デフォルトVPCを表示する。|

####VPCの削除
```
aws ec2 delete-vpc \
  --vpc-id ${EC2_VPC_ID}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--vpc-id|VPC ID|必須||

####イメージの詳細表示
```
aws ec2 describe-images \
  --filters ${FILTER_CONDITION}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--filters|フィルタリング条件|任意|"`Name=name,Values=<イメージ名>`"を指定する事で、特定のイメージを表示する。|

####EC2インスタンスの起動
```
aws ec2 run-instances \
  --image-id ${EC2_INSTANCE_IMAGE_ID} \
  --instance-type ${EC2_INSTANCE_TYPE} \
  --tag-specifications ${STRING_TAG_CONF_INSTANCE} \
  --user-data file://${FILE_USER_DATA} \
  --associate-public-ip-address
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--image-id|イメージID|任意|特定のイメージを用いてインスタンスを作成する。|
|--instance-type|インスタンスタイプ|任意|特定のインスタンスタイプを用いてインスタンスを作成する。|
|--tag-specifications|タグ情報|任意|"`ResourceType=instance,Tags=[{Key=<タグのキー名>,Value=<タグの値>}]`"を指定する事で、特定のタグのキーと値を持つインスタンスを作成する。|
|--user-data|file://<ユーザデータのファイルパス>|任意|特定のユーザデータを使用してインスタンスを作成する。|
|--associate-public-ip-address|N/A|任意|特定のパブリックIPが割り当てられたインスタンスを作成する。|

####EC2インスタンスの詳細表示
```
aws ec2 describe-instances \
  --filters ${FILTER_CONDITION}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--filters|フィルタリング条件|任意|"`Name=tag-key,Values=<タグのキー名>　Name=tag-value,Values=<タグの値>`"を指定する事で、特定のタグのキーと値を持つインスタンスを表示する。"`Name=instance-state-name,Values=running`"を指定する事で、起動状態のインスタンスを表示する。|

####EC2インスタンスの終了
```
aws ec2 terminate-instances \
  --instance-ids ${ARRAY_EC2_INSTANCE_IDS}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--instance-ids|インスタンスID|必須||

####セキュリティグループへのインバウンドルール認証
```
aws ec2 authorize-security-group-ingress \
  --group-name ${EC2_SECURITY_GROUP_NAME} \
  --protocol ${EC2_SECURITY_GROUP_RULE_PROTOCOL} \
  --port ${EC2_SECURITY_GROUP_RULE_PORT} \
  --cidr ${EC2_SECURITY_GROUP_RULE_CIDR} \
  --tag-specifications ${STRING_EC2_EC2_SECURITY_GROUP_RULE_TAG}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--group-name|セキュリティグループ名|任意|特定のセキュリティグループに対するインバウンドルールを追加する。|
|--protocol|プロトコル名|任意|特定のプロトコルをに対応するインバウンドルールを追加する。|
|--port|ポート番号|任意|特定のポート番号に対応するインバウンドルールを追加する。|
|--cidr|IPアドレス範囲|任意|特定のIPアドレス範囲(x.x.x.x/x)に対応するインバウンドルールを追加する。|
|--tag-specifications|タグ情報|任意|"`ResourceType=security-group-rule,Tags=[{Key=<タグのキー名>,Value=<タグの値>}]`"を指定する事で、特定のタグのキーと値を持つインスタンスを作成する。|

####セキュリティグループの詳細表示
```
aws ec2 describe-security-groups \
  --filters ${FILTER_CONDITION}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--filters|フィルタリング条件|任意|"`Name=vpc-id,Values=<VPC ID>`"を指定する事で、特定のVPCに属するセキュリティグループを表示する。"`Name=group-name,Values=<セキュリティグループ名>`"を指定する事で、特定のセキュリティグループを表示する。"`Name=ip-permission.protocol,Values=<プロトコル名>`"を指定する事で、特定のプロトコルに対応するインバウンドルールが含まれるセキュリティグループを表示する。"`Name=ip-permission.to-port,Values=<ポート番号>`"を指定する事で、特定のポート番号に対応するインバウンドルールが含まれるセキュリティグループを表示する。"`ip-permission.cidr,Values=<IPアドレス範囲(x.x.x.x/x)>`"を指定する事で、特定のIPアドレス範囲に対応するインバウンドルールが含まれるセキュリティグループを表示する。|

####セキュリティグループのインバウンドルール削除
```
aws ec2 revoke-security-group-ingress \
  --group-id ${EC2_SECURITY_GROUP_ID} \
  --security-group-rule-ids ${ARRAY_EC2_SECURITY_GROUP_RULE_IDS}
```
|オプション|引数|必須/任意|備考|
|---|---|---|---|
|--group-id|セキュリティグループID|必須||
|--security-group-rule-ids|セキュリティグループルールID|必須||

#参考文献
- AWSCLIコマンドリファレンス:[EC2](https://docs.aws.amazon.com/cli/latest/reference/ec2/)
- JAWS-UG CLI専門支部：[ハンズオン(簡易版): EC2入門](http://prototype-handson-cli.s3-website-ap-northeast-1.amazonaws.com/handson_light-aws_service/handson_light-aws_service-ec2-getting_started/index.html)