التروبوسفير - مكتبة لإنشاء أوصاف AWS CloudFormation
تتيح مكتبة التروبوسفير سهولة إنشاء AWS CloudFormation JSON عن طريق كتابة كود Python لوصف موارد AWS. يتضمن التروبوسفير أيضًا بعض الدعم الأساسي لموارد OpenStack عبر Heat.
لتسهيل اكتشاف أخطاء CloudFormation أو JSON مبكرًا، تحتوي المكتبة على خاصية التحقق من الخصائص والنوع المضمنة في الفئات.
يمكن تثبيت التروبوسفير باستخدام نظام توزيع النقاط لبيثون عن طريق إصدار:
$ pip install troposphere
لتثبيت التروبوسفير باستخدام الأواكس (التبعية الناعمة الموصى بها):
$ 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. راجع الترخيص للاطلاع على نص الترخيص الكامل للتروبوسفير.