troposphere
Release 4.8.3
对流层 - 用于创建 AWS CloudFormation 描述的库
对流层库允许通过编写 Python 代码来描述 AWS 资源来更轻松地创建 AWS CloudFormation JSON。对流层还通过 Heat 对 OpenStack 资源提供一些基本支持。
为了便于尽早捕获 CloudFormation 或 JSON 错误,库在类中内置了属性和类型检查。
可以使用 Python 的 pip 分发系统通过发出以下命令来安装 troposphere:
$ pip install troposphere
要使用 awacs 安装对流层(推荐软依赖):
$ pip install troposphere[policy]
或者,您可以使用 setup.py 通过克隆此存储库并发出以下命令来安装:
$ python setup.py install # you may need sudo depending on your python installation
创建实例的简单示例如下所示:
> >> 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 >
add_resource()
返回对象,以便于与Ref()
一起使用:
> >> instance = t . add_resource ( ec2 . Instance ( "myinstance" , ImageId = "ami-951945d0" , InstanceType = "t1.micro" ))
> >> Ref ( instance )
< troposphere . Ref object at 0x101bf3490 >
AWS 资源上设置的属性不正确:
> >> 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 资源所需的属性:
> >> 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 )
# Converted from EC2InstanceSample.template located at:
# http://aws.amazon.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,您可以在其中提出问题并与对流层社区互动。始终欢迎问题和拉取请求!
对流层根据 BSD 2-Clause 许可证获得许可。有关对流层完整许可证文本,请参阅许可证。