Terraform интерполяция в VAR с поиском карты - PullRequest
0 голосов
/ 05 июня 2018

Я экспортировал свои текущие ресурсы, используя Terraforming и получил огромный файл, который содержит все группы безопасности.

Дело в том, что в каждой группе безопасности есть некоторые правила, которые относятсяк идентификаторам групп безопасности - которых нет в новом регионе, на котором я планирую запускать terraform.например:

resource "aws_security_group" "my-group" {
    name        = "my-group"
    description = ""
    vpc_id      = "${var.vpc["production"]}"

    ingress {
        from_port       = 80
        to_port         = 80
        protocol        = "tcp"
        security_groups = ["sg-25bee542"] <-- this ID doesnt exists in the new region i'm planning to work on
        self            = false
    }

Я создал карту со всеми старыми группами безопасности:

variable "security_groups" {
    type    = "map"
    default = {
        "sg-acd22fdb" = "default"
        "sg-52cd3025" = "my-group"
        "sg-25bee542" = "my-group2"
        ...
    }
}

Теперь я пытаюсь разрешить жестко закодированный sg-*id* для соответствующей безопасностиимя группы и интерполируйте его в переменную, чтобы первый пример работал следующим образом:

resource "aws_security_group" "my-group" {
    name        = "my-group"
    description = ""
    vpc_id      = "${var.vpc["production"]}"

    ingress {
        from_port       = 80
        to_port         = 80
        protocol        = "tcp"
        security_groups = ["${aws_security_group.my-group2.id}"] <-- the 'my-group2' should be resolved from the map variable
        self            = false
    }

Что-то вроде:

resource "aws_security_group" "my-group" {
    name        = "my-group"
    description = ""
    vpc_id      = "${var.vpc["production"]}"

    ingress {
        from_port       = 80
        to_port         = 80
        protocol        = "tcp"
        security_groups = ["${aws_security_group.[lookup(security_groups,sg-25bee542]].id}"] <-- the 'my-group2' string should be resolved from the map variable by looking its sg ID
        self            = false
    }

Надеюсь, я прояснил этот вопрос ...есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Как и предполагалось, вам нужно повернуть карту вспять.Вы можете либо изменить его в начале координат (объявление переменной), либо использовать функцию transpose(map).что-то вроде

${transpose(var.security_groups)["sg-acd22fdb"]}

может работать

0 голосов
/ 05 июня 2018

Способ доступа к переменной карты в terraform выглядит следующим образом

${var.security_groups["sg-acd22fdb"]}

Если вы хотите получить sg_ID, вы можете создать карту наоборот.

variable "security_groups" {
    type    = "map"
    default = {
        "default = "sg-acd22fdb"
        "my-group" = "sg-52cd3025"
        "my-group2" = "sg-25bee542"
        ...
    }
}

А потом используйте

${var.security_groups["my-group2"]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...