Terraform - значения переменных интерполяции

user2086572 спросил: 28 апреля 2018 в 09:44 в: amazon-web-services

Я пытаюсь вызвать переменную внутри ниже, но мне нужно вручную ввести ее вручную, немного застрявшую. Как заставить Terraform автоматически вставлять значение переменной.

resource "aws_iam_role" "aws-admin-role" {
  name        = "AWS-AdminAccess"
  description = "Administration of Account from AWSxx"  assume_role_policy = <<EOF
{  
  "Version":"2012-10-17",
  "Statement":[  
    {  
      "Effect":"Allow",
      "Principal":{  
        "AWS":"arn:aws:iam::INSERTACCOUNTMANUALLY:root"
      },
      "Action":"sts:AssumeRole",
      "Condition":{        }
    }
  ]
}
EOF
}

1 ответ

ydaetskcoR ответил: 28 апреля 2018 в 10:07

Terraform позволяет вам интерполировать значения, которые он знает, например, переменные или выходы из источников данных, ресурсов или модулей.

В вашем случае вы можете использовать источник данных aws_caller_identity для динамически извлекать идентификатор учетной записи вызывающего и вставлять ее в свою политику IAM примерно так:

data "aws_caller_identity" "current" {}resource "aws_iam_role" "aws-admin-role" {
  name        = "AWS-AdminAccess"
  description = "Administration of Account from AWSxx"  assume_role_policy = <<EOF
{  
  "Version":"2012-10-17",
  "Statement":[  
    {  
      "Effect":"Allow",
      "Principal":{  
        "AWS":"arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"
      },
      "Action":"sts:AssumeRole",
      "Condition":{        }
    }
  ]
}
EOF
}

Если вместо этого вы хотите использовать переменную для ссылки на другой AWS вы могли бы сделать что-то вроде этого:

variable "account_id" {}resource "aws_iam_role" "aws-admin-role" {
  name        = "AWS-AdminAccess"
  description = "Administration of Account from AWSxx"  assume_role_policy = <<EOF
{  
  "Version":"2012-10-17",
  "Statement":[  
    {  
      "Effect":"Allow",
      "Principal":{  
        "AWS":"arn:aws:iam::${var.account_id}:root"
      },
      "Action":"sts:AssumeRole",
      "Condition":{        }
    }
  ]
}
EOF
}
user2086572 ответил: 28 апреля 2018 в 02:25
Спасибо, мне придется изучить первый вариант. Не уверен, что это сработает, поскольку я вхожу в другой аккаунт, откуда он работает. Но если это происходит вживую, это может хорошо работать с использованием этого метода.
user2086572 ответил: 28 апреля 2018 в 02:26
Я также попытался использовать этот "AWS": "arn: aws: iam :: $ {var.aws_admin_account}: root", так похожий на ваши другие параметры, это то, что казалось проигнорированным, даже если оно находится в файле переменных