troposphere

2025-12-11 0 417

troposphere

建立状态

关于

troposphere – 创建AWS云形式描述的库

troposphere库可以通过编写Python代码来描述AWS资源来更轻松地创建AWS CloudFormation JSON。 troposphere还通过热量提供了对开放式空间资源的一些基本支持。

为了促进捕获云形式或JSON错误,图书馆具有属性和类型检查,其中内置了这些库。

安装

可以通过发出Python的PIP分配系统来安装troposphere :

$ pip install troposphere

使用AWAC安装troposphere (建议的软依赖):

$ pip install troposphere [policy]

另外,您可以使用setup.py通过克隆此存储库和发行来安装:

$ python setup.py install  # you may need sudo depending on your python installation 

例子

创建实例的一个简单示例将看起来像这样:

troposphere import Ref, Template
>>> import troposphere .ec2 as ec2
>>> t = Template()
>>> instance = ec2.Instance(\”myinstance\”)
>>> instance.ImageId = \”ami-951945d0\”
>>> instance.InstanceType = \”t1.micro\”
>>> t.add_resource(instance)
< troposphere .ec2.Instance object at 0x101bf3390>
>>> print(t.to_json())
{
\”Resources\”: {
\”myinstance\”: {
\”Properties\”: {
\”ImageId\”: \”ami-951945d0\”,
\”InstanceType\”: \”t1.micro\”
},
\”Type\”: \”AWS::EC2::Instance\”
}
}
}
>>> print(t.to_yaml())
Resources:
myinstance:
Properties:
ImageId: ami-951945d0
InstanceType: t1.micro
Type: AWS::EC2::Instance\”>

 > >> from troposphere import Ref , Template
> >> import troposphere . ec2 as ec2
> >> t = Template ()
> >> instance = ec2 . Instance ( \"myinstance\" )
> >> instance . ImageId = \"ami-951945d0\"
> >> instance . InstanceType = \"t1.micro\"
> >> t . add_resource ( instance )
< troposphere . ec2 . Instance object at 0x101bf3390 >
> >> print ( t . to_json ())
{
    \"Resources\" : {
        \"myinstance\" : {
            \"Properties\" : {
                \"ImageId\" : \"ami-951945d0\" ,
                \"InstanceType\" : \"t1.micro\"
            },
            \"Type\" : \"AWS::EC2::Instance\"
        }
    }
}
> >> print ( t . to_yaml ())
Resources :
    myinstance :
        Properties :
            ImageId : ami - 951945 d0
            InstanceType : t1 . micro
        Type : AWS :: EC2 :: Instance

