Edited at

AWS cliでローカルからEC2の情報を取得してみる

最近、今更ながらAWSに入門して色々触ってます。

今回はAWS cliを使ってローカルからEC2の情報を取得するための手順をまとめました。


AWS cliとは

AWS公式によると、


AWS CLI は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。最小限の設定で、使い慣れたターミナルプログラムのコマンドプロンプトから、ブラウザベースの AWS マネジメントコンソール で提供される機能と同等の機能の使用を開始できます。


とのこと。

要は、コマンドライン上からAWSのサービスを使えるようにするヤツです。


セットアップ


AWS Command Line Interface をインストールする

下記の公式ドキュメントを参考に、自身のpcにAWS cliを扱えるようにする。

macOS で AWS Command Line Interface をインストールする

homebrew経由でもできる。

$ brew doctor

$ brew update
$ brew install awscli
$ aws --version
aws-cli/1.16.81 Python/2.7.10 Darwin/17.6.0 botocore/1.12.71


IAMのアクセスキーを発行する

自身のpcからAWSにアクセスしてリソースを取得するために、IAMのアクセスキーを発行する。

下記の公式ドキュメントを参考に、IAMのアクセスキーを発行する。

アクセスキーの管理 (コンソール)


pc側の設定

下記のコマンドを実行すると、アクセスキーなどを聞かれるので、先ほど取得した情報を入れる。

$ aws configure

(例)

$ aws configure

AWS Access Key ID [None]: xxxxx
AWS Secret Access Key [None]: xxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

上記のコマンドを実施すると、下記2つのファイルが作成される。


  • ~/.aws/credentials

  • ~/.aws/config

以上でローカルからAWSに対してアクセスできるようになる! :innocent:


jqコマンドのインストール

AWSからデータ取得した際のjsonをいい感じに整形してくれるヤツをインストールする。

$ brew doctor

$ brew update
$ brew install jq


AWSからデータ取得


EC2


コマンド

基本形はコレ

$ aws ec2 describe-instances

上記を実行するとこんな感じのjsonが返される。

データは超長い&不要なデータも含まれているので、以降でデータのフィルターやフォーマットを調整する。

{

"Reservations": [
{
"Instances": [
{
"Monitoring": {
"State": "enabled"
},
....

オプションでフィルターをつけてみる。

一つの設定に対して、Name=hoge, Values=fugaのセットで指定できる。

# 起動中のインスタンスだけ取得する

$ aws ec2 describe-instances --filter "Name=instance-state-name,Values=running"

# 起動中のインスタンスかつインスタンスサイズがt2.midiumのインスタンスだけを取得する
$ aws ec2 describe-instances --filter "Name=instance-state-name,Values=running, Name=instance-type,Values=t2.medium"

jqを使って取得した後のデータを整形してみる。

今回はInstanceId, InstanceType, PublicIpAddress, Placementだけ返すようにする。

$ aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" |

jq '.Reservations[].Instances[] |
{InstanceId, InstanceType, PublicIpAddress, Placement}'

返されるデータの例

{

"InstanceId": "i-xxxxxxxx",
"InstanceType": "m3.medium",
"PublicIpAddress": "0.0.0.0",
"Placement": {
"Tenancy": "default",
"GroupName": "Fuga",
"AvailabilityZone": "ap-northeast-1c"
}
}


所感

セットアップがかなり簡単だった。

今回はjson形式のデータが返ってくるところまでしかやってないけど、スクリプトとか組んで定期的にスプレッドシートの情報を更新するとかできそう。


参考情報


AWS公式リファレンス


AWS cli


jqコマンド