2017-09-21 15 views
1

私はいくつかの開発環境と本番環境で同じテラフォームテンプレートを使用したいと思います。Terraformで動的リソース名を使用するにはどうすればよいですか?

私のアプローチ:私が理解しているように、リソース名は一意である必要があり、terraformはリソースの状態を内部的に保存します。そのため、リソース名に変数を使用しようとしましたが、サポートされていないようです。

$ terraform plan 
var.env1 
    Enter a value: abc 

Error asking for user input: Error parsing address 'aws_sqs_queue.SqsIntegrationOrderIn${var.env1}': invalid resource address "aws_sqs_queue.SqsIntegrationOrderIn${var.env1}" 

マイテラフォームテンプレート::私は、エラーメッセージを取得

variable "env1" {} 

provider "aws" { 
     region = "ap-southeast-2" 
} 

resource "aws_sqs_queue" "SqsIntegrationOrderIn${var.env1}" { 
     name = "Integration_Order_In__${var.env1}" 
     message_retention_seconds = 86400 
     receive_wait_time_seconds = 5 
} 

は、私が考えるに、いずれかの私のアプローチは間違っている、または構文。何か案は?

+1

terraformモジュールで管理する場合、リソース名を動的に再定義する必要はありません。 – BMW

答えて

1

環境ごとに異なるworkspaceを使用することをお勧めします。これは、あなたがこのように設定を指定することができます:

variable "env1" {} 

provider "aws" { 
     region = "ap-southeast-2" 
} 

resource "aws_sqs_queue" "SqsIntegrationOrderIn" { 
     name = "Integration_Order_In__${var.env1}" 
     message_retention_seconds = 86400 
     receive_wait_time_seconds = 5 
} 

は、AWSでの名前の衝突を避けるために(例えば、名前に含めて)環境に応じて「aws_sqs_queue」リソースの名前を作るようにしてください。

1

リソース名の内部を補間することはできません。代わりに、@BMWがコメントに記載されているように、SqsIntegrationOrderInを含むterraformモジュールを作成し、envという変数が必要です。次に、モジュールを2回使用することができ、それらは単に衝突しません。私は答えたsimilar questionを見ることもできます。

関連する問題