本記事ではTerraformを使用してAWSのアカウントIDを取得する方法について説明します。 専用のデータソースを利用すると実行しているユーザーのアカウントIDを簡単に取得できます。

AWSアカウントIDとは

AWSアカウントIDとはAWSの利用者が割り当てられる12桁の固有のID番号です。

AWSの各種リソースはアカウントIDに紐づけられます。

アカウントIDはAWSコンソールのWeb画面にログイン後、右上のメニューから確認できます。

アカウントIDの確認

アカウントIDは変数定義しなくていい

Terraformで管理する.hclファイルにはアカウントIDをハードコードしたくないので、当初は*.tfvarsファイルにアカウントIDを書いました。
しかしterraformコマンドを実行するときAWSのユーザーで実行するので、terraformコマンドは実行しているユーザーのアカウントIDを知っているはず。

Terraformでは実行しているユーザーのアカウント情報を取得するためのデータソースが用意されているので変数定義する必要はありません。

TerraformでAWSアカウントIDを取得する方法

TerraformではAWSアカウント情報を取得するためのデータソースaws_caller_identityが提供されています。 TerraformのコードでAWSアカウントIDを取得できます。

Data Source: aws_caller_identity

例えば以下はS3バケットを作成するコードです。

data "aws_caller_identity" "current" {}

resource "aws_s3_bucket" "storage" {
  bucket = "some-storage-${data.aws_caller_identity.current.account_id}"
}

S3バケット名は全世界で一意となる名前を付ける必要があり、できるだけ他人のバケットと重複しないようにするためアカウントIDを名前に付加しています。

上記コードは以下を実行します。

  • data ブロックではcurrentという名前でaws_caller_identityデータソースを登録しています。
  • resourceブロックでは “some-storage-アカウントID” という名前のバケットを作成します。

AWS CLI で取得するコマンド

AWS CLIではaws stsコマンドでget-caller-identityが用意されています。
aws sts get-caller-identityコマンドを実行すると実行したユーザーのアカウント情報がJSON形式で取得できます。

$ aws sts get-caller-identity

上記コマンドで以下のようなJSONを取得できます。

{
    "UserId": "AIDxxxxxxxxxxxxxxxx",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/username"
}

参考: 【AWS】AWS CLIでアカウントIDを取得する