【メモ】EC2のIPアドレスを一覧で取りたいのでWSLで取得してみた！

こんにちわ！maijunです。

EC2のIPアドレスを一覧で取得したいってありません？
今回スプレッドシートに貼り付ける必要が出てきたので手順メモです

# 経緯
稀に授業の一環でサーバを複数準備し配布する必要がありますが、SSHで接続する為にサーバのIPアドレスをリスト化するのが面倒い。

AWS CLIでPublicIpAddressを抜き出したら楽やんと気づいて作業する事にしました。


# 環境
AWS CLIが入っていれば良いのですが、ちょうど自宅マシンにインストールしていない。
自宅WindowsにはAWS CLI入れたくない。

どうしよっかな～と思ったのですが、簡単に環境を捨てられるWSL側に入れることにしました。

```shell
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
```

# 手順
公式ドキュメント見ながら作業です。
WSLに入れる必要があるのでLinux版の説明資料を見ます。

[Linux での AWS CLI バージョン 2 のインストール、更新、アンインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html)

## AWS CLIのインストール
ドキュメントどおりにコマンドを叩いていきます。

```shell
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
```
取得したzipファイルをunzipで解凍しようとしたら「無い！」と叱られたのでインストールします。

```shell
$ sudo apt install unzip
```
これで解凍できるようになったので、溶かしてインストールです。

```shell
$ unzip awscliv2.zip
$ sudo ./aws/install
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.0.54 Python/3.7.3 Linux/4.19.104-microsoft-standard exe/x86_64.ubuntu.20
```
ちゃんと入ってますね。良き！

## AWSへの接続情報を設定する
AWS CLIで諸々作業する際には、アクセスキーを用いて繋げる必要があります。
aws configureで必要情報を入力していきます。

Access KeyやSecret Access KeyはIAMで取得しときます。

```shell
$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

今回は東京リージョンにあるEC2の情報をJSON形式で取得する事にしました。
ちなみに接続情報は.aws内に保管されます。

```shell
$ cat .aws/config
$ cat .aws/credentials
```

適宜確認ください。


## jqをインストールする。
json形式でインスタンス情報を取得しますが、色々整形したいのでjqをインストールします。

[command-line JSON processor -jq-](https://stedolan.github.io/jq/)

```shell
$ sudo apt install jq
```

## インスタンス情報取得するには？
AWS CLIも色々できてコマンドも多く、私はすべて覚えられません。
コマンドラインリファレンスで調べます。
[AWS CLI Command Refarence](https://docs.aws.amazon.com/cli/latest/reference/)

今回はec2 describe-instancesで取得できそうなので試します。

```shell
$ aws ec2 describe-instances
{
    "Reservations": []
}
```
お！jsqon形式で帰ってきた。
インスタンス立ち上げたら取得できそうです。


## 配列指定して取得
インスタンス立ち上げて必要情報を取得していきます。

```shell
$ aws ec2 describe-instances | jq '.Reservations.Instances.PublicIpAddress'
jq: error (at <stdin>:127): Cannot index array with string "Instances"
```
あ。。配列に入ってるんだった。やり直しです。

```shell
$ aws ec2 describe-instances | jq '.Reservations[].Instances[].PublicIpAddress' 
"54.178.62.204"
```

わーいわーい。
これで仕事準備も楽にできる

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">結局素のWindowsではなくWSLにAWS CLI入れて必要な情報を抜き出せた。月曜日これで楽できるわ！<br><br>メモとして後でQiitaにも手順とか載せておこうっと♪ <a href="https://t.co/9FEcsuZnYW">pic.twitter.com/9FEcsuZnYW</a></p>&mdash; jun kubotamai@まいじゅん☆AWSをもっと頑張るマン (@maijun2) <a href="https://twitter.com/maijun2/status/1312385121845043200?ref_src=twsrc%5Etfw">October 3, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


#まとめ
あとはIPアドレス一覧をスプレッドシートに貼り付けたら完了です。
マネジメントコンソールでぽちぽちしながら調べなくて良いので楽ですな。

なおawsコマンドですがhelp叩きながら調べるのも良いのですが、リファレンス見たほうが使用例も載っているので私は好きです。


[Linux での AWS CLI バージョン 2 のインストール、更新、アンインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html)
[command-line JSON processor -jq-](https://stedolan.github.io/jq/)
[AWS CLI Command Refarence](https://docs.aws.amazon.com/cli/latest/reference/)