web-dev-qa-db-ja.com

AWSのインスタンスからインスタンス名を取得するにはどうすればよいですか?

ソルトとこの記事を使用して、インスタンスが作成されたときにroute53にインスタンスを自動的に登録する手段をセットアップしようとしています: http://cantina.co/2012/01/25/automated-dns- for-aws-instances-using-route-53 /

記事ではec2-metadataは、インスタンスIDとホスト名を取得します。代わりに、インスタンス内でbashを使用してインスタンス名を取得する方法があるかどうか疑問に思っています。 ec2-metadataはインスタンスIDのみを表示しているようです。前もって感謝します。

20
numb3rs1x

何よりもまず、 Amazon EC2インスタンスメタデータサービスは、他にもかなりの名前を提供しますinstance-idのほか、これらが探しているものである場合- インスタンスメタデータカテゴリ を参照:

  • hostname-インスタンスのプライベートホスト名。複数のネットワークインターフェイスが存在する場合、これはeth0デバイス(デバイス番号が0のデバイス)を指します。
  • local-hostname-インスタンスのプライベートDNSホスト名。複数のネットワークインターフェイスが存在する場合、これはeth0デバイス(デバイス番号が0のデバイス)を指します。
  • public-hostname-インスタンスのパブリックDNS。インスタンスがVPCにある場合、このカテゴリは、enableDnsHostnames属性がtrueに設定されている場合にのみ返されます。

AWS Management Console で公開されているNameを探している場合は、実際に使用する必要があります Tools for Amazon Web Services それを取得する-そのNameは実際にはキーNameAmazon EC2リソースにタグを付ける を参照)、これは明らかにほとんどのAWSサービスで明らかに目的のために使用されます。

AWS Command Line Interface を使用して取得する方法は次のとおりです(リージョンと認証情報をスキップします):

aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text
  • 組み込みの--queryオプションで可能なものよりも高度なCLI JSON出力処理については、 jq軽量で柔軟なコマンドラインを使用することができますJSONプロセッサ)。

  • Overthink's answer は、現在のレガシーに基づいた例を提供します Amazon EC2 API Tools (今日、資格情報を異なる方法で処理することを正しく指摘しているコメントに注意してください-を参照してください- CLIツールの概要 および EC2インスタンスのIAMロール (詳細)。

13
Steffen Opel

まず、instance-idを取得する必要があります。

AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`

以下のコマンドを使用してec2 instance nameを取得できます。

EC2_NAME=$(aws ec2 describe-tags --region $REGION --filters "Name=resource-id,Values=$AWS_INSTANCE_ID" "Name=key,Values=Name" --output text | cut -f5)

AWS Cli がインストールされていることを確認してください。

これがお役に立てば幸いです。ありがとう!

11
Jayesh Dhandha

Bashでどのように見えるかはわかりませんが、インスタンスIDを取得できれば、インスタンス自体からSDKを使用できます。 ec2リソースをクエリして、ec2インスタンスIDを渡します。 Ruby sdkを使用すると、次のようになります。

i = ec2.instances["i-12345678"]
puts i.dns_name
0
BrianJakovich