【问题标题】:Extract security group id from security group name in terraform从 terraform 中的安全组名称中提取安全组 ID
【发布时间】:2020-03-22 23:18:44
【问题描述】:

我正在尝试在 terraform 中编写一个通用脚本来创建 ALB(在 AWS 中)。 安全组已创建 (sg_alb),但不在同一个脚本中。它是预先创建的 我想提取安全组的 id 并传递它 security_groups = ["${aws_security_group.lb_sg.id}"]

我看到了上面引用的示例,但假设安全组是与 ALB 一起创建的

我怎样才能做到这一点?

谢谢 库马尔

【问题讨论】:

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


    【解决方案1】:

    这就是 Terraform data sources 的用途。如果您的 Terraform 模块将安全组名称作为变量获取,那么您将像这样查找安全组:

    data "aws_security_group" "lb_sg" {
      name = var.security_group_name
    }
    

    然后您可以在创建 ALB 时使用数据源,如下所示:

    security_groups = [data.aws_security_group.lb_sg.id]
    

    【讨论】:

    • 我只看到name 声明在lb_sg 数据源中,但你引用了lb_sg.id。你能澄清一下吗?
    • @RodrigoM 数据源的工作方式是 Terraform 根据您提供的参数通过 AWS API 查找数据源。然后数据源的所有属性都可供您以后参考。根据terraform.io/docs/providers/aws/d/security_group.html 此处的文档,您可以通过nameidtagsfiltervpc_id 查找安全组。完成后,idnametagsvpc_iddescription 的值可供参考。
    • 谢谢马克。我想定义它的逻辑位置是在 vars.tf data "aws_security_group" "lb_sg" { name = var.security_group_name }
    • 在 Terraform 中定义它的位置并不重要,但我只会在 vars.tf 中定义 var。我会在与负载均衡器资源相同的文件中定义数据源。这将遵循我在 Terraform 文档和示例中看到的一般做法。
    • 感谢马克的澄清。再做一个小的澄清。我进行了更改并运行了 terraform 计划,我看到这样 + security_groups = [ + "sg-00ee975248d230286", ] 是否意味着它需要安全组的多个值。我只想附加一个安全组
    猜你喜欢
    • 2023-03-29
    • 2019-07-28
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2021-08-08
    • 2021-09-15
    相关资源
    最近更新 更多