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

时间:2021-01-22 05:45:54

标签: amazon-web-services terraform terraform-provider-aws

我对 Terraform 很陌生,很高兴使用它。

我已经通过 Terraform 创建了 window7 = ( Window .partitionBy(F.col("name")) .orderBy(F.col("date").cast("timestamp").cast("long")) .rangeBetween(-7 * 60 * 60 * 24 + 1, Window.currentRow) ) window14 = ( Window .partitionBy(F.col("name")) .orderBy(F.col("date").cast("timestamp").cast("long")) .rangeBetween(-14 * 60 * 60 * 24 + 1, Window.currentRow) ) hof_example = ( df .withColumn("value_array", F.collect_list(F.col("value")).over(window7)) .withColumn("sum7", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + x)')) .withColumn("mean7", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + x, acc -> acc / size(value_array))')) .withColumn("max7", F.array_max(F.col("value_array"))) .withColumn("min7", F.array_min(F.col("value_array"))) .withColumn("std7", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + (x - mean7)*(x - mean7), acc -> sqrt(acc / (size(value_array) - 1)))')) .withColumn("count7", F.size(F.col("value_array"))) .drop("value_array") ) hof_example = ( hof_example .withColumn("value_array", F.collect_list(F.col("value")).over(window14)) .withColumn("sum14", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + x)')) .withColumn("mean14", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + x, acc -> acc / size(value_array))')) .withColumn("max14", F.array_max(F.col("value_array"))) .withColumn("min14", F.array_min(F.col("value_array"))) .withColumn("std14", F.expr('AGGREGATE(value_array, DOUBLE(0), (acc, x) -> acc + (x - mean14)*(x - mean14), acc -> sqrt(acc / (size(value_array) - 1)))')) .withColumn("count14", F.size(F.col("value_array"))) .drop("value_array") ) hof_example.show(truncate=True) ,我想将 security group A 附加到 security group A。我试图弄清楚它看起来像 javascript 中的对象分配和展开运算符。

我想象如下,

existing security group B

这是我目前的想法,

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

resource "aws_security_group" "A" {
  ...data.aws_security_group.A,
  ingress = [ ...data.aws_security_group.A.ingress]
}

是否有任何语法或调整来完成我想要的?任何参考和关键字都会让我高兴。


(更新)几乎真实的代码。

resource "aws_security_group" "A" {
  vpc_id = var.a_vpc_id

  ingress = [module.eks.aws_security_group.cluster] // I only want to add this ingress into the existing ingress at security group A
  lifecycle = {
    ignore_changes = [
      ingress // ignore existing ingress
    ]
  }
}

1 个答案:

答案 0 :(得分:2)

<块引用>

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

如果不是由 AWS 使用 aws_security_group 管理,您不能直接修改 terraform (TF) 中的 SG B。要做到这一点,您必须import B 进入 TF。这将允许您修改它。

为了避免导入过程,您可以使用 aws_security_group_rule。这只会创建一个需要的规则,并将其附加到现有的 SG B,即使它不受 TF 管理。

因此,使用 aws_security_group_rule 你可以做到(伪代码):

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
}