首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对流层在CloudFormation中添加s3bucket条件

使用对流层在CloudFormation中添加s3bucket条件
EN

Stack Overflow用户
提问于 2015-02-03 21:54:41
回答 1查看 2K关注 0票数 1

下面的代码适用于EC2,它在输出中添加条件语句,但对于S3,它不生成条件语句。我可以手动添加此语句以使其工作,但这有许多缺点。

代码语言:javascript
复制
from __future__ import print_function
from troposphere import (Template, Parameter, Ref, Condition, Equals)
from troposphere import ec2
from troposphere import s3

parameters = {
    "One": Parameter(
        "One",
         Type="String",
    ),
}

conditions = {
    "OneEqualsFoo": Equals(
        Ref("One"),
        "Foo"
  ),
}

resources = {
    "MyS3bucket": s3.Bucket(
         "MybucketName",
         Condition="OneEqualsFoo",
   ),

   "Ec2Instance": ec2.Instance(
       "Ec2Instance",
       Condition="OneEqualsFoo",
       ImageId="ami-1234556",
       InstanceType="t1.micro",
       KeyName="mykeypair",
       SecurityGroups=["default"],
   )
}

def template():
     t = Template()
 for p in parameters.values():
    t.add_parameter(p)
 for k in conditions:
    t.add_condition(k, conditions[k])
 for r in resources.values():
    t.add_resource(r)
return t
print(template().to_json())

输出结果此结果在S3模板部分中缺少条件语句。

代码语言:javascript
复制
{
"Conditions": {
    "OneEqualsFoo": {
        "Fn::Equals": [
            {
                "Ref": "One"
            },
            "Foo"
        ]
    }
},
"Parameters": {
    "One": {
        "Type": "String"
    }
},
"Resources": {
    "Ec2Instance": {
        "Condition": "OneEqualsFoo",
        "Properties": {
            "ImageId": "ami-1234556",
            "InstanceType": "t1.micro",
            "KeyName": "mykeypair",
            "SecurityGroups": [
                "default"
            ]
        },
        "Type": "AWS::EC2::Instance"
    },
    "MybucketName": {
        "Type": "AWS::S3::Bucket"
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2015-02-03 23:02:04

我认为您需要在添加Properties之前添加Conditions

所以像这样的事情应该有效:

代码语言:javascript
复制
 "MyS3bucket": s3.Bucket(
         "MybucketName",
         Tags=s3.Tags(),
         Condition="OneEqualsFoo"
   ),

代码语言:javascript
复制
    "MyS3bucket": s3.Bucket(
         "MybucketName",
         AccessControl=s3.PublicRead,
         Condition="OneEqualsFoo"
   )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28309495

复制
相关文章

相似问题

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