【AWS】AWS CloudShellでAWS CLIを使用し、VPC等基本環境構築を試みました

#はじめに
待ち受けたAWS CloudShellが2020年年末にリリースされました！
個人は元々Azure側でCloudShellを利用したことがあり、その便利さに惹かれ、いつAWS側にも使えるのかと期待したところ、ようやくリリースされることとなりました！うれしいいいい！
>AWS CloudShell – Command-Line Access to AWS Resources
>https://aws.amazon.com/jp/blogs/aws/aws-cloudshell-command-line-access-to-aws-resources/

もちろんCloudFormationを使えば一番便利ですが、個人はAWS CLIを練習したいため、以前VPC等の基本ネットワーク環境を、スクリプト方式で作成したことがあり、今回公開したいと思います。
CloudShell上ですぐシェルを実行できることで、大変手間を省けることが出来ました。
またCloudShellは今後AWS CLIの練習にも便利！！

#スクリプト内容
スクリプトは下記のものをスクリプトで作成します。
・VPC
・サブネット
・セキュリティグループ
・インタネットゲートウェイ
・カスタムルートテーブル
・各タグ

#スクリプト
スクリプトは下記となります。

```
#!/bin/bash

#FILENAME:VPCネットワーク関連一括作成スクリプト
#SUBJECT:VPC,SUBNET,SG,IGW,TAG一括作成
#AUTHOR( ): HYJ
#DATE: 2021.01.07 AWS CLI版

#定義
VPC_CIDR="10.0.0.0/16"
VPC_TAG="【テスト用】開発環境VPC1"
PUBLIC_SUBNET1="10.0.10.0/24"
PUBLIC_SUBNET1_TAG="【テスト用】開発環境_パブリックサブネット1a"
PUBLIC_SUBNET2="10.0.11.0/24"
PUBLIC_SUBNET2_TAG="【テスト用】開発環境_パブリックサブネット1c"
PRIVATE_SUBNET1="10.0.50.0/24"
PRIVATE_SUBNET1_TAG="【テスト用】開発環境_プライベートサブネット1a"
PRIVATE_SUBNET2="10.0.51.0/24"
PRIVATE_SUBNET2_TAG="【テスト用】開発環境_プライベートサブネット1c"
EC2_SG="dev-ec2-sg"
EC2_SG_TAG="【テスト用】開発環境_EC2用SG"
ALB_SG="dev-alb-sg"
ALB_SG_TAG="【テスト用】開発環境_ALB用SG"
REGION="ap-northeast-1"
IGW_TAG="【テスト用】開発環境VPC1_IGW"
AZ_A="${REGION}a"
AZ_C="${REGION}c"
AZ_D="${REGION}d"

#VPC作成
aws ec2 create-vpc --cidr-block ${VPC_CIDR}

#上に作成されたVPCのIDをVPC_IDとして定義付ける
VPC_ID=`aws ec2 describe-vpcs --output text --query "Vpcs[].[VpcId,CidrBlock]" | sort | grep ${VPC_CIDR} | awk '{print $1}'`

#作成されたvpcにタグ命名する
aws ec2 create-tags --resources ${VPC_ID} --tags Key=Name,Value=${VPC_TAG}

#パブリックサブネット作成
aws ec2 create-subnet --vpc-id ${VPC_ID} --cidr-block ${PUBLIC_SUBNET1} --availability-zone ${AZ_A}
aws ec2 create-subnet --vpc-id ${VPC_ID} --cidr-block ${PUBLIC_SUBNET2} --availability-zone ${AZ_C}

#パブリックサブネットのIDを特定する
PUBLIC_SUBNET1_ID=`aws ec2 describe-subnets --output table --query 'Subnets[*].[SubnetId,CidrBlock]' --region ap-northeast-1 | grep ${PUBLIC_SUBNET1} | awk '{print $2,$4}' | awk '{print $1}'`
PUBLIC_SUBNET2_ID=`aws ec2 describe-subnets --output table --query 'Subnets[*].[SubnetId,CidrBlock]' --region ap-northeast-1 | grep ${PUBLIC_SUBNET2} | awk '{print $2,$4}' | awk '{print $1}'`

#パブリックサブネットにタグ付ける
aws ec2 create-tags --resources ${PUBLIC_SUBNET1_ID} --tags Key=Name,Value=${PUBLIC_SUBNET1_TAG}
aws ec2 create-tags --resources ${PUBLIC_SUBNET2_ID} --tags Key=Name,Value=${PUBLIC_SUBNET2_TAG}

#プライベートサブネット作成
aws ec2 create-subnet --vpc-id ${VPC_ID} --cidr-block ${PRIVATE_SUBNET1} --availability-zone ${AZ_A}
aws ec2 create-subnet --vpc-id ${VPC_ID} --cidr-block ${PRIVATE_SUBNET2} --availability-zone ${AZ_C}

#プライベートサブネットのIDを特定する
PRIVATE_SUBNET1_ID=`aws ec2 describe-subnets --output table --query 'Subnets[*].[SubnetId,CidrBlock]' --region ap-northeast-1 | grep ${PRIVATE_SUBNET1} | awk '{print $2,$4}' | awk '{print $1}'`
PRIVATE_SUBNET2_ID=`aws ec2 describe-subnets --output table --query 'Subnets[*].[SubnetId,CidrBlock]' --region ap-northeast-1 | grep ${PRIVATE_SUBNET2} | awk '{print $2,$4}' | awk '{print $1}'`

#プライベートサブネットにタグ付ける
aws ec2 create-tags --resources ${PRIVATE_SUBNET1_ID} --tags Key=Name,Value=${PRIVATE_SUBNET1_TAG}
aws ec2 create-tags --resources ${PRIVATE_SUBNET2_ID} --tags Key=Name,Value=${PRIVATE_SUBNET2_TAG}

#EC2セキュリティグループ作成
aws ec2 create-security-group --group-name ${EC2_SG} --description "${EC2_SG}" --vpc-id ${VPC_ID}

#EC2セキュリティグループのIDを定義する
EC2_SG_ID=`aws ec2 describe-security-groups --output table --query 'SecurityGroups[*].[GroupName,GroupId]' --region ap-northeast-1 | grep ${EC2_SG} | awk '{print $2,$4}' | awk '{print $2}'`

#EC2セキュリティグループにタグ付ける
aws ec2 create-tags --resources ${EC2_SG_ID} --tags Key=Name,Value=${EC2_SG_TAG}

#ALBセキュリティグループ作成
aws ec2 create-security-group --group-name ${ALB_SG} --description "${ALB_SG}" --vpc-id ${VPC_ID}

#ALBセキュリティグループのIDを定義する
ALB_SG_ID=`aws ec2 describe-security-groups --output table --query 'SecurityGroups[*].[GroupName,GroupId]' --region ap-northeast-1 | grep ${ALB_SG} | awk '{print $2,$4}' | awk '{print $2}'`

#ALBセキュリティグループにタグ付ける
aws ec2 create-tags --resources ${ALB_SG_ID} --tags Key=Name,Value=${ALB_SG_TAG}

#インタネットゲートウェイを作成する
aws ec2 create-internet-gateway

#新規カスタムルートテーブルを作成する
aws ec2 create-route-table --vpc-id ${VPC_ID}
```

#最後に
AWS CLI を練習したい方に、役に立てればうれしいです！