代码之家  ›  专栏  ›  技术社区  ›  Anthony Kong

如何找出在这个地形代码中使用的属性?

  •  0
  • Anthony Kong  · 技术社区  · 6 年前

    当我跑的时候 terraform plan ,我得到了这个错误:

    错误:加载/Users/antkong/infrastructure/windows server/main时出错。tf:错误读取 aws_实例[worker]的配置:aws_iam_角色。windows_服务器_角色: 资源变量必须由三部分组成:类型。名称ATTR in:

    以下是相关代码

    resource "aws_instance" "worker" {
      ami                  = "${data.aws_ami.windows_server.image_id}"
      instance_type        = "${var.instance}"
      iam_instance_profile = "${aws_iam_role.windows_server_role}"  // <- ERROR here
      get_password_data    = "true"
    

    我想我可以用

    iam_instance_profile = "${aws_iam_role.windows_server_role.id}" 
    

    iam_instance_profile = "${aws_iam_role.windows_server_role.arn}" 
    

    然而,这在文件中并不明显。

    除了在运行时遇到错误,我怎样才能找到它呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Avichal Badaya    6 年前

    就地形文件达成一致可能会更好。我确实发现你需要参考 aws_iam_instance_profile 而不是 aws_iam_role 这里是指向doc的链接- https://www.terraform.io/docs/providers/aws/r/iam_instance_profile.html .

    代码看起来像

    resource "aws_instance" "worker" {
      ami                  = "${data.aws_ami.windows_server.image_id}"
      instance_type        = "${var.instance}"
      iam_instance_profile = "${aws_iam_instance_profile.windows_server.name}"
      get_password_data    = "true"
    ....
    }
    

    正在从上面共享的链接复制实例配置文件def:

    resource "aws_iam_instance_profile" "windows_server" {
      name = "windows_server_instance_profile"
      role = "${aws_iam_role.windows_server.name}"
    }
    
    resource "aws_iam_role" "windows_server" {
      name = "windows_server_role"
      path = "/"
    
      assume_role_policy = <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Principal": {
                   "Service": "ec2.amazonaws.com"
                },
                "Effect": "Allow",
                "Sid": ""
            }
        ]
    }
    EOF
    }