“的值不合适”;“角色”:所需字符串terraform12

“的值不合适”;“角色”:所需字符串terraform12,terraform,devops,terraform-provider-aws,terraform0.12+,infrastructure-as-code,Terraform,Devops,Terraform Provider Aws,Terraform0.12+,Infrastructure As Code,我已经为一个应用程序上的bastion入口点编写了一个terraform配置文件 ami = var.ami ebs_optimized = var.ebs_optimized iam_instance_profile = aws_iam_instance_profile.iam_instance_profile instance_type = var.instance_type key_name = "quadops" sub

我已经为一个应用程序上的bastion入口点编写了一个terraform配置文件

    ami = var.ami
    ebs_optimized = var.ebs_optimized
    iam_instance_profile = aws_iam_instance_profile.iam_instance_profile
    instance_type = var.instance_type
    key_name = "quadops"
    subnet_id = var.subnet_id
    user_data = var.user_data
    tags = {
        Name = "${var.name}"
        Business = "Infrastracture"
        app_name = "infra"
        app_env = "${var.env}"
    }
    volume_tags = {
        Name = "${var.name}"
        Business = "Infrastracture"
        app_name = "infra"
        app_env = "${var.env}"
    }
    vpc_security_group_ids = [aws_security_group.security_group.id]
}

resource "aws_security_group" "security_group" {
    name = "${var.name}-security-group"
    vpc_id = var.vpc_id
    ingress {
    from_port        = 22
    to_port          = 22
    protocol         = "tcp"
    cidr_blocks      = ["0.0.0.0/0"]
  }
    egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
  }
    tags = {
        Name = "${var.name}"
        Business = "Infrastracture"
        app_name = "infra"
        app_env = "${var.env}"
    }
}

resource "aws_iam_instance_profile" "iam_instance_profile" {
    name = "${var.name}-iam-instance-profile"
    role = aws_iam_role.iam_role 
    tags = {
        Name = "${var.name}"
        Business = "Infrastracture"
        app_name = "infra"
        app_env = "${var.env}"
    }
}

resource "aws_iam_role" "iam_role" {
    assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      },
    ]
  })
    name = "${var.name}-iam-role"
    tags = {
      Name = "${var.name}-iam-role"
      Business = "Infrastracture"
      app_name = "infra"
      app_env = "${var.env}"
    }
}

resource "aws_eip" "eip" {
    vpc = true
    instance = aws_instance.instance.id
    tags = {
      Name = "${var.name}-eip"
      Business = "Infrastracture"
      app_name = "infra"
      app_env = "${var.env}"
    }
}

resource "cloudflare_record" "record" {
    zone_id = var.zone_id
    name = "bastion.${var.env}"
    type = "A"
    value = "aws_eip.eip.public_ip"
}
在运行计划时,我得到了这个错误


  on .terraform/modules/bastion/main.tf line 49, in resource "aws_iam_instance_profile" "iam_instance_profile":
  49:     role = aws_iam_role.iam_role 
    |----------------
    | aws_iam_role.iam_role is object with 15 attributes

Inappropriate value for attribute "role": string required.

我似乎无法克服这个障碍,因为我认为我正确地调用了资源,但terraform12说它需要一个字符串。我是否错误地传递了值?谢谢。

您正在将整个
aws\u iam\u role
对象传递给导致错误的
role
参数。相反,请尝试传递角色的名称,如下所示:

resource "aws_iam_instance_profile" "iam_instance_profile" {
  role = aws_iam_role.iam_role.name
}

谢谢这帮了我的忙,但在我的例子中,我使用了.id而不是.name作为引用属性。帮了大忙!