AWSでお手軽に遊び場(VPC)をつくりたい

MYJLab Advent Calendar 2021 5日目の記事を担当するのぶです。
昨日の[@kanekom](https://qiita.com/kanekom/items/8e151a581fb7d07abad7)さんの記事は、pythonのfor文の言語仕様についてでした。
[MYJLab Advent Calendar 2021](https://qiita.com/advent-calendar/2021/myjlab)の5日目はAWS CLIを使ってVPCを簡単に建ててみようとおもいます。

# 1. はじめに

- 秘密鍵もVPCもEC2も簡単につくってくれるシェルスクリプトを作成したよ。
- AWS CLI のコマンドを列挙してるだけだよ。
- 設定ファイルにネットワークに関するパラメータを埋めて、順番にスクリプトを実行するだけだよ。
- うっかりさん向けだよ。



私はVPCを立てようとするときにいつもどこかの設定をし忘れて

「インスタンスに繋がらないんだけどぉ！！！！」

って叫んでいるので、今回はAWS CLIとシェルスクリプトを用いて簡単にVPCを構築できるようにしました。

初期のディレクトリ構造は次の画像のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735845/0cd07cb8-db48-eec6-efa8-c0cc94fe12d2.png)




この記事で作るものはこの図のとおりです。
![adventCalendar.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735845/6a8a02b5-432a-b3b1-4377-8945bec79051.jpeg)

~~VPCだけだと疎通確認がとれないので、ついでにwebサーバもつくれるようにしました。~~
今は疎通確認がとれるサービスがあるみたいですね。。笑
https://aws.amazon.com/jp/blogs/news/new-vpc-insights-analyzes-reachability-and-visibility-in-vpcs/

今回のスクリプトはGithubに載せてあるのでよかったら使ってみてください。

https://github.com/nobuyaaa/easy_built_vpc.git


## 環境
OS: WSL2(Ubuntu20.04)
必要なもの: jq, AWS CLI, awsアカウント

上の2つのインストール方法については次に挙げる記事を参考にしてください。

jqコマンドのインストール方法:

https://stedolan.github.io/jq/download/

AWS CLIのインストール方法:

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html

## 3. vpcのネットワーク設定を書き込む
項目の説明をすると次の通りです。

```conf/vpc.conf
AVAILABILITY_ZONE='アベイラビリティゾーン'
VPC_CIDR_BLOCK='VPCのサイダーブロック'
SUBNET_CIDR_BLOCK='サブネットのサイダーブロック'
VPC_NAME='VPC名'
SECURITY_GROUP_DESCRIPTION='セキュリティグループの説明'
```

今回私はこんな感じに設定しました。
実際はもっとIPアドレスを少なくしてもいいと思いますが、遊び場なので多めに確保しておきます。


```conf/vpc.conf
AVAILABILITY_ZONE='ap-northeast-1a'
VPC_CIDR_BLOCK='192.168.10.0/27'
SUBNET_CIDR_BLOCK='192.168.10.0/28'
VPC_NAME='adventcalendar'
SECURITY_GROUP_DESCRIPTION='web-server'
```

## 3. EC2の設定を書き込む
無料枠で使いたい人はこのままで大丈夫です、amiはamazon linux2を指定しています。他のを使いたい方は[公式のLinux/ AMI の検索](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/finding-an-ami.html)を参考にしてください。

```conf/ec2_conf.sh
. ./conf/key.conf

EC2_IMAGE_ID='ami-0218d08a1f9dac831'
EC2_INSTANCE_TYPE='t2.micro'
KEY_NAME=$KEYNAME

```

## 4. 秘密鍵の生成
conf/key.confに秘密鍵の名前を英字で入力してください

```conf/key.conf
KEYNAME='Name'
```

設定できたら次のコマンドで秘密鍵を生成します。

```
sh key_create.sh
```

するとconfディレクトリの中に秘密鍵が生成されます。
(xxxxとなっているのは伏せているだけです。実際はconf/key.confで指定した名前になっているはずです。)

	
adventCalendar
├── conf
│ ├── xxxx.pem
│ ├── ec2_conf.sh
│ ├── key.conf
│ └── vpc.conf
├── delete.sh
├── ec2_create.sh
├── key_create.sh
├── lib
│ └── func.sh
├── ssh.sh
└── vpc_create.sh

2 directories, 10 files

## 5. VPCの作成
いよいよ、VPCをつくっていきます。
vpc_create.shを実行してください。

```
sh vpc_create.sh
```

するとjsonでレスポンスが返ってくるはずです。
もし、エラーが返ってきた場合は、conf/vpc.confのネットワーク設定が間違っているということなので、conf/vpc.confを見直しましょう。

## 6. EC2の作成
ec2_create.shを実行してください。

```
sh ec2_create.sh
```

ここでEC2コンソールを見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735845/655471be-a1b9-6eca-56b7-de96c2dcc4c2.png)

このようにインスタンスが生成されていれば成功です。

## 7. sshでインスタンスに入る
ssh.shを実行しましょう。

```
sh ssh.sh
```

そうすると、
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
と聞かれるので
yes
とタイプしEnterを押して先に進みましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735845/afb04001-a08a-6a43-da48-fdc484b0bb7f.png)


このような画面になれば成功です。


## お片付け
不要になったときも簡単に削除できるようにしました。（初期状態時のみですが）
delete.shを実行するだけです

```
sh delete.sh
```
すこし時間がかかるのは、意図的なので心配しないでください。
インスタンスが削除されるまで待つ必要があるからです。

最後にちゃんと全部消えてるかどうか、AWSのコンソールで確認してくださいね。
インスタンスとVPCが消えてればおそらく大丈夫だと思います。

いろいろ弄った後でも、
1. EC2
2. VPC
の順で削除すれば消せるはずです。



## おわりに
AWS CLIとシェルスクリプトを用いて簡単にローカルからつながるVPCとEC2を作成できました。
これで今後はVPCのネットワーク設定で悩まされることはなくなりそうです、よかったよかった。


なお、それぞれの名前については、
"VPCの名前-awsのサービス名"
となっています、確認してみてください。


ここまで読んでくださった方、ありがとうございました。
本記事はこれで終了です、お疲れ様でした。


## 参考記事

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-subnets-commands-example.html

https://genzouw.com/entry/2019/03/04/123533/1077/

https://www.isoroot.jp/blog/3188/

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/finding-an-ami.html