0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tips: Terraformのマルチリージョン構成で複数のリソースに対するprovider指定を1箇所で行う

Posted at

問題: マルチリージョン構成で、複数のリソースの provider を変更するには、それらを個別に変更しなくてはいけない。

Terraformでは、aliasを使用してマルチリージョンに対するリソースなどの指定が可能。

リソースなどで参照する際には、provider = <PROVIDER NAME>.<ALIAS> として指定する。

resource "aws_instance" "foo" {
  provider = aws.west

  # ...
}

ここで、この <PROVIDER NAME>.<ALIAS> が曲者。

These references are special expressions. Like references to other named entities (for example, var.image_id), they aren't strings and don't need to be quoted. But they are only valid in specific meta-arguments of resource, data, and module blocks, and can't be used in arbitrary expressions.

これは文字列ではなく、${local.aliasname} などterratermの変数として渡すことができない。
そのため、そのままでは、複数のリソースの provider を変更するには、それらを個別に変更しなくてはいけない。

対応: YAMLで管理し、YAMLのアンカー、エイリアスを使用する

tfファイルをYAMLで管理し、使用前に.tf.json形式に変更して使用する運用とする。

rm *.tf.json
ls *.tf.yml | awk '{TO=$1; sub(/.tf.yml$/,".tf.json",TO); print "yq . "$1" > "TO}' | sh -x

その上で、YAMLのアンカー、エイリアスが使用可能。

region-tok.yf.yml
provider:
  ibm:
    region: tok
    alias: tok
region-osa.yf.yml
provider:
  ibm:
    region: osa
    alias: osa

上の内容は同じキーでことなる値のdictionaryとなっているので、単一のYAMLファイルとできない。
別ファイルとして、変換後の.tf.jsonファイルを同一ディレクトリーにおいておくことで、terraformが対応してくれる。
aliasの値はユーザーが決めて良いので、ここではregionと同じ値を使用。

site1.tf.yml
locals:
  provider-site1: &provider-site1 ibm.tok  # YAMLアンカー

resource:
  ibm_pi_instance:
    ins-node4a:
      provider: *provider-site1            # YAMLエイリアス
      ...
    ins-node4b:
      provider: *provider-site1            # YAMLエイリアス
      ...

yq .などによりJSONに変換すると、YAMLエイリアスによる指定箇所はYAMLアンカーで指定した値に変換される。
これにより、YAMLアンカーの行による指定のみで複数リソースに対するprovider指定を変換可能。

残念ながら、JSONにアンカー、エイリアスの様な機能はない様です。
tfファイルにはどうでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?