如何将区域变量传递到 vpc 模块内的 local-exec

Posted

技术标签:

【中文标题】如何将区域变量传递到 vpc 模块内的 local-exec【英文标题】:How to pass region var into local-exec inside vpc module 【发布时间】:2021-05-05 11:05:30 【问题描述】:

因此,当您在 AWS 中创建全局加速器时,尽管您没有明确指定创建安全组,但仍会自动创建一个安全组,因为它是全局加速器的依赖项。当我们运行 terraform destroy 时,安全组仍然存在。这是一个已知问题,HashiCorp 建议手动删除 GA。为了避免这种情况,我考虑过运行类似的东西:

resource "aws_vpc" "vpc" 
    provisioner "local-exec" 
      when    = destroy
      command = "aws ec2 delete-security-group --group-id $(aws ec2 describe-security-groups --filter Name=group-name,Values='GlobalAccelerator' Name=vpc-id,Values=$self.id --region $var.region --output text | awk 'print $5') --region $var.region"
    
  cidr_block           = local.cidr_block
.
.
.

aws cli 命令有效。我已经测试过了。我不确定如何传递区域变量。 var.region 失败,因为它不是自我论证。我也无法按如下方式添加区域块: region = var.region 因为 region 不是受支持的参数。 如何传递 region var 以运行 cli 命令?

谢谢

【问题讨论】:

你不想做的事情并不是那么简单。有整个 github issue 专门讨论这个主题。因此,我之前的回答是不正确的。 为 ec2 delete-security-group 命令创建一个 shell 脚本包装器可能是一个想法,您可以在其中手动设置区域?有点hacky,但如果区域保持不变,应该可以工作吗? 【参考方案1】:

我建议为全局加速器显式创建安全组并避免包装脚本的开销或尝试删除自动创建的安全组,除非有特定原因不这样做?这样 terraform 就会用它来摧毁安全组。

【讨论】:

以上是关于如何将区域变量传递到 vpc 模块内的 local-exec的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量从 EMR 集群传递到 Jupyter Notebook %%local 实例?

无法为模块内的子网引用 vpc_id

Terraform 模块 - 输出变量作为另一个模块的输入

pytest使用parametrize将参数化变量传递到fixture

在模块内的模块之间传递 Terraform 变量?

terraform - 将 vpc_id 参数从不同的 VPC 传递到多个子网