首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内联规则的pulumi中的aws安全组

使用内联规则的pulumi中的aws安全组
EN

Stack Overflow用户
提问于 2020-11-25 21:14:24
回答 1查看 126关注 0票数 0

我正在尝试使用内联规则在pulumi中创建安全组,特别是引用另一个安全组作为源的规则。这些组都还不存在,需要从变量的循环中创建,因为可能有相当多的组。

下面是变量的示例:

代码语言:javascript
复制
compute:security_groups:
- name: load-balancer
  inbound:
  - cidr_blocks: null
    from_port: 80
    protocol: tcp
    source_security_group: cache
    to_port: 80
  - cidr_blocks: null
    from_port: 22
    protocol: tcp
    source_security_group: logging
    to_port: 22
- name: cache
  inbound:
  - cidr_blocks: null
    from_port: 6379
    protocol: tcp
    source_security_group: load-balancer
    to_port: 6379
- name: logging
  inbound:
  - cidr_blocks: null
    from_port: 22
    protocol: tcp
    source_security_group: cache
    to_port: 22
  - cidr_blocks: null
    from_port: 5044
    protocol: tcp
    source_security_group: load-balancer
    to_port: 5044

我们应该创建一个名为name的安全组,并为inbound下的每个项目包含一个内联规则。源安全组需要指向source_security_group中引用的组

我得到的最接近的方法是先用SecurityGroupIngressArgs创建规则,然后将它们添加到单独创建的组中。类似于:

代码语言:javascript
复制
env_name = pulumi.get_stack()
default_tags = {'resource-group': env_name, 'environment': env_name, 'managed-by': "pulumi"}


### Securty groups
# Create groups
sg_list = []
for sg in config.require_object('security_groups'):

    # create rules
    inbound_list = []
    for item in sg['inbound']:
        source_group_name = env_name + '-' + item['source_security_group']
        inbound_list.append(aws.ec2.SecurityGroupIngressArgs(
            from_port   = item['from_port'],
            to_port     = item['to_port'],
            protocol    = item['protocol'],
            security_groups = sg_list[source_group_name.id]
        ))

    # create groups
    sg_name = env_name + '-' + sg.get('name')
    sg_list.append(aws.ec2.SecurityGroup(sg_name,
        description = sg.get('description'),
        vpc_id      = kv_vpc['id'],
        ingress     = inbound_list,
        egress      = outbound_list,
        tags        = {**default_tags,**{'Name': sg_name}}
        )
    )

这种方法适用于cidr块,但是使用安全组作为源时,我不能引用尚未创建的安全组id。我不确定如何用pulumi来构建这个结构。

EN

回答 1

Stack Overflow用户

发布于 2020-11-25 22:54:08

要记住的关键一点是,当你写这篇文章的时候,当它运行的时候,一些资源还没有被创建(要么是因为AWS需要一段时间来创建东西,要么是因为它还没有达到代码中的那个位置)。

Pulumi通过使用我们所说的"inputs" and "outputs"来处理这个问题(如果您知道javascript/typescript,那么您就会知道我所说的promise是什么意思了),更具体地说,您会希望查看apply示例,其中它使用了一个lambda来获取变量。

在某些情况下,您可以直接使用安全组数组。下面是文档中的一个示例:

代码语言:javascript
复制
import pulumi
import pulumi_aws as aws

size = 't2.micro'
ami = aws.get_ami(most_recent="true",
              owners=["137112412989"],
              filters=[{"name":"name","values":["amzn-ami-hvm-*"]}])

group = aws.ec2.SecurityGroup('webserver-secgrp',
    description='Enable HTTP access',
    ingress=[
        { 'protocol': 'tcp', 'from_port': 22, 'to_port': 22, 'cidr_blocks': ['0.0.0.0/0'] }
    ])

server = aws.ec2.Instance('webserver-www',
    instance_type=size,
    vpc_security_group_ids=[group.id], # reference security group from above
    ami=ami.id)

pulumi.export('publicIp', server.public_ip)
pulumi.export('publicHostName', server.public_dns)

(link to example in docs)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65005424

复制
相关文章

相似问题

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