千家信息网

怎么以编程方式创建Cloudformation 模板

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下怎么以编程方式创建Cloudformation 模板,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们将
千家信息网最后更新 2026年11月03日怎么以编程方式创建Cloudformation 模板

小编给大家分享一下怎么以编程方式创建Cloudformation 模板,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

我们将首先安装对流层库:

$ pip install troposphere

安装完成后,您可以创建一个名为 helloworld-cf-template.py 的新文件。

我们将通过从对流层模块导入一些定义来开始我们的文件:

"""Generating CloudFormation template."""from troposphere import (  Base64,  ec2,  GetAtt,  Join,  Output,  Parameter,  Ref,  Template,)

从代码的角度来看,我们要做的第一件事是初始化一个模板变量。在我们的脚本结束时,模板将包含我们基础设施的完整描述,我们将能够简单地打印其输出以获取我们的 CloudFromation 模板:

t = Template()

在本书中,我们将同时创建和运行多个 CloudFormation 模板。为了帮助我们识别给定堆栈中的内容,我们可以提供描述。创建模板后,添加如下描述:

t.add_description("Effective DevOps in AWS: HelloWorld web application")

当我们使用 Web 命令行界面启动 EC2 实例时,我们选择了使用哪个密钥对以获得对主机的 SSH 访问。为了不失去这种能力,我们的模板首先要有一个参数,它为 CloudFormation 用户提供在启动 EC2 实例时选择要使用的密钥对的能力。

为此,我们将创建一个 Parameter 对象,并通过提供标识符、描述、参数类型、描述和约束描述来初始化它,以帮助做出正确的决定

当我们启动堆栈时。为了让这个参数存在于我们的最终模板中,我们还将使用模板类中定义的 add_paramter() 函数:

t.add_parameter(Parameter(   "KeyPair",   Description="Name of an existing EC2 KeyPair to SSH",   Type="AWS::EC2::KeyPair::KeyName",   ConstraintDescription="must be the name of an existing EC2 KeyPair.",))

接下来我们要看的是安全组。我们将完全按照我们对 KeyPair 参数所做的那样进行。

ApplicationPort = 3000 t.add_resource(ec2.SecurityGroup(   "SecurityGroup",   GroupDescription="Allow SSH and TCP/{} access".format(ApplicationPort),   SecurityGroupIngress=[   ec2.SecurityGroupRule(     IpProtocol="tcp",     FromPort="22",     ToPort="22",     CidrIp="0.0.0.0/0",   ),   ec2.SecurityGroupRule(     IpProtocol="tcp",     FromPort=ApplicationPort,     ToPort=ApplicationPort,     CidrIp="0.0.0.0/0",  ), ],))

在下一节中,我们将不再需要登录到我们的 EC2 实例并手动安装 helloworld.js 文件及其初始化脚本。为此,我们将利用 EC2 提供的 UserData 功能。

创建 EC2 实例时,您可以通过 UserData 可选参数提供一组命令,以便在虚拟机启动后运行。

user_data = Base64(Join('\n', [ "#!/bin/bash", "sudo yum install --enablerepo=epel -y nodejs", "wget http://bit.ly/2vESNuc -O /home/ec2-user/helloworld.js", "wget http://bit.ly/2vVvT18 -O /etc/init/helloworld.conf", "start helloworld"]))

我们现在将专注于我们模板的主要资源,我们的 EC2 实例。创建实例需要提供用于标识资源的名称、映像 ID、实例类型、安全组、用于 SSH 访问的密钥对以及用户数据。

为了简单起见,我们将对 AMI ID ( ami-a4c7edb2 ) 和实例类型 ( t2.micro ) 进行硬编码。

创建我们的 EC2 实例所需的其余信息是安全组信息和密钥对名称,我们之前通过定义参数和资源收集了这些信息。在 CloudFormation 中,您可以使用关键字 Ref 来引用模板的预先存在的小节。

在对流层中,这是通过调用 Ref() 函数来完成的。和以前一样,我们将在 add_resource 函数的帮助下将结果输出添加到我们的模板中:

t.add_resource(ec2.Instance(  "instance",  ImageId="ami-a4c7edb2",  InstanceType="t2.micro",  SecurityGroups=[Ref("SecurityGroup")],  KeyName=Ref("KeyPair"),  UserData=user_data,))

在我们脚本的最后一部分,我们将专注于生成模板的输出部分,当 CloudFormation 创建堆栈时,该部分会被填充。

此选择允许您打印出在堆栈启动期间计算的有用信息。在我们的例子中,有两个有用的信息,访问我们的 Web 应用程序的 URL 和实例的公共 IP 地址,以便我们可以根据需要通过 SSH 访问它。

为了检索此类信息,CloudFormation 使用函数 Fn::GetAtt 。在对流层,这被转换为使用 GetAttr() 函数:

t.add_output(Output(  "InstancePublicIp",  Description="Public IP of our instance.",  Value=GetAtt(instance, "PublicIp"),))t.add_output(Output(  "WebUrl",  Description="Application endpoint",  Value=Join("", [      "http://", GetAtt(instance, "PublicDnsName"), ":", ApplicationPort  ]),))

此时,我们可以让我们的脚本输出我们生成的模板的最终结果:

print t.to_json()

以上是"怎么以编程方式创建Cloudformation 模板"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

模板 实例 参数 信息 函数 堆栈 密钥 对流层 脚本 对流 帮助 输出 安全 内容 文件 篇文章 类型 资源 选择 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 中关村互联网科技集团 金融科技还是互联网 以房互联网科技 安徽鑫晟辉互联网科技 互联网科技logo 互联网高科技股票 盛创互联网科技有限公司 互联网 科技馆 成都玖崟互联网科技有限公司乐商圈怎么样 中国互联网有什么科技含量 互联网系的金融科技公司 厦门比较好的科技互联网公司 互联网科技公司实习生 996高科技互联网公司 上海京穆互联网科技有限公司 江苏互联网智能科技产品出厂价 互联网时代高科技布局 互联网科技的前景 互联网科技创新创业项目 互联网金融监管科技数据 互联网 科技公司 百单互联网科技有限公司 奇酷互联网络科技公司 深圳前海聚择互联网科技有限公司 未来五年的互联网科技 特约风豹互联网科技为什么扣费 半导体行业属于互联网高科技类吗 珠海东科互联网科技有限公司 互联网科技大会大佬
0