AWSTypeScriptInfrastructure_as_codePulumiAdventCalendar2021

Pulumi (TypeScript) で操作中の AWS アカウント ID を取得する

はじめに

AWS のリソースへのアクセス権限 (bucket policy 等) や、ログ出力先の設定などを行うために、アカウント ID を取得する機会があり調査したメモです。

AWS Classic (@pulumi/aws) の場合

AWS Classic (@pulumi/aws) は terraform の AWS Provider を元に作成されています

terraform の場合は aws_caller_identity を利用しますが Pulumi でも同様の data source を利用します terraform で AWS アカウント ID を取得する場合は以下記事を参考ください。

AWS Classic (@pulumi/aws) の場合は getCallerIdentity を利用し取得 getCallerIdentity terraform 同様、 アカウント ID 以外にも ユーザー ID やその ARN を取得することが出来ます

import * as pulumi from "@pulumi/pulumi"
import * as aws from "@pulumi/aws"

const callerIdentity = aws.getCallerIdentity({})
export const accountId = callerIdentity.then((callerIdentity) => callerIdentity.accountId)

getCallerIdentity に渡すことが出来るオプションなどは以下ドキュメントを参照してください

pulumi preview を実行する

以下 AWS Classic package で AWS アカウント ID を取得した結果です。

% pulumi preview
Previewing update (xxxxxx)

View Live: https://app.pulumi.com/mziyut/xxxxxx/xxxxxx/xxxxxx/xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx

     Type                 Name                       Plan
     xxxxxx               xxxxxx

Outputs:
  + accountId    : "xxxxxxxxxxxx"

Resources:
    xxxxxx unchanged

AWS Native の場合

AWS Native Packege を利用している場合は getAccountId を利用することで アカウント ID を取得することができます

import * as pulumi from "@pulumi/pulumi"
import * as awsNative from "@pulumi/aws-native"

export const accountId = awsNative.getAccountId()

pulumi preview を実行する

以下 AWS Native package で AWS アカウント ID を取得した結果です。

% pulumi preview
Previewing update (xxxxxx)

View Live: https://app.pulumi.com/mziyut/xxxxxx/xxxxxx/xxxxxx/xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx

     Type                 Name                       Plan
     xxxxxx               xxxxxx

Outputs:
  + accountId    : {
      + accountId: "xxxxxxxxxxxx"
    }

Resources:
    xxxxxx unchanged

最後に

AWS Classic / AWS Native それぞれで AWS アカウント ID を取得する方法を記載しました。 AWS のリソースへのアクセス権限 (bucket policy 等) や SNS Topic の設定などもハードコーディングせず設定できるようになるはずです。