EC2のmeta-dataとuser-dataの使い方
Contents
概要
- EC2のインスタンスメタデータ(meta-data)およびユーザーデータ(user-data)は、インスタンス内からのみアクセス可能なインスタンスに関するデータです。
- インスタンスにアクセスできるユーザーなら誰でもそのメタデータおよびユーザーデータを参照できます。そのため、ユーザーデータに機密な情報を格納してはいけません。(例: user-dataにパスワードやSSHキー等を記載する)
基本的な使用方法
- インスタンスメタデータは実行中のインスタンスから下記IPアドレスにアクセスして取得します。すべてのメタデータがテキストとして返されます。
- http://169.254.169.254/latest/meta-data/
- このIPアドレス(169.254.169.254)は、リンクローカルアドレスです。リンクローカルアドレスはアドレスブロック 169.254.0.0/16で定義され、このアドレスはネットワークセグメントを超えてユニークであることが保証されていないため、ルーターはリンクローカルアドレスを使用したパケットを転送しません。
Linux からのメタデータアクセス例
- curlコマンドを使ってアクセスします。下記アクセス例です。
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-0123456789abcd5c1
Windows からのメタデータアクセス例
- Windowsの場合もLinuxと同様に、PowerShellからcurlコマンドを使ってアクセスします。下記アクセス例です。
PS C:\Users\niikawa> curl 'http://169.254.169.254/latest/meta-data/instance-id'
StatusCode : 200
StatusDescription : OK
Content : i-0123456789abcdcdf
RawContent : HTTP/1.1 200 OK
Connection: close
Accept-Ranges: none
Content-Length: 19
Content-Type: text/plain
Date: Sun, 22 Sep 2019 12:30:12 GMT
Last-Modified: Sun, 22 Sep 2019 11:56:41 GMT
Server: EC2ws...
Forms : {}
Headers : {[Connection, close], [Accept-Ranges, none], [Content-Length, 19], [Content-Type, text/plain]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : System.__ComObject
RawContentLength : 19
PS C:\Users\niikawa>
- 上記出力結果より、WindowsのPowerShellではContent以外の不必要な情報が含まれます。下記の方法より、Linuxのcurlコマンドと同じ結果を得ることが可能です。
$instanceid=(curl 'http://169.254.169.254/latest/meta-data/instance-id')
echo $instanceid.content
インスタンスメタデータの一覧
メタデータ | 説明 |
ami-id |
インスタンスの起動に使用される AMI ID。 |
hostname |
インスタンスのプライベート IPv4 DNS ホスト名。 |
iam/info |
インスタンスに関連付けられた IAM ロールがある場合、インスタンスの LastUpdated の日付、InstanceProfileArn、InstanceProfileId など、インスタンスプロファイルが更新された最終時刻に関する情報が格納されます。 |
instance-id |
インスタンスの ID。 |
instance-type |
インスタンスの種類。 |
local-hostname |
インスタンスのプライベート IPv4 DNS ホスト名。 |
local-ipv4 |
インスタンスのプライベート IPv4 アドレス。 |
mac |
インスタンスのMACアドレス。 |
placement/availability-zone |
インスタンスが起動した利用可能ゾーン。 |
public-hostname |
インスタンスのパブリック DNS。このカテゴリは、enableDnsHostnames 属性が true に設定されている場合にのみ返されます。 |
public-ipv4 |
パブリック IPv4 アドレス。インスタンスに Elastic IP アドレスが関連付けられている場合、返される値は Elastic IP アドレスです。 |
security-groups |
インスタンスのセキュリティグループ名。 |
インスタンスのユーザーデータ
- 下記の様にユーザーデータにアクセスします。curlコマンドを実行した結果、ユーザーデータに設定しているsudo groupadd、sudo useraddの2行が出力されました。
$ curl http://169.254.169.254/latest/user-data
sudo groupadd -g 600 test-group
sudo useradd -u 600 -g test-group -d /home/test-user -s /bin/bash test-user
インスタンスデータの使用事例
- 今回ご紹介したメタデータを活用して、EC2のName Tag をOSのスクリプトから設定することが可能です。詳細は、以下記事を参照ください。