instance id
ec2 インスタンス内から ec2 インスタンスを見つけるにはどうすればよいですか?
33 に答える
この件に関する 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
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はユーザーデータを表示します(実際にはメタデータではありません)
.NET
人々のために:
string instanceId = new StreamReader(
HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
.GetResponse().GetResponseStream())
.ReadToEnd();
パワーシェルの人々の場合:
(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
この投稿を参照してください。指定された URL の IP アドレスは一定ですが (最初は混乱しました)、返されるデータはインスタンスに固有のものであることに注意してください。
最新の Java SDK には次のものがありますEC2MetadataUtils
。
Java の場合:
import com.amazonaws.util.EC2MetadataUtils;
String myId = EC2MetadataUtils.getInstanceId();
スカラの場合:
import com.amazonaws.util.EC2MetadataUtils
val myid = EC2MetadataUtils.getInstanceId
これを試すことができます:
#!/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]\)"`
FWIW EC2 メタデータ サービスへのアクセスを提供するために FUSE ファイルシステムを作成しました: https://github.com/xdgc/ec2mdfs。これをすべてのカスタム AMI で実行します。このイディオムを使用できます: cat /ec2/meta-data/ami-id
メタデータ パラメーターを渡すことで、任意のメタデータを取得する 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
お力になれて、嬉しいです.. :)
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ソースです。
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
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() を使用します。
.NET コードの場合は非常に単純です。
var instanceId=Amazon.Util.EC2InstanceMetadata.InstanceId