メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

インスタンスメタデータとユーザーデータ

インスタンスメタデータは、インスタンスに関するデータで、実行中のインスタンスを設定または管理するために使用します。インスタンスメタデータはいくつかのカテゴリに分けられます。詳細については、「インスタンスメタデータのカテゴリ」を参照してください。

EC2 インスタンスには、インスタンスの起動時に生成されるインスタンスアイデンティティドキュメントなどの動的データも含まれます。詳細については、「動的データのカテゴリ」を参照してください。

また、インスタンスの起動時に提供したユーザーデータにアクセスすることもできます。たとえば、インスタンスを設定するためにパラメータを指定したり、単純なスクリプトをアタッチしたりできます。また、このデータを使用すると、より一般的な AMI を構築することもでき、この AMI は、起動時に提供される設定ファイルにより、変更が可能になります。たとえば、さまざまな小規模ビジネスを対象としたウェブサーバーを実行する場合に、すべてのサーバーで同じ AMI を使用し、起動時にユーザーデータで指定した Amazon S3 バケットからコンテンツを取得できます。新しい顧客をいつでも簡単に追加できます。その顧客のバケットを作成し、顧客のコンテンツを追加して、AMI を起動すればよいのです。複数のインスタンスを同時に起動する場合、ユーザーデータはその予約においてすべてのインスタンスで使用可能です。

Important

インスタンスメタデータおよびユーザーデータにはそのインスタンス自体内からのみアクセスできるものの、データは暗号化手法によって保護されていません。インスタンスにアクセスできるユーザーなら誰でもそのメタデータを参照できます。したがって、重要なデータ(長期間使用する暗号化キーなど)については、適切な安全策によって保護する必要があります。パスワードなどの機密データは、ユーザーデータとして保存しないでください。

インスタンスメタデータの取得

インスタンスメタデータは実行中のインスタンスから取得できるため、Amazon EC2 コンソールまたは AWS CLI を使用する必要はありません。これは、インスタンスから実行するスクリプトを記述しているときに便利です。たとえば、インスタンスメタデータからインスタンスのローカル IP アドレスにアクセスして、外部アプリケーションへの接続を管理できます。

実行中のインスタンス内からインスタンスメタデータのすべてのカテゴリを表示するには、次の URI を使用します。

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

インスタンスメタデータおよびユーザーデータの取得に使用する HTTP リクエストに対しては課金されません。

cURL などのツールを使用できます。インスタンスでサポートされている場合は、次のような GET コマンドを使用することができます。

$ curl http://169.254.169.254/latest/meta-data/
$ GET http://169.254.169.254/latest/meta-data/

また、Instance Metadata Query ツールをダウンロードすることもできます。これにより、URI 全体またはカテゴリ名を入力する必要なく、インスタンスメタデータに対してクエリを実行できます。

http://aws.amazon.com/code/1825

すべてのメタデータがテキスト(コンテンツタイプ text/plain)として返されます。特定のメタデータリソースに対するリクエストは、適切な値または 404 - Not Found HTTP エラーコード(リソースを使用できない場合)を返します。

一般的なメタデータリソースに対するリクエスト(/ で終わる URI)は、使用可能なリソースのリストまたは 404 - Not Found HTTP エラーコード(使用可能なリソースがない場合)を返します。リスト項目は個別の行に表示され、各行の末尾には改行記号(ASCII 10)が付いています。

インスタンスメタデータの取得の例

次の例では、使用できるインスタンスメタデータのバージョンを取得しています。これらのバージョンは、Amazon EC2 API バージョンと必ずしも関連しているとは限りません。以前のバージョンに存在する構造および情報に依存するスクリプトがある場合は、以前のバージョンを使用することができます。

$ curl http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
latest

次の例では、上位レベルのメタデータ項目を取得しています。一部の項目は、VPC 内のインスタンスでのみ使用可能です。これらの項目の詳細については、「インスタンスメタデータのカテゴリ」を参照してください。

$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
mac
network/
placement/
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/

次の例では、前の例からメタデータ項目の一部の値を取得しています。

$ curl http://169.254.169.254/latest/meta-data/ami-id
ami-2bb65342
$ curl http://169.254.169.254/latest/meta-data/reservation-id
r-fea54097
$ curl http://169.254.169.254/latest/meta-data/hostname
ec2-67-202-51-223.compute-1.amazonaws.com

