Amazon ec2 Terraform-使用实例配置文件启动EC2实例时存在时间问题

Amazon ec2 Terraform-使用实例配置文件启动EC2实例时存在时间问题,amazon-ec2,terraform,Amazon Ec2,Terraform,我正在使用Terraform创建AWS基础设施 我有一个模块,它创建一个“aws_iam_角色”、“aws_iam_角色策略”和一个“aws_iam_实例配置文件”,然后用该aws_iam_实例配置文件启动一个EC2实例 “地形规划”按预期工作,但使用“地形应用”时,我始终会遇到以下错误: * aws_instance.this: Error launching source instance: InvalidParameterValue: IAM Instance Profile "arn

我正在使用Terraform创建AWS基础设施

我有一个模块,它创建一个“aws_iam_角色”、“aws_iam_角色策略”和一个“aws_iam_实例配置文件”,然后用该aws_iam_实例配置文件启动一个EC2实例

“地形规划”按预期工作,但使用“地形应用”时,我始终会遇到以下错误:

* aws_instance.this: Error launching source instance: InvalidParameterValue:   IAM Instance Profile "arn:aws:iam::<deleted>:instance-profile/<deleted>" has no associated IAM Roles
*aws_实例。此:启动源实例时出错:InvalidParameterValue:IAM实例配置文件“arn:aws:IAM:::实例配置文件/”没有关联的IAM角色
如果我立即重新运行“terraform apply”,它将毫无问题地启动EC2实例。如果我运行一个“地形图”,它确实显示实例依赖于概要文件

由于第二个“应用”是成功的,这意味着实例策略及其所包含的所有内容都得到了正确的创建,不是吗

我试着添加一个“dependence_-on”,但它没有帮助,但是因为图表已经显示了依赖关系,我不确定这是怎么回事


有人有这个问题吗?

竞争条件在服务之间很常见,因为规模的关系,状态最终是一致的。在IAM中尤其如此,您通常会创建一个角色,并为EC2等服务提供一个信任关系,以便将该角色用于EC2实例,但由于IAM在AWS中的传播方式不同,在创建后的几秒钟内,EC2服务将无法使用该角色

我使用的解决方案不是很好,但可以完成任务,它是在每个IAM角色或策略附件上放置以下provisioner,以便为传播更改提供时间:

resource“aws\u iam\u角色”“some\u角色”{
...
供应人“本地执行官”{
command=“sleep 10”
}

在这种情况下,您可以使用操作超时。超时完全由提供程序中的资源类型实现来处理,但提供这些功能的资源类型遵循定义名为超时的子块的约定,该子块有一个嵌套参数,该参数以具有可配置超时值的每个操作命名。每个se参数采用持续时间的字符串表示,例如60分钟为“60m”,10秒为“10s”,或两小时为“2h”

resource "aws_db_instance" "example" {
  # ...

  timeouts {
    create = "60m"
    delete = "2h"
  }
}

Ref:

你能上传你的tf文件,显示这些是如何粘合在一起的吗?我在terraform上遇到了一些奇怪的时间问题,但这些问题与SQS相关,而不是IAM…可能相关: