troposphere - perpustakaan untuk membuat deskripsi AWS CloudFormation
Pustaka troposfer memudahkan pembuatan AWS CloudFormation JSON dengan menulis kode Python untuk menjelaskan sumber daya AWS. troposfer juga menyertakan beberapa dukungan dasar untuk sumber daya OpenStack melalui Heat.
Untuk memfasilitasi penangkapan kesalahan CloudFormation atau JSON sejak dini, perpustakaan memiliki pemeriksaan properti dan tipe yang dibangun di dalam kelas.
troposfer dapat diinstal menggunakan sistem distribusi pip untuk Python dengan mengeluarkan:
$ pip install troposphere
Untuk menginstal troposfer dengan awacs (ketergantungan lunak yang disarankan):
$ pip install troposphere[policy]
Alternatifnya, Anda dapat menggunakan setup.py untuk menginstal dengan mengkloning repositori ini dan mengeluarkan:
$ python setup.py install # you may need sudo depending on your python installation
Contoh sederhana untuk membuat sebuah instance akan terlihat seperti ini:
> >> 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
Alternatifnya, parameter dapat digunakan sebagai pengganti properti:
> >> instance = ec2 . Instance ( "myinstance" , ImageId = "ami-951945d0" , InstanceType = "t1.micro" )
> >> t . add_resource ( instance )
< troposphere . ec2 . Instance object at 0x101bf3550 >
Dan add_resource()
mengembalikan objek agar mudah digunakan dengan Ref()
:
> >> instance = t . add_resource ( ec2 . Instance ( "myinstance" , ImageId = "ami-951945d0" , InstanceType = "t1.micro" ))
> >> Ref ( instance )
< troposphere . Ref object at 0x101bf3490 >
Properti yang salah disetel pada sumber daya 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
Jenis properti sumber daya AWS salah:
> >> ec2 . Instance ( "ec2instance" , ImageId = 1 )
Traceback ( most recent call last ):
...
TypeError : ImageId is < type 'int' > , expected < type 'basestring' >
Properti yang diperlukan untuk sumber daya AWS tidak ada:
> >> 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 ())
Kami memiliki Grup Google, cloudtools-dev, tempat Anda dapat mengajukan pertanyaan dan terlibat dengan komunitas troposfer. Masalah dan permintaan penarikan selalu diterima!
troposfer dilisensikan di bawah lisensi BSD 2-Clause. Lihat LISENSI untuk teks lisensi lengkap troposfer.