次の例では、使用できるパブリックキーの一覧を取得しています。

$ curl http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key

次の例は、パブリックキー0のフォーマットを示しています。

$ curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key

次の例では、パブリックキー0を取得しています(OpenSSH キーフォーマット)。

$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

次の例は、EC2-Classic プラットフォームの NAT インスタンス上の特定のネットワークインターフェイス(MAC アドレスで示される)で使用可能な情報を示しています。

$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/
device-number
local-hostname
local-ipv4s
mac
owner-id
public-hostname
public-ipv4s

次の例では、VPC 内に起動されたインスタンスのサブネット ID を取得しています。

$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7

ユーザーデータを使用してインスタンスを設定する

ユーザーデータを指定するときは、以下の点に注意してください。

  • ユーザーデータは不透明なデータとして取り扱われ、指定したデータがそのまま返されます。このデータを解釈できるかどうかは、インスタンスによって異なります。

  • ユーザーデータのサイズの上限は 16 KB です。この制限は、base64 エンコード形式でなく、raw 形式のデータに適用されます。

  • ユーザーデータは、API に送信する前に base64 でエンコードする必要があります。base64 エンコードは EC2 コマンドラインツールで実行できます。このデータは、インスタンスに提示される前にデコードされます。base64 エンコードの詳細については、http://tools.ietf.org/html/rfc4648 を参照してください。

  • ユーザーデータはインスタンスの起動時にのみ実行されます。インスタンスを停止し、ユーザーデータを変更した場合、インスタンスを起動しても、その新しいユーザーデータは自動的には実行されません。

インスタンス起動時のユーザーデータを指定するには

インスタンスの起動時のユーザーデータを指定できます。詳細については、「インスタンスの作成、「cloud-init」および「Linux インスタンスでの起動時のコマンドの実行を参照してください。

実行中のインスタンスのユーザーデータの変更

以前にユーザーデータが割り当てられていて、現在実行中のインスタンスのユーザーデータを変更できます。新しいユーザーデータは、インスタンスを再起動した後で適用されます。

Amazon EBS-backed インスタンスのユーザーデータを変更するには

  1. https://console.aws.amazon.com/ec2/)にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで [Instances] をクリックし、インスタンスを変更します。

  3. [Actions] をクリックして [Instance State] を選択し、[Stop] をクリックします。

    Warning

    インスタンスを停止すると、インスタンスストアボリューム上のデータは消去されます。したがって、インスタンスストアボリューム上に維持したいデータがある場合は、必ず永続的ストレージにバックアップしてください。

  4. 確認ダイアログボックスで [Yes, Stop ] をクリックします。インスタンスが停止するまで、数分かかる場合があります。

  5. インスタンスが選択された状態のまま、[Actions] をクリックし、[Instance Settings] を選択して、[View/Change User Data] をクリックします。インスタンスの実行中はユーザーデータを変更できないことに注意してください。表示することはできます。

  6. [View/Change User Data] ダイアログボックスで、ユーザーデータを更新し、[Save] をクリックします。

ユーザーデータの取得

ユーザーデータを取得するには、次の URI を使用します。

http://169.254.169.254/latest/user-data

ユーザーデータのリクエストは、データをそのままの状態で返します(コンテンツタイプ application/x-octetstream)。

次の例では、カンマで区切られたユーザーデータを返しています。

$ curl http://169.254.169.254/latest/user-data
1234,john,reboot,true | 4512,richard, | 173,,,

次の例では、行で区切られたユーザーデータを返しています。

$ curl http://169.254.169.254/latest/user-data
[general]
instances: 4

[instance-0]
s3-bucket: <user_name>

[instance-1]
reboot-on-error: yes

動的データの取得

実行中のインスタンス内から動的データを取得するには、次の URI を使用します。

http://169.254.169.254/latest/dynamic/

この例では、高レベルのインスタンスアイデンティティカテゴリを取得する方法を表示しています。

$ curl http://169.254.169.254/latest/dynamic/instance-identity/
pkcs7
signature
document

動的データの詳細およびその取得方法の例については、「インスタンスアイデンティティドキュメント」を参照してください。

例: AMI 作成インデックス値

この例は、ユーザーデータおよびインスタンスメタデータの両方を使用してインスタンスを設定する方法を示しています、

