我对 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
]
}
}
答案 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
}