首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将不同的安全组附加到不同的EC2s

将不同的安全组附加到不同的EC2s
EN

Stack Overflow用户
提问于 2020-08-24 16:08:27
回答 2查看 1.6K关注 0票数 2

要求:-我有多个EC2s组(比如两个组),其中每个组包含6个EC2。我要把不同的SG附加到每一组。

例子:-

Group1包含:- Head1,子:EC2-1,EC2-2.6,需要附加SG1

Group2包含:- Head2,子:EC2-3,EC2-4 ...6,需要附加SG2。

我不想编写单独的资源"aws_instance" Head-Module

代码语言:javascript
复制
    resource "aws_security_group" "sg" {
    count       = var.ec2_instance_count
  name        = "${local.account}${count.index}"
  vpc_id      = local.vpc_id
}

  resource "aws_instance" "ec2_instance" {
  count           = var.ec2_instance_count
  security_groups = [element(aws_security_group.sg.*.id, count.index)]
}

儿童单元:

代码语言:javascript
复制
  data "aws_security_groups" "data_security_group" {
      filter {
        name   = "group-name"
        values =  ["${local.account}${count.index}"]
      }
    }
   resource "aws_instance" "ec2_child" {
  count           = var.ec2_instance_count*var.numberofchild
  security_groups = [element(aws_security_group.data_security_group.*.id, count.index)]
}

错误:错误启动源实例: InvalidGroup.NotFound:在VPC 'vpc-ghhje85abcy‘状态代码: 400中不存在安全组'terraform-2020082 4151444795600000001’,请求id: 9260fd88-a03a-4c46-b67c-3287594cdab5。

在main.tf第68行中,在资源"aws_instance“"ec2_instance”中: 68:资源"aws_instance“”ec2_instance“{

注意:我使用的是data "aws_security_groups"而不是data "aws_security_group"。如果我使用后一个安全组,我知道我只能在数据资源中得到一个SG,这会给我带来一个错误:多个安全组匹配;通过使用data "aws_security_groups",我可以向前移动,这个错误就消失了。但是,我面临的最新错误是:如上所述的InvalidGroup.NotFound。

更新:我可以使用数据资源,并能够将不同的SG附加到不同的EC2上。唯一的问题是随机排序。对于第1组的所有6个EC2,我希望他们分配第一个SG,等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-24 16:21:52

不要使用数据,而是使用计数创建resource "aws_security_group",就像您在resource "aws_instance"上所做的那样,您可以直接引用它们……

代码语言:javascript
复制
resource "aws_security_group" "sg" {
  count       = var.ec2_instance_count
  name        = "${local.account}${count.index}"
  vpc_id      = local.vpc_id
}

resource "aws_instance" "ec2_instance" {
  count           = var.ec2_instance_count
  security_groups = [element(aws_security_group.sg.*.id, count.index)]
}
票数 2
EN

Stack Overflow用户

发布于 2020-10-17 11:51:29

谢谢Helder,我用count创建了资源。这不是庞大的基础设施,而是相当复杂的基础设施。8组(每组有1名家长和6名儿童EC2),所有父母均有1名外部SG。每组8例,每组8例)。我必须遵循配置顺序,因为要求将“父主机名”传递给"Childs用户数据“中的相应的Childs组,因此我必须将它们保存在一个单独的模块中,并使用"data”资源进行重用。

ParentModule:

代码语言:javascript
复制
resource "aws_instance" "ec2_instance" {
  count                   = tonumber(var.mycount)
 vpc_security_group_ids  = [data.aws_security_group.external_security_group.id, element(data.aws_security_group.internal_security_group.*.id, count.index)]
...
}
resource "aws_security_group" "internal_security_group" {
  count       = tonumber(var.mycount)
  name        = "${var.internalSGname}${count.index}"
}

resource "aws_security_group" "external_security_group" {
  name        = ${var.external_sg_name}"
}

ChildModule:利用数据资源,利用动态映射将SG分配给合适的EC2组。

代码语言:javascript
复制
data "aws_security_group" "internal_security_group" {
  count = tonumber(var.mycount)
  filter {
    name   = "group-name"
    values = "${var.internalSGname}${count.index}"]
  }
}
resource "aws_instance" "ec2_child" {
  count                   = local.child_count * tonumber(var.mycount)
  vpc_security_group_ids  = ["${element(data.aws_security_group.internal_security_group.*.id, "${lookup(local.SG_lookup, count.index, 99)}")}"]

variable.tf
locals{
 SG_lookup = {
    for n in range(0, (local.child_count * tonumber(var.mycount))) :
    n => "${floor(((n) / local.child_count))}"
  }
 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63564712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档