2017-06-07 5 views
1

私は複数のキューに添付しようとしているaws_iam_policy_documentを持っています。Terraform - ポリシー内の各ステートメントに正確に1つのリソースが必要です

私はterraform planを実行してもエラーは表示されません。しかし、実行しているterraform私は得る:Policy is invalid. Reason: Each statement in the policy should have exactly one resource。上記のキューにアタッチされているときにキューの名前で置き換えられるリソース名の変数に入れられる方法はありますか?

これは私のキューおよびキュー政策がどのように見えるかです:

resource "aws_sqs_queue" "queue_name" { 
    name      = "queue_name_${var.environment}" 
    visibility_timeout_seconds = 30 
    message_retention_seconds = 345600 
    max_message_size   = 262144 
    delay_seconds    = 0 
    receive_wait_time_seconds = 0 
} 


resource "aws_sqs_queue_policy" "queue_name_policy" { 
    queue_url = "${aws_sqs_queue.queue_name.id}" 
    policy = "${data.aws_iam_policy_document.my_policy.json}" 
} 
+0

プリンシパルを 'type'から' AWS'に変更します。 – BMW

答えて

0

は、私が装着されたときにキューの名前で置換されています、リソース名の変数に置くことができる方法はありますキューに?

テラフォームには、count meta-parameterを使用したループ反復メカニズムがあります。

私はずっとこれを使用していないと私は間違っている可能性が小さな免責事項で、私はこれは動作するはずだと思うので、私は、下記の実際 テストコードに現在できないんだ

variable "number_of_queues" { 
    default = 3 
} 

resource "aws_sqs_queue" "queue_name" { 
    count = "${var.number_of_queues}" 
    name = "queue_name_${count.index}" 
    // Other properties omitted 
} 

data "aws_iam_policy_document" "my_policy" { 
    count = "${var.number_of_queues}" 
    statement { 
    resources = [ 
     "${aws_sqs_queue.queue_name[count.index].arn}", 
    ] 

    // Other properties omitted 
    } 
} 

resource "aws_sqs_queue_policy" "queue_name_policy" { 
    count = "${var.number_of_queues}" 
    queue_url = "${aws_sqs_queue.queue_name[count.index].id}" 
    policy = "${data.aws_iam_policy_document.my_policy[count.index].json}" 
} 

あなたは大括弧の代わりにlookup() functionを使用しなければならない可能性があります。

関連する問題