インスタンス内からインスタンスの領域を検索する方法はありますか?
インスタンスIDを見つける のメソッドに似たものを探しています。
そのURL( http://169.254.169.254/latest/dynamic/instance-identity/document )はもう機能していないようです。使用しようとすると404が表示されます。次のコードがありますが、動作するようです:
EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
お役に立てれば。
EDIT:コメントに基づいてsed
を改善
それを達成するもう1つの方法があります。
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo $REGION
us-east-1
jq
を使用しても問題ない場合は、次を実行できます。
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -r
私はそれが最もきれいな方法だと思います。
ec2-metadata --availability-zone | sed 's/.$//'
Ec2-metadataを使用できます。
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
正規表現を避けたい場合は、Pythonで実行できる1行のライナーを次に示します。
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"
私がこれまでに見つけた最も簡単な
curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'
非常にシンプルなワンライナー
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
jqがインストールされている場合、次の方法で(おそらく最も「優雅な」方法で)実行することもできます。
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -c -r .region
これは、きれいな印刷やその他の書式設定を行わずに、単に「地域」の生の値を返します。リファレンス: AWSフォーラム
アベイラビリティーゾーンからリージョンを取得し、その最後の文字を取り除きます。
ec2-metadata -z | awk '{print $2}' | sed 's/[a-z]$//'
JQを使用:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
https://unix.stackexchange.com/a/144330/13564 のおかげで、bash 4.2以降では、アベイラビリティゾーンから最後の文字を削除できます。
$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1
これは、リージョンに追加されたアベイラビリティーゾーンにAWSが引き続き単一の文字を使用することを前提としています。
これは私が見つけた最もクリーンなソリューションです:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
例えば。、
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
これらの答えを読んだ後に最終的に見つけた非常に簡単な解決策:
$ hostname -f | cut -d'.' -f2
例:
[centos @ ip-172-31-10-75〜] $ホスト名-f
ip-172-31-10-75.us-west-1.compute.internal
[centos @ ip-172-31-10-75〜] $
[centos @ ip-172-31-10-75〜] $ hostname -f |カット-d '。' -f2
us-west-1
AWS Java SDKを使用できる場合、現在のリージョン名(「us-east-1」、「eu-west-1」など)を返すメソッドがあります。
または、Ubuntuまたはこのツールを要件にせずに、単純に実行します。
: "${EBS_VOLUME_AVAILABILITY_ZONE:=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)}"
: ${EBS_VOLUME_REGION:="${EBS_VOLUME_AVAILABILITY_ZONE%%*([![:digit:]])}"}
Jsonを使用する場合は、適切なツールを使用してください。この場合、jqは非常に強力です。
# curl -s curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region'
eu-west-1
検索ドメインとしてec2.internalを使用している限り機能する2ライナー:
az=$(curl -s http://instance-data/latest/meta-data/placement/availability-zone)
region=${az:0:${#az} - 1}
良いol powershellでこれをしたい人のために
$var = (curl http://169.254.169.254/latest/dynamic/instance-identity/document | Select-String-Pattern "Zone" | ConvertFrom-Json | Select-Object -ExpandProperty "region")
echo $var
これは、eu-central-1およびさまざまな文字ゾーンで機能します。 (上記のsed回答に返信するのに十分な担当者がいません)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
インスタンスから領域を見つけるためのソリューションも探していましたが、ここに私の純粋なBashソリューションがあります:
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
region=${az:0:${#az}-1}
aZに3文字以上の領域がある場合を除き、これは私にはわかりません。
ログインしているEC2に関する情報を見つけるには、ec2-metadataツールを使用できます。
このリンク。 を使用してツールをインストールできます。ツールをインストールしたら、次を実行できます。
# ec2-metadata -z
地域を見つけるために。
このツールには、最新の(10.10)Ubuntu AMIがインストールされています。
Windows上で実行している場合、このpowershellワンライナーを使用できます。
$region=(Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").region
JSを使用して領域を取得しようとしている場合、これは動作するはずです:
meta.request("/latest/meta-data/placement/availability-zone",function(err,data){
if(err)
console.log(err);
else{
console.log(data);
str = data.substring(0, data.length - 1);
AWS.config.update({region:str});
ec2 = new AWS.EC2();
}
});
これは、メタデータAPI呼び出しへの応答として、AWS DOCSから見つかったマッピングでした。最後の文字を削除するだけで機能します。
eu-west-1a :eu-west-1
eu-west-1b :eu-west-1
eu-west-1c :eu-west-1
us-east-1a :us-east-1
us-east-1b :us-east-1
us-east-1c :us-east-1
us-east-1d :us-east-1
ap-northeast-1a :ap-northeast-1
ap-northeast-1b :ap-northeast-1
us-west-1a :us-west-1
us-west-1b :us-west-1
us-west-1c :us-west-1
ap-southeast-1a :ap-southeast-1
ap-southeast-1b :ap-southeast-1