インスタンスメタデータ とは

## 勉強前イメージ

EC2の情報が入ったやつ？

## 調査

### インスタンスメタデータ とは

EC2のインスタンス内からのみアクセスが可能なインスタンスに関するデータです。
アクセスできるユーザであれば誰でも確認することが出来ます。

### アクセスしてみる

EC2インスタンスにログインして以下コマンドでURLにアクセスしてみます。
これを打つと、どんなデータが取得できるかのメタデータ一覧が取得できます。

`curl http://169.254.169.254/latest/meta-data/`

```
$ curl http://169.254.169.254/latest/meta-data
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
system
```

実際にメタデータを取得したのが以下です。
ローカルIPアドレスやインスタンスIDを取得することが出来ます。


```
$ curl http://169.254.169.254/latest/meta-data/local-ipv4
172.31.XXX.XXX
```

```
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-01234XXXXXXXXXXXX
```

### アクセスしてみる (ec2-metadataコマンド編)

ec2-metadata というコマンドからでもアクセスすることが出来ます。

```
$ ec2-metadata --help
ec2-metadata v0.1.2
Use to retrieve EC2 instance metadata from within a running EC2 instance. 
e.g. to retrieve instance id: ec2-metadata -i
                 to retrieve ami id: ec2-metadata -a
                 to get help: ec2-metadata --help
For more information on Amazon EC2 instance meta-data, refer to the documentation at
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

Usage: ec2-metadata <option>
Options:
--all                     Show all metadata information for this host (also default).
-a/--ami-id               The AMI ID used to launch this instance
-l/--ami-launch-index     The index of this instance in the reservation (per AMI).
-m/--ami-manifest-path    The manifest path of the AMI with which the instance was launched.
-n/--ancestor-ami-ids     The AMI IDs of any instances that were rebundled to create this AMI.
-b/--block-device-mapping Defines native device names to use when exposing virtual devices.
-i/--instance-id          The ID of this instance
-t/--instance-type        The type of instance to launch. For more information, see Instance Types.
-h/--local-hostname       The local hostname of the instance.
-o/--local-ipv4           Public IP address if launched with direct addressing; private IP address if launched with public addressing.
-k/--kernel-id            The ID of the kernel launched with this instance, if applicable.
-z/--availability-zone    The availability zone in which the instance launched. Same as placement
-c/--product-codes        Product codes associated with this instance.
-p/--public-hostname      The public hostname of the instance.
-v/--public-ipv4          NATted public IP Address
-u/--public-keys          Public keys. Only available if supplied at instance launch time
-r/--ramdisk-id           The ID of the RAM disk launched with this instance, if applicable.
-e/--reservation-id       ID of the reservation.
-s/--security-groups      Names of the security groups the instance is launched in. Only available if supplied at instance launch time
-d/--user-data            User-supplied data.Only available if supplied at instance launch time.
```


上記同様ローカルIPアドレスを取ってみます。

```
$ ec2-metadata -o
local-ipv4: 172.31.XXX.XXX
```

以下はインスタンスID

```
$ ec2-metadata -i
instance-id: i-01234XXXXXXXXXXXX
```

ちなみに、ec2-metadataコマンドはamazon linuxではデフォルトでインストールされていますが
CentOS等で使用する場合は別途パッケージが必要とのことです。

## 勉強後イメージ

そんなデータ見れるって知らなかった・・・！
自分の情報を元にAPIとか叩くとかするときに使えるかもしれない

## 参考

- [EC2のmeta-dataとuser-dataの使い方](https://oji-cloud.net/2019/09/22/post-3097/)
- [[小ネタ] EC2インスタンスメタデータを簡単に確認する](https://dev.classmethod.jp/articles/ec2-metadata-command/)