はじめに
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 の設定などもハードコーディングせず設定できるようになるはずです。