2017-08-22 14 views
2

から地域を取得する。PowerShellは、私はEC2のインスタンスを持っていると私はEC2が実行されている地域を取得したいと思いどこ私はそこにPowerShellスクリプトを実行していますAWSメタデータ

現在、私はグラブこのような回避策を持っています可用性ゾーンが最初にあります。可用性ゾーンは 'us-east-1a'のような形式です。

$region = invoke-restmethod -uri http://169.254.169.254/latest/meta-data/placement/availability-zone 
if ($region -like "*east*") {$region = "us-east-1"} ELSE {$region = "us-west-2"} 

私は、空き領域を取得してから変更を加えるのではなく、領域を取得したいと考えています。私が使用する可能性があります知っている:

http://169.254.169.254/latest/dynamic/instance-identity/document 

これは、領域を有するJSONオブジェクトを返しますが、私はまた、これを達成するためにJSONを解析する必要があります。

地域を取得するにはどうすればよいですか?

答えて

3

ウィルこの作品を役に立てば幸いメタデータソースに接続しなくてもインスタンス内から直接この情報を取得する方法はありませんか?

PS C:\> $region = invoke-restmethod -uri http://169.254.169.254/latest/meta-data/placement/availability-zone 

PS C:\> $region.Substring(0,$region.Length-1) 
+0

そうです。その解決策は、すべての空き領域に1文字が最後に付いているように見えるので、その解決策が機能します。単一のコマンドで地域をつかむためのネイティブな方法は発見されていません。ありがとうございました。 –

1

を使用してみてください:

EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone` 
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`" 

OR

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:'`" 

JQ:

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq .region -r 

リファレンス:Instance Metadata

注:このIPはAPIPAであるため、これはEC2インスタンス内部から実行する必要があります。

はそれが

+0

これらはLinuxコマンドと同じように見えます...私がPowershellでどのように同じことをすることができるのだろうか? –

+0

OPは明らかに必要な解決策が 'powershell'のものだと言っています – helloV

+0

@helloV:私の悪いです。 Invoke-webrequestはカールの代わりにそれを行います:) –

関連する問題