TerraformでAWSリージョンを取得する方法の備忘録です。
はじめに
TerraformでAWSリソースを書いていると、ARNの指定などでアカウントidやリージョン名を取得したくなるときがあります。
以前、TerraformでAWSアカウントidを取得する方法を書きましたが、リージョンを取得する方法はいつも都度ググっていたので、備忘録を残します。
TerraformでAWSリージョンを取得する
やり方
aws_regionのdata sourceを使って、AWSリージョン名を取得できます。
data "aws_region" "current" {}
このようにdata sourceを定義したら、
data.aws_region.current.name
の形式でリージョン名を取得できます。
# 使用例 source_arn = "arn:aws:events:${data.aws_region.current.name}:123456789012:rule/RunDaily"
必要に応じてリージョン名をlocal変数に格納しておくのも、可読性と変更容易性が上がるのでおすすめです。
locals { region = data.aws_region.current.name }
おまけ: Terraformソースコードを読む
せっかくなので、このaws_region
data sourceの実装をソースコードから読んでみます。
まず場所としては、下記のコードがaws_region
data sourceを実装してそうです。
この中のRead
関数で、aws_region data sourceの実態が実装されています。
プロバイダの現在のリージョンを取得する部分のコードを抜粋します。
// Default to provider current region if no other filters matched if region == nil { matchingRegion, err := FindRegionByName(d.Meta().Region) if err != nil { response.Diagnostics.AddError("finding Region by name", err.Error()) return } region = matchingRegion }
aws_region data sourceの引数に何も指定がない場合、メタデータからproviderの現在のリージョンが取得されているのがわかります。
おわりに
以上、TerraformでAWSリージョンを取得する方法の備忘録をまとめて、ついでにソースコードを読んでみました。
どなたかの参考になれば幸いです。
[関連記事]