Skip to content

小ネタ:EC2 インスタンスの ARN 文字列を作る

AWS CLI や AWS マネジメントコンソールでは、EC2 インスタンスの ARN として表示されている箇所がないため、必要に応じて都度組み立てる必要がある。

そこで、AWS CLI の ec2 describe-instances で取得できる値から、ARN 文字列を組み立てるコマンドを検討してみる。

そもそも EC2 インスタンスの ARN 形式は?

以下のような規則の文字列となる。

1
arn:aws:ec2:${AWS_REGION}:${AWS_ACCOUNT_ID}:instance/${INSTANCE_ID}

作成したコマンド

1
2
3
4
aws ec2 describe-instances \
  --query 'Reservations[].[OwnerId, Instances[0].InstanceId, Instances[0].Placement.AvailabilityZone]' \
  --output text \
  | awk -F ' ' '{sub(/.$/,"",$3);printf "arn:aws:ec2:%s:%s:instance/%s\n", $3,$1,$2}'

ポイント

インスタンスが存在するリージョンそのものの文字列は、ec2 describe-instances の結果には含まれず、PlacementAvailabilityZone (例:ap-northeast-1a )か、PrivateDnsName (例:ip-10-0-0-150.ap-northeast-1.compute.internal )に含まれる文字列から取得する必要がある。

そこで今回は、PlacementAvailabilityZone の値を awk コマンドの中で、末尾の一文字を削除する処理として リージョン文字列を組み立てることにした。

実行結果例

1
2
arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxxxxxxx
arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-yyyyyyyyyyyyyyyyy

まとめ

EC2 インスタンスの ARN が必要になる場面はあまり思いつかない(aws resourcegroupstaggingapi tag-resources でのタグ付けの時とか?)が、命名規則は簡単なものの、アカウントに存在する EC2 インスタンスの ARN 一覧を作成したいような時に地味に役立つのかな?

注意点としては、アベイラビリティゾーンの文字列の規則が リージョン名 + 英文字一文字 と決め打ちしている点。

もう少しシンプルに書くこともできそうだが、小ネタとして。

Comments