Amazon web services 使用Terraform更新和附加AWS上现有资源的新属性

Amazon web services 使用Terraform更新和附加AWS上现有资源的新属性,amazon-web-services,terraform,terraform-provider-aws,Amazon Web Services,Terraform,Terraform Provider Aws,我对Terraform非常陌生,很兴奋能使用它 我已经通过Terraform创建了安全组A,我想将安全组A附加到现有安全组B中。我试图弄清楚它看起来像javascript中的对象赋值和扩散操作符 我想象如下 data "aws_security_group" "A" { id = "<id>" } resource "aws_security_group" "A" { ...

我对Terraform非常陌生,很兴奋能使用它

我已经通过Terraform创建了
安全组A
,我想将
安全组A
附加到
现有安全组B
中。我试图弄清楚它看起来像javascript中的对象赋值和扩散操作符

我想象如下

data "aws_security_group" "A" {
  id = "<id>"
}

resource "aws_security_group" "A" {
  ...data.aws_security_group.A,
  ingress = [ ...data.aws_security_group.A.ingress]
}
是否有任何语法或调整来实现我想要的?任何引用和关键字都会让我高兴


(更新)几乎真实的代码

variable "internal_vpc_id" {
  default = "vpc-12345678"
}

module "eks" {
 ....
}

resource "aws_security_group" "internal" {
  vpc_id = var.internal_vpc_id
  
  ingress = [
               module.eks.aws_security_group.cluster,
               module.eks.aws_security_group.workers, 
               module.eks.aws_security_group_rule.cluster_egress_internet,
            module.eks.aws_security_group_rule.cluster_https_worker_ingress
            ]
  lifecycle {
    ignore_changes = [
      ingress
    ]
  }
}

我想将安全组A附加到现有的安全组B中

如果不是由AWS使用
AWS\u security\u group
管理,则不能直接修改terraform(TF)中的SG B。要做到这一点,你必须将B转换为TF。这将允许您修改它

要避免导入过程,可以使用。这将只创建需要的规则,并将其附加到现有的SG B,即使它不是由TF管理的

因此,使用
aws\u security\u group\u rule
可以执行(伪代码):

我想将安全组A附加到现有的安全组B中

如果不是由AWS使用
AWS\u security\u group
管理,则不能直接修改terraform(TF)中的SG B。要做到这一点,你必须将B转换为TF。这将允许您修改它

要避免导入过程,可以使用。这将只创建需要的规则,并将其附加到现有的SG B,即使它不是由TF管理的

因此,使用
aws\u security\u group\u rule
可以执行(伪代码):


你能提供实际的、可复制的代码吗?因为它不清楚什么是
…data.aws\u security\u group.A、
ingres=[…data.aws\u security\u group.A.ingres]
,以及其他的意思。@Marcin更新了,我正在尝试的是当前代码,与示例没有什么不同。你能提供实际的、可复制的代码吗,因为它不清楚什么是
…data.aws\u security\u group.A,
ingres=[…data.aws\u security\u group.A.ingres]
,以及其他的意思。@Marcin更新了,这是我正在尝试的当前代码,与示例没有什么不同。谢谢。我是否可以在不导入的情况下访问
数据“aws\u安全组”B{id=“SG-B-id”}
?我对导入的用法相当困惑是的<代码>数据仅获取有关现有资源的信息<代码>导入将允许您完全管理要导入的资源。我认为我必须同时迁移和使用现有资源中的所有资源。谢谢。我是否可以在不导入的情况下访问
数据“aws\u安全组”B{id=“SG-B-id”}
?我对导入的用法相当困惑是的<代码>数据仅获取有关现有资源的信息<代码>导入将允许您完全管理要导入的资源。我认为我必须采取两种方式来迁移和使用现有资源中的所有资源。
variable "internal_vpc_id" {
  default = "vpc-12345678"
}

module "eks" {
 ....
}

resource "aws_security_group" "internal" {
  vpc_id = var.internal_vpc_id
  
  ingress = [
               module.eks.aws_security_group.cluster,
               module.eks.aws_security_group.workers, 
               module.eks.aws_security_group_rule.cluster_egress_internet,
            module.eks.aws_security_group_rule.cluster_https_worker_ingress
            ]
  lifecycle {
    ignore_changes = [
      ingress
    ]
  }
}

data "aws_security_group" "B" {
  id = "SG-B-id"
}

resource "aws_security_group_rule" "ruleB" {
  type                       = "ingress"
  from_port                  = 0
  to_port                    = 65535
  protocol                   = "tcp"
  source_security_group_id   = aws_security_group.A.id
  security_group_id          = data.aws_security_group.B.id
}