本記事ではTerraformを使用してAWSのアカウントIDを取得する方法について説明します。 専用のデータソースを利用すると実行しているユーザーのアカウントIDを簡単に取得できます。
AWSアカウントIDとは
AWSアカウントIDとはAWSの利用者が割り当てられる12桁の固有のID番号です。
AWSの各種リソースはアカウントIDに紐づけられます。
アカウントIDはAWSコンソールのWeb画面にログイン後、右上のメニューから確認できます。
アカウントIDは変数定義しなくていい
Terraformで管理する.hclファイルにはアカウントIDをハードコードしたくないので、当初は*.tfvars
ファイルにアカウントIDを書いました。
しかしterraformコマンドを実行するときAWSのユーザーで実行するので、terraformコマンドは実行しているユーザーのアカウントIDを知っているはず。
Terraformでは実行しているユーザーのアカウント情報を取得するためのデータソースが用意されているので変数定義する必要はありません。
TerraformでAWSアカウントIDを取得する方法
TerraformではAWSアカウント情報を取得するためのデータソースaws_caller_identity
が提供されています。
TerraformのコードでAWSアカウントIDを取得できます。
例えば以下は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"
}