LoginSignup
4
2

More than 3 years have passed since last update.

AWS CLIでアカウントIDとリージョンを取得する

Last updated at Posted at 2020-03-16

EC2上でシェルを書く時、何かとAWS CLIでリージョンやアカウントIDを使うことが多いですよね。

ただ、そのままアカウントIDを111222333444のように埋め込んだり、リージョンをap-northeast-1と書くのは、様々な環境で使い回す上ではなるべく避けたいと思ったので取得してみました。

アカウントIDの取得方法

アカウントIDはaws sts get-caller-identityを使用して取得できます。

$ aws sts get-caller-identity
{
    "Account": "111222333444", 
    "UserId": "AAAABBBBCCCCDDDDEEEE", 
    "Arn": "arn:aws:iam::111222333444:user/sample"
}

このようにAccountやUserID、IAMのARNがJSONで返ってくるので、ここから取得してあげましょう。

先程のコマンドからjqを使用してパースして抜き出します。

jqがない場合はインストールして下さい。
参考:jq コマンドの Linux への速攻インストール

$ aws sts get-caller-identity | jq -r '.Account'
> 111222333444

こんな感じでアカウントIDはOK

※2020/03/17追記
CLIの--queryオプションであれば、jqを使用せずとも抜き出せるとコメント頂きました。こちらの方が簡単ですね!

$ aws sts get-caller-identity --query 'Account' --output text

リージョンを取得する方法

リージョンは以下のコマンドで取得してみます。

$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e s/.$//
> ap-northeast-1

インスタンスのメタデータからAZの情報を取得できるので、最後の1文字を削除してあげればリージョン名になります。

シェルで使用する

AWSではサービスの情報を取得したり、何か情報をPUTしたりする際ARNを指定することが多いんですが、これの中にアカウントIDやリージョンがよく必要になります。

例えばSNSのトピックを指定する際のARNはこんな感じ。
arn:aws:sns:ap-northeast-1:111222333444:sample-topic

これは見ればわかると思いますが、
arn:aws:sns:【リージョン】:【アカウントID】:【トピック名】

のような法則で作られる文字列です。

シェルの中で変数に入れたい場合はこんな感じに変数で書いてあげましょう。

SNS_TOPIC_NAME="sample-topic"
REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e s/.$//` 
ACCOUNT_ID=`echo aws sts get-caller-identity | jq -r '.Account'` 

SNS_TOPIC_ARN="arn:aws:sns:${REGION}:${ACCOUNT_ID}:${SNS_TOPIC_NAME}"
echo ${SNS_TOPIC_ARN}

> arn:aws:sns:ap-northeast-1:111222333444:sample-topic

こうすると他のアカウントや別リージョンで同じシェルを使いたい場合でも、トピック名だけを修正すればいいのでとても修正箇所が少なくて済みます。

誰かのお役に立てれば幸いです。

4
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2