421

instance idec2 インスタンス内から ec2 インスタンスを見つけるにはどうすればよいですか?

4

33 に答える 33

582

この件に関する EC2 ドキュメントを参照してください。

走る:

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

スクリプト内からインスタンス ID にプログラムでアクセスする必要がある場合は、

die() { status=$1; shift; echo "FATAL: $*"; exit $status; }
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"

以下は、より高度な使用例です (インスタンス ID、アベイラビリティーゾーンおよびリージョンなどを取得します)。

EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

プラットフォームに何がインストールされているかによって、curlの代わりに を使用することもできます。wget

于 2009-03-09T21:04:30.233 に答える
75

Ubuntuでは次のことができます。

sudo apt-get install cloud-utils

そして、次のことができます。

EC2_INSTANCE_ID=$(ec2metadata --instance-id)

次の方法で、インスタンスに関連付けられているほとんどのメタデータを取得できます。

ec2metadata --help
構文:/ usr / bin / ec2metadata [options]

EC2メタデータをクエリして表示します。

オプションが指定されていない場合、すべてのオプションが表示されます

オプション:
    -h--helpこのヘルプを表示する

    --kernel-idはカーネルIDを表示します
    --ramdisk-idはramdiskIDを表示します
    --reservation-idは予約IDを表示します

    --ami-idはamiidを表示します
    --ami-launch-indexami起動インデックスを表示します
    --ami-manifest-pathamiマニフェストパスを表示します
    --ancestor-ami-idsはamiの祖先IDを表示します
    --product-codesは、amiに関連付けられた製品コードを表示します
    --availability-zoneami配置ゾーンを表示します

    --instance-idはインスタンスIDを表示します
    --instance-typeインスタンスタイプを表示します

    --local-hostnameはローカルホスト名を表示します
    --public-hostnameはパブリックホスト名を表示します

    --local-ipv4はローカルipv4IPアドレスを表示します
    --public-ipv4はpublicipv4ipアドレスを表示します

    --block-device-mappingはブロックデバイスIDを表示します
    --security-groupsはセキュリティグループを表示します

    --macインスタンスのMACアドレスを表示します
    --profileはインスタンスプロファイルを表示します
    --instance-actionはinstance-actionを表示します

    --public-keysはopenssh公開鍵を表示します
    --user-dataはユーザーデータを表示します(実際にはメタデータではありません)
于 2012-05-15T12:26:16.913 に答える
27

.NET人々のために:

string instanceId = new StreamReader(
      HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
      .GetResponse().GetResponseStream())
    .ReadToEnd();
于 2012-03-10T16:52:52.247 に答える
24

パワーシェルの人々の場合:

(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
于 2012-07-13T15:36:30.457 に答える
14

この投稿を参照してください。指定された URL の IP アドレスは一定ですが (最初は混乱しました)、返されるデータはインスタンスに固有のものであることに注意してください。

于 2009-03-09T21:04:19.673 に答える
10

最新の Java SDK には次のものがありますEC2MetadataUtils

Java の場合:

import com.amazonaws.util.EC2MetadataUtils;
String myId = EC2MetadataUtils.getInstanceId();

スカラの場合:

import com.amazonaws.util.EC2MetadataUtils
val myid = EC2MetadataUtils.getInstanceId
于 2016-06-01T18:01:14.937 に答える
9

これを試すことができます:

#!/bin/bash
aws_instance=$(wget -q -O- http://169.254.169.254/latest/meta-data/instance-id)
aws_region=$(wget -q -O- http://169.254.169.254/latest/meta-data/hostname)
aws_region=${aws_region#*.}
aws_region=${aws_region%%.*}
aws_zone=`ec2-describe-instances $aws_instance --region $aws_region`
aws_zone=`expr match "$aws_zone" ".*\($aws_region[a-z]\)"`
于 2011-08-11T16:24:16.990 に答える
3

FWIW EC2 メタデータ サービスへのアクセスを提供するために FUSE ファイルシステムを作成しました: https://github.com/xdgc/ec2mdfs。これをすべてのカスタム AMI で実行します。このイディオムを使用できます: cat /ec2/meta-data/ami-id

于 2013-07-29T22:15:05.173 に答える
3

メタデータ パラメーターを渡すことで、任意のメタデータを取得する HTTP 要求を作成できます。

curl http://169.254.169.254/latest/meta-data/instance-id

また

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

メタデータとユーザーデータを取得するための HTTP リクエストに対しては課金されません。

そうしないと

ドキュメントに記載されているように、実行中の EC2 インスタンス内から curl を使用して EC2 インスタンス メタデータをクエリする単純な bash スクリプトである EC2 インスタンス メタデータ クエリ ツールを使用できます。

ツールをダウンロードします。

$ wget http://s3.amazonaws.com/ec2metadata/ec2-metadata

コマンドを実行して、必要なデータを取得します。

$ec2metadata -i

参照:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

https://aws.amazon.com/items/1825?externalID=1825

お力になれて、嬉しいです.. :)

于 2016-12-24T06:28:40.640 に答える
3

Go ではgoamz パッケージを使用できます。

import (
    "github.com/mitchellh/goamz/aws"
    "log"
)

func getId() (id string) {
    idBytes, err := aws.GetMetaData("instance-id")
    if err != nil {
        log.Fatalf("Error getting instance-id: %v.", err)
    }

    id = string(idBytes)

    return id
}

これがGetMetaDataソースです。

于 2013-12-23T22:29:15.140 に答える
0

EC2 リソースに関連するすべてのメタデータは、次のコマンドを実行することで、EC2 インスタンス自体からアクセスできます。

カール :

http://169.254.169.254/<api-version>/meta-data/<metadata-requested>

あなたの場合:「metadata-requested」はinstance-idである必要があり、「api-version」は通常、使用できる最新のものです。

追記: 上記のコマンドを使用して、以下の EC2 属性に関連する情報を取得することもできます。

ami-id, ami-launch-index, ami-manifest-path, block-device-mapping/, ホスト名, iam/, instance-action, instance-id, instance-type, local-hostname, local-ipv4, mac, metrics/、network/、placement/、profile、public-hostname、public-ipv4、public-keys/、reservation-id、security-group、services/、

詳細については、次のリンクをたどってください: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

于 2019-01-31T10:51:08.263 に答える
0

PHP の代替アプローチ:

$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document'),true);
$id = $instance['instanceId'];
print_r($instance);

これにより、インスタンスに関する多くのデータが提供され、すべてが配列に適切にパックされ、外部依存関係はありません。私にとって失敗したり遅延したりすることのないリクエストであるため、そのようにしても安全なはずです。そうでない場合は、curl() を使用します。

于 2017-12-06T01:44:53.363 に答える
-1

.NET コードの場合は非常に単純です。 var instanceId=Amazon.Util.EC2InstanceMetadata.InstanceId

于 2021-08-11T10:01:57.150 に答える