2017-12-09 16 views
0

TerraformをさまざまなAWSリージョンにデプロイするように設定しようとしていますが、スクリプト内のいくつかの値が変化しているので、コマンドラインにリージョンを送信しています。私は-var "region = east"を使用しています。たとえば、この領域を正しく割り当てることによって他のモジュールで動作します。この値を使用しているmain.tfは正しく設定されています。Terraformルックアップに補間値を取得する最も良い方法

リソースの作成には、regionをマップされた値として使用するルックアップがあり、amisはリージョンのマップであり、このリソースに対して一致するamiのみが必要です。検索とドキュメントのいくつかを見ている中で、私がいないのに

ami = "${lookup(var.amis, $${var.region})}" 

または中間値として

variables "map_region" { 
    default = "${var.region}" 
} 
ami = "${lookup(var.amis, var.map_region)}" 

はどちらも、私の構文エラーを与える:私は、コマンドライン補間を使用して、二つの方法を試してみましたterraformがこれをサポートする場所を参照してください。誰かが何らかの方法でこれをうまくやったか、コマンドライン変数を使ってマップから値を引き出す良い方法を知っていますか?

EDIT: Terraformモジュールを実行するためにBashスクリプトを使用していたため、問題の一部が表示されませんでした。これは破壊を実行していた - フォース、その後適用されます。ビルドの一環としてコマンドライン変数を検討していたので、destroyコマンドにそれらを追加しませんでした。これは要求された場所であり、入力を促すプロンプトです。一旦、-varコマンドをdestroyコマンドに追加しただけでなく、これをすべて適用しました。

+0

補間を使うときは、 '$ {}'を一組だけ必要とします。内部で何かがレンダリングされます。私はあなたがあなたの変数の内部に補間を持つことができるとは思わない。 '$ {lookup(var.amis、 'us-east-1')}'はあなたが望むものを返しますか? –

+0

はい、それは私が望むものを返しますが、私はどこかで補間された値を使う必要があるので、異なる地域に展開するためにスクリプトを再利用することができます。 – MichaelF

答えて

1
ami = "${lookup(var.amis, $${var.region})}" 

$$inline templates内補間変数にのみ有効ですので、間違っています。あなたはlookupのキーとしてマップを渡しているので、

variables "map_region" { 
    default = "${var.region}" 
} 
ami = "${lookup(var.amis, var.map_region)}" 

は動作しません。

Terraform consoleは、補間された式を試すための便利なツールです。などapply、コンソールアップ

$ cat vars.tf 
variable "amis" { 
    type = "map" 

    default { 
    "us-east-2" = "ami-58f5db3d" 
    "us-east-1" = "ami-fad25980" 
    } 
} 

variable "region" {} 

火はあなたが​​でやっているだろうかエミュレートするためregionに値を渡す:次のように変数が定義されていると仮定し

$ terraform console -var "region=us-east-1" 
> var.region 
us-east-1 
> lookup(var.amis, var.region) 
ami-fad25980 

・ホープ、このことができます。

+0

私は変数ファイルで変数 "region" {}を使用するときにこれを試しましたが、apply-terraform apply -var "region = us-east-1"を使用するときにvar.regionを追加するプロンプトが表示されます – MichaelF

+0

再生中変数を設定しているbashスクリプトが何らかの形で正しく設定されていないように見えます。 Bashでterraform apply -var region = $ {var_region}を使用しても機能しませんが、コマンドラインで変数を設定したコマンドを使用すると、非常に奇妙な – MichaelF