この例では、Alice がお気に入りの データベース AMI の 4 つのインスタンスを起動したいと考えています。そのうち最初の 1 つはマスターとして、残りの 3 つはレプリカとして動作します。これらのインスタンスを起動するときに、各レプリカントのレプリケーション戦略に関するユーザーデータを追加したいと考えています。このデータはすべての 4 つのインスタンスで使用可能となるので、どの部分が各インスタンスに該当するかをそれぞれが認識できるように、ユーザーデータを構築する必要があります。この構築は、各インスタンスに対して一意となる ami-launch-index インスタンスメタデータ値を使用して行うことができます。

Alice が構築したユーザーデータを次に示します。

replicate-every=1min | replicate-every=5min | replicate-every=10min

replicate-every=1min データは最初のレプリカントの設定を定義し、replicate-every=5min は 2 番目のレプリカントの設定を定義するというように、それぞれが定義を行います。Alice は、個別のインスタンスのデータをパイプシンボル(|)で区切って、このデータを ASCII 文字列として指定することにしました。

Alice は、run-instances コマンドを使用して 4 つのインスタンスを起動します。このとき、次のユーザーデータを指定します。

aws ec2 run-instances --image-id ami-2bb65342 --count 4 --instance-type t2.micro --user-data "replicate-every=1min | replicate-every=5min | replicate-every=10min"

起動したすべてのインスタンスに、ユーザーデータのコピーと次に示す一般的なメタデータが含まれています。

  • AMI ID: ami-2bb65342

  • 予約 ID: r-1234567890abcabc0

  • パブリックキー: none

  • セキュリティグループ名: default

  • インスタンスタイプ: t2.micro

ただし、各インスタンスには所定の一意のメタデータが含まれます。

インスタンス 1

メタデータ
instance-idi-1234567890abcdef0
ami-launch-index0
public-hostnameec2-67-202-51-223.compute-1.amazonaws.com
public-ipv467.202.51.223
local-hostnameip-10-251-50-35.ec2.internal
local-ipv410.251.50.35

インスタンス 2

メタデータ
instance-idi-0598c7d356eba48d7
ami-launch-index1
public-hostnameec2-67-202-51-224.compute-1.amazonaws.com
public-ipv467.202.51.224
local-hostnameip-10-251-50-36.ec2.internal
local-ipv410.251.50.36

インスタンス 3

メタデータ
instance-idi-0ee992212549ce0e7
ami-launch-index2
public-hostnameec2-67-202-51-225.compute-1.amazonaws.com
public-ipv467.202.51.225
local-hostnameip-10-251-50-37.ec2.internal
local-ipv410.251.50.37

インスタンス 4

メタデータ
instance-idi-abc123abc456abc78
ami-launch-index3
public-hostnameec2-67-202-51-226.compute-1.amazonaws.com
public-ipv467.202.51.226
local-hostnameip-10-251-50-38.ec2.internal
local-ipv410.251.50.38

Alice は ami-launch-index 値を使用して、ユーザーデータのどの部分が特定のインスタンスに該当するかを判断できます。

  1. そのインスタンスの 1 つに接続し、ami-launch-index を取得して、それがレプリカントの 1 つであることを確認します。

    $ curl http://169.254.169.254/latest/meta-data/ami-launch-index
    2
  2. ami-launch-index を変数として保存します。

    $ ami_launch_index=`curl http://169.254.169.254/latest/meta-data/ami-launch-index`
  3. ユーザーデータを変数として保存します。

    $ user_data=`curl http://169.254.169.254/latest/user-data/`
  4. 最後に、Alice は cut コマンドを使用して、そのインスタンスに該当するユーザーデータの部分を抽出します。

    $ echo $user_data | cut -d"|" -f"$ami_launch_index"
    replicate-every=5min

インスタンスメタデータのカテゴリ

次の表は、インスタンスメタデータのカテゴリをまとめたものです。