另外,可以使用参数代替属性:

 > >> instance = ec2 . Instance ( \"myinstance\" , ImageId = \"ami-951945d0\" , InstanceType = \"t1.micro\" )
> >> t . add_resource ( instance )
< troposphere . ec2 . Instance object at 0x101bf3550 >

and add_resource()返回对象,使其易于与Ref():

 > >> instance = t . add_resource ( ec2 . Instance ( \"myinstance\" , ImageId = \"ami-951945d0\" , InstanceType = \"t1.micro\" ))
> >> Ref ( instance )
< troposphere . Ref object at 0x101bf3490 >

错误检查的示例(为了清楚起见,已删除了全反馈):

在AWS资源上设置了错误的属性:

troposphere.ec2 as ec2
>>> ec2.Instance(\”ec2instance\”, image=\”i-XXXX\”)
Traceback (most recent call last):

AttributeError: AWS::EC2::Instance object does not support attribute image\”>

 > >> import troposphere . ec2 as ec2
> >> ec2 . Instance ( \"ec2instance\" , image = \"i-XXXX\" )
Traceback ( most recent call last ):
...
AttributeError : AWS :: EC2 :: Instance object does not support attribute image

AWS资源属性的错误类型:

 > >> ec2 . Instance ( \"ec2instance\" , ImageId = 1 )
Traceback ( most recent call last ):
...
TypeError : ImageId is < type \'int\' > , expected < type \'basestring\' >

AWS资源缺少所需的属性:

troposphere import Template
>>> import troposphere .ec2 as ec2
>>> t = Template()
>>> t.add_resource(ec2.Subnet(\”ec2subnet\”, VpcId=\”vpcid\”))
< troposphere .ec2.Subnet object at 0x100830ed0>
>>> print(t.to_json())
Traceback (most recent call last):

ValueError: Resource CidrBlock required in type AWS::EC2::Subnet (title: ec2subnet)\”>

 > >> from troposphere import Template
> >> import troposphere . ec2 as ec2
> >> t = Template ()
> >> t . add_resource ( ec2 . Subnet ( \"ec2subnet\" , VpcId = \"vpcid\" ))
< troposphere . ec2 . Subnet object at 0x100830ed0 >
> >> print ( t . to_json ())
Traceback ( most recent call last ):
...
ValueError : Resource CidrBlock required in type AWS :: EC2 :: Subnet ( title : ec2subnet )

当前支持的资源类型

  • AWS资源类型
  • OpenStack资源类型

复制单个实例样本看起来像这样

troposphere import Base64, FindInMap, GetAtt
from troposphere import Parameter, Output, Ref, Template
import troposphere .ec2 as ec2

template = Template()

keyname_param = template.add_parameter(Parameter(
\”KeyName\”,
Description=\”Name of an existing EC2 KeyPair to enable SSH \”
\”access to the instance\”,
Type=\”String\”,
))

template.add_mapping(\’RegionMap\’, {
\”us-east-1\”: {\”AMI\”: \”ami-7f418316\”},
\”us-west-1\”: {\”AMI\”: \”ami-951945d0\”},
\”us-west-2\”: {\”AMI\”: \”ami-16fd7026\”},
\”eu-west-1\”: {\”AMI\”: \”ami-24506250\”},
\”sa-east-1\”: {\”AMI\”: \”ami-3e3be423\”},
\”ap-southeast-1\”: {\”AMI\”: \”ami-74dda626\”},
\”ap-northeast-1\”: {\”AMI\”: \”ami-dcfa4edd\”}
})

ec2_instance = template.add_resource(ec2.Instance(
\”Ec2Instance\”,
ImageId=FindInMap(\”RegionMap\”, Ref(\”AWS::Region\”), \”AMI\”),
InstanceType=\”t1.micro\”,
KeyName=Ref(keyname_param),
SecurityGroups=[\”default\”],
UserData=Base64(\”80\”)
))

template.add_output([
Output(
\”InstanceId\”,
Description=\”InstanceId of the newly created EC2 instance\”,
Value=Ref(ec2_instance),
),
Output(
\”AZ\”,
Description=\”Availability Zone of the newly created EC2 instance\”,
Value=GetAtt(ec2_instance, \”AvailabilityZone\”),
),
Output(
\”PublicIP\”,
Description=\”Public IP address of the newly created EC2 instance\”,
Value=GetAtt(ec2_instance, \”PublicIp\”),
),
Output(
\”PrivateIP\”,
Description=\”Private IP address of the newly created EC2 instance\”,
Value=GetAtt(ec2_instance, \”PrivateIp\”),
),
Output(
\”PublicDNS\”,
Description=\”Public DNSName of the newly created EC2 instance\”,
Value=GetAtt(ec2_instance, \”PublicDnsName\”),
),
Output(
\”PrivateDNS\”,
Description=\”Private DNSName of the newly created EC2 instance\”,
Value=GetAtt(ec2_instance, \”PrivateDnsName\”),
),
])

print(template.to_json())\”>

 # Converted from EC2InstanceSample.template located at:
# http://aws.a*ma**zon.com/cloudformation/aws-cloudformation-templates/

from troposphere import Base64 , FindInMap , GetAtt
from troposphere import Parameter , Output , Ref , Template
import troposphere . ec2 as ec2


template = Template ()

keyname_param = template . add_parameter ( Parameter (
    \"KeyName\" ,
    Description = \"Name of an existing EC2 KeyPair to enable SSH \"
                \"access to the instance\" ,
    Type = \"String\" ,
))

template . add_mapping ( \'RegionMap\' , {
    \"us-east-1\" :      { \"AMI\" : \"ami-7f418316\" },
    \"us-west-1\" :      { \"AMI\" : \"ami-951945d0\" },
    \"us-west-2\" :      { \"AMI\" : \"ami-16fd7026\" },
    \"eu-west-1\" :      { \"AMI\" : \"ami-24506250\" },
    \"sa-east-1\" :      { \"AMI\" : \"ami-3e3be423\" },
    \"ap-southeast-1\" : { \"AMI\" : \"ami-74dda626\" },
    \"ap-northeast-1\" : { \"AMI\" : \"ami-dcfa4edd\" }
})

ec2_instance = template . add_resource ( ec2 . Instance (
    \"Ec2Instance\" ,
    ImageId = FindInMap ( \"RegionMap\" , Ref ( \"AWS::Region\" ), \"AMI\" ),
    InstanceType = \"t1.micro\" ,
    KeyName = Ref ( keyname_param ),
    SecurityGroups = [ \"default\" ],
    UserData = Base64 ( \"80\" )
))

template . add_output ([
    Output (
        \"InstanceId\" ,
        Description = \"InstanceId of the newly created EC2 instance\" ,
        Value = Ref ( ec2_instance ),
    ),
    Output (
        \"AZ\" ,
        Description = \"Availability Zone of the newly created EC2 instance\" ,
        Value = GetAtt ( ec2_instance , \"AvailabilityZone\" ),
    ),
    Output (
        \"PublicIP\" ,
        Description = \"Public IP address of the newly created EC2 instance\" ,
        Value = GetAtt ( ec2_instance , \"PublicIp\" ),
    ),
    Output (
        \"PrivateIP\" ,
        Description = \"Private IP address of the newly created EC2 instance\" ,
        Value = GetAtt ( ec2_instance , \"PrivateIp\" ),
    ),
    Output (
        \"PublicDNS\" ,
        Description = \"Public DNSName of the newly created EC2 instance\" ,
        Value = GetAtt ( ec2_instance , \"PublicDnsName\" ),
    ),
    Output (
        \"PrivateDNS\" ,
        Description = \"Private DNSName of the newly created EC2 instance\" ,
        Value = GetAtt ( ec2_instance , \"PrivateDnsName\" ),
    ),
])

print ( template . to_json ())

社区

我们有一个Google组CloudTools-Dev,您可以在其中提出问题并与troposphere社区互动。总是欢迎问题和拉动请求!

许可

troposphere是根据BSD 2-CAREASE许可证获得许可的。请参阅troposphere完整许可文本的许可证。

下载源码

通过命令行克隆项目:

git clone https://github.com/cloudtools/troposphere.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 troposphere https://www.zuozi.net/34397.html

dtale
上一篇: dtale
EagleEye
下一篇: EagleEye
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务