http://169.254.169.254/latest/meta-data/placement/availability-zone
、最後の文字を削除します。
http://169.254.169.254/latest/meta-data/placement/availability-zone
、最後の文字を削除します。
回答:
その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]$//'`"
お役に立てれば。
編集:sed
コメントに基づいて改善
ec2-metadata
はこのAPIの単なるラッパーですが、基本的に同じことを行います。
sed 's/[a-z]$//
それを達成するもう1つの方法があります。
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo $REGION
us-east-1
404 - Not Found
しようとしGET
ていますus-east-1a
。
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
ec2-metadata --availability-zone | sed 's/.$//'
debianベースのシステムの場合、コマンドにはダッシュがありません。
ec2metadata --availability-zone | sed 's/.$//'
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
デフォルトで利用できるものではないようです-インストール手順を含めることができますか?
正規表現を避けたい場合は、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']"
ec2-metadataを使用できます。
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
eu-central-1
ているなら、あなたはねじ込まれています。
central
最初に答えを書いたときは存在しませんでした。今追加されました。
awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
、AZ名の最初の2つのコンポーネントのみを保持します。
eu-west-1
、eu-west-2
及びeu-west-3
(がもus-west-1
とus-west-2
)@OP:ちょうどマッチングが'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
より安全と思われる(基本的な正規表現であること、それは、拡張REを短くすることができます)。(現在の正規表現は、上に壊れるca
、領域af
領域とme
領域)
これまでに見つけた最も簡単な
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}
curl: (6) Could not resolve host: instance-data; Name or service not known
エラーを返します。
AWS Java SDKを使用できる場合、現在のリージョン名(「us-east-1」、「eu-west-1」など)を返すメソッドがあります。
これは私が見つけた最もきれいな解決策です:
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')
https://unix.stackexchange.com/a/144330/135640のおかげで、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がリージョンに追加されたアベイラビリティーゾーンに単一の文字を引き続き使用することを前提としています。
region=${region%?}
または、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:]])}"}
これは、eu-central-1とさまざまな文字ゾーンで機能します。(上記のsedの回答に返信するのに十分な担当者がいません)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
ec2metadata --availability-zone | sed 's/.$//'
(ダッシュなしで)する必要があります
ログインしているEC2に関する情報を見つけるには、ec2-metadataツールを使用できます。
このリンクからツールをインストールできます。 ツールをインストールした後、実行できます
# ec2-metadata -z
地域を見つけるために。
このツールには、最新の(10.10)Ubuntu AMIがインストールされています。
ec2-metadata -z
リージョンではなく、アベイラビリティーゾーンのみを表示します。
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
egrepのみを使用する方法。追加のツールをインストールする必要なく、起動したほとんどすべてのLinuxインスタンスで機能します。現在のすべてのAWSリージョンのリストに対してこれをテストしましたが、すべてが一致しています。
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
このカールリクエストを使用してインスタンスリージョンを取得できます
$ curl http://169.254.169.254/latest/meta-data/placement/region
us-east-1