データ説明導入されたバージョン
ami-id インスタンスの起動に使用される AMI ID。1.0
ami-launch-index 同時に複数のインスタンスを起動した場合、この値はインスタンスが起動された順序を示します。最初に起動されたインスタンスの値は 0 です。1.0
ami-manifest-path Amazon S3 での AMI のマニフェストファイルのパス。Amazon EBS-Backed AMI を使用してインスタンスを起動した場合、返される結果は unknown です。1.0
ancestor-ami-ids この AMI を作成するために再バンドルされたあらゆるインスタンスの AMI ID。この値は、AMI マニフェストファイルが ancestor-amis キーを含む場合にのみ存在します。2007-10-10
block-device-mapping/ami root/boot ファイルシステムを含む仮想デバイス。2007-12-15
block-device-mapping/ebsN Amazon EBS ボリュームに関連付けられた仮想デバイス(存在する場合)。Amazon EBS ボリュームは、起動の時点またはインスタンスが最後に開始された時点で存在している場合にのみ、メタデータで使用できます。N は、Amazon EBS ボリュームのインデックス(ebs1ebs2 など)を示します。2007-12-15
block-device-mapping/ephemeralN エフェメラルデバイスに関連付けられた仮想デバイス(存在する場合)。N は、エフェメラルボリュームのインデックスを示します。2007-12-15
block-device-mapping/root ルートデバイスに関連付けられた仮想デバイスまたはパーティション、あるいは仮想デバイス上のパーティション。ルート(/ または C:)ファイルシステムは、所定のインスタンスに関連付けられています。2007-12-15
block-device-mapping/swap swap に関連付けられた仮想デバイス。存在しない場合もあります。2007-12-15
hostnameインスタンスのプライベートホスト名。複数のネットワークインターフェイスが存在する場合、これは eth0 デバイス(デバイス番号が 0 のデバイス)を示します。1.0
iam/info 起動時にインスタンスに関連付けられた IAM ロールがある場合、インスタンスの LastUpdated の日付、InstanceProfileArn、InstanceProfileId など、インスタンスのプロファイルが更新された最終時刻に関する情報が格納されます。そうでない場合は、なしになります。2012-01-12
iam/security-credentials/role-name 起動時にインスタンスに関連付けられた IAM ロールがある場合、role-name はロールの名前になり、role-name に、そのロールに関連付けられた一時的なセキュリティ認証情報が格納されます(詳細については、「インスタンスメタデータからセキュリティ認証情報を取得する」を参照してください)。そうでない場合は、なしになります。2012-01-12
instance-action バンドルの準備のために再起動する必要があることをインスタンスに伝えます。有効な値: none | shutdown | bundle-pending.2008-09-01
instance-id このインスタンスの ID。1.0
instance-type インスタンスの種類。詳細については、「インスタンスタイプ」を参照してください。2007-08-29
kernel-id このインスタンスで起動したカーネルの ID(ある場合)。2008-02-01
local-hostname インスタンスのプライベート DNS ホスト名。複数のネットワークインターフェイスが存在する場合、これは eth0 デバイス(デバイス番号が 0 のデバイス)を示します。2007-01-19
local-ipv4 インスタンスのプライベート IP アドレス。複数のネットワークインターフェイスが存在する場合、これは eth0 デバイス(デバイス番号が 0 のデバイス)を示します。1.0
mac インスタンスのメディアアクセスコントロール(MAC)アドレス。複数のネットワークインターフェイスが存在する場合、これは eth0 デバイス(デバイス番号が 0 のデバイス)を示します。2011-01-01
network/interfaces/macs/mac/device-number そのインターフェイスに関連付けられた固有のデバイス番号。デバイス番号はデバイス名に対応します。例えば、2 という device-number は eth2 デバイスを指します。このカテゴリは、Amazon EC2 API、Amazon EC2、CLI、および AWS CLI の EC2 コマンドで使用される DeviceIndex および device-index フィールドに対応しています。2011-01-01
network/interfaces/macs/mac/ipv4-associations/public-ip public-ip アドレスに関連付けられ、そのインターフェイスに割り当てられたプライベート IPv4 アドレス。2011-01-01
network/interfaces/macs/mac/local-hostname インターフェイスのローカルホスト名。2011-01-01
network/interfaces/macs/mac/local-ipv4s インターフェイスに関連付けられたプライベート IP アドレス。 2011-01-01
network/interfaces/macs/mac/mac インスタンスの MAC アドレス。2011-01-01
network/interfaces/macs/mac/owner-id ネットワークインターフェイスの所有者の ID。複数インターフェイスの環境では、インターフェイスは Elastic Load Balancing などのサードパーティによってアタッチできます。インターフェイス上のトラフィックは、常にインターフェイス所有者に対して課金されます。2011-01-01
network/interfaces/macs/mac/public-hostname インターフェイスのパブリック DNS。インスタンスが VPC 内に存在する場合、このカテゴリは、enableDnsHostnames 属性が true に設定されている場合にのみ返されます。詳細については、「Using DNS with Your VPC」を参照してください。2011-01-01
network/interfaces/macs/mac/public-ipv4s インターフェイスに関連付けられた Elastic IP アドレス。インスタンスには複数の IP アドレスが存在する場合があります。 2011-01-01
network/interfaces/macs/mac/security-groups ネットワークインターフェイスが属するセキュリティグループ。VPC 内に起動されたインスタンスに対してのみ返されます。 2011-01-01
network/interfaces/macs/mac/security-group-ids ネットワークインターフェイスが属するセキュリティグループの ID。VPC 内に起動されたインスタンスに対してのみ返されます。EC2-VPC プラットフォームのセキュリティグループの詳細については、「Security Groups for Your VPC」を参照してください。2011-01-01
network/interfaces/macs/mac/subnet-id インターフェイスが存在するサブネットの ID。VPC 内に起動されたインスタンスに対してのみ返されます。 2011-01-01
network/interfaces/macs/mac/subnet-ipv4-cidr-block インターフェイスが存在するサブネットの CIDR ブロック。VPC 内に起動されたインスタンスに対してのみ返されます。 2011-01-01
network/interfaces/macs/mac/vpc-id インターフェイスが存在する VPC の ID。VPC 内に起動されたインスタンスに対してのみ返されます。 2011-01-01
network/interfaces/macs/mac/vpc-ipv4-cidr-block インターフェイスが存在する VPC の CIDR ブロック。VPC 内に起動されたインスタンスに対してのみ返されます。 2011-01-01
placement/availability-zone インスタンスが起動した利用可能ゾーン。2008-02-01
product-codes インスタンスに関連付けられた製品コード(ある場合)。 2007-03-01
public-hostname インスタンスのパブリック DNS。インスタンスが VPC 内に存在する場合、このカテゴリは、enableDnsHostnames 属性が true に設定されている場合にのみ返されます。詳細については、「Using DNS with Your VPC」を参照してください。2007-01-19
public-ipv4 パブリック IP アドレス。インスタンスに Elastic IP アドレスが関連付けられている場合、返される値は Elastic IP アドレスです。2007-01-19
public-keys/0/openssh-key パブリックキー。インスタンスの起動時に指定された場合のみ返されます。1.0
ramdisk-id 起動時に指定された RAM ディスクの ID(該当する場合)。2007-10-10
reservation-id 予約の ID。1.0
security-groups

インスタンスに適用されるセキュリティグループの名前。

起動後は、VPC 内で実行されているインスタンスのセキュリティグループのみを変更できます。これらの変更は、この場所と network/interfaces/macs/mac/security-groups に反映されます。

1.0
services/domain

リージョンの AWS リソースのドメイン(us-east-1 の場合は amazonaws.com など)。

2014-02-25
services/partition

リソースが置かれているパーティションです。標準の AWS リージョンの場合、パーティションは aws です。他のパーティションにリソースがある場合、パーティションは aws-partitionname です。たとえば、中国(北京)リージョンにあるリソースのパーティションは、aws-cn です。

2015-10-20
spot/termination-time

スポットインスタンスのオペレーティングシステムがシャットダウン信号を受信するおよその時刻(UTC)。 この項目は、スポットインスタンスに Amazon EC2 による終了のマークが付けられている場合にのみ存在し、時刻値(たとえば 2015-01-05T18:02:00Z)が含まれます。 ユーザー自身がスポットインスタンスを終了した場合、termination-time 項目に時刻は設定されません。

2014-11-05

動的データのカテゴリ

次の表は、動的データのカテゴリをまとめたものです。

データ説明導入されたバージョン
fws/instance-monitoring 顧客が CloudWatch で詳細な 1 分間隔のモニタリングを有効にしているかどうかを示す値。有効な値: enabled | disabled2009-04-04
instance-identity/document インスタンス ID、プライベート IP アドレスなど、インスタンスの属性を含む JSON。「インスタンスアイデンティティドキュメント」を参照してください。 2009-04-04
instance-identity/pkcs7 署名に対してドキュメントの真正性およびコンテンツを確認するために使用されます。「インスタンスアイデンティティドキュメント」を参照してください。 2009-04-04
instance-identity/signature オリジンおよび権限を確認するために使用できるデータ。「インスタンスアイデンティティドキュメント」を参照してください。 2009-04-04