如何通过 cloudformation 部署 opsworks 应用程序?
Posted
技术标签:
【中文标题】如何通过 cloudformation 部署 opsworks 应用程序?【英文标题】:How to deploy an opsworks application by cloudformation? 【发布时间】:2017-05-06 15:24:02 【问题描述】:在 cloudformation 模板中,我创建了一个 opsworks 堆栈、一个层、一个实例和一个应用程序。此模板通过食谱和脚本的厨师食谱设置和配置实例。如何从模板自动部署应用程序,而无需在堆栈内手动单击部署?部署后,正在执行说明书中定义的 Deloy 配方:
"MyLayer":
"Type": "AWS::OpsWorks::Layer",
"DependsOn" : "OpsWorksServiceRole",
"Properties":
"AutoAssignElasticIps" : false,
"AutoAssignPublicIps" : true,
"CustomRecipes" :
"Setup" : ["cassandra::setup","awscli::setup","settings::setup"],
"Deploy": ["imports::deploy"]
,
"CustomSecurityGroupIds" : "Ref" : "SecurityGroupIds" ,
"EnableAutoHealing" : true,
"InstallUpdatesOnBoot": false,
"LifecycleEventConfiguration":
"ShutdownEventConfiguration":
"DelayUntilElbConnectionsDrained": false,
"ExecutionTimeout": 120
,
"Name": "script-node",
"Shortname" : "node",
"StackId": "Ref": "MyStack" ,
"Type": "custom",
"UseEbsOptimizedInstances": true,
"VolumeConfigurations": [
"Iops": 10000,
"MountPoint": "/dev/sda1",
"NumberOfDisks": 1,
"Size": 20,
"VolumeType": "gp2"
]
应用程序如下所示:
有什么想法吗? 谢谢。
【问题讨论】:
【参考方案1】:我相信这可以在食谱中完成。因此,在您的食谱中,您将拥有一个验证应用名称的功能,如果存在,则继续进行部署。
例如,您的部署配方如下所示:
if validator(node[:app][:name]) == true
do whatever
end
这个验证器函数可以驻留在你的厨师库中:
def validator(app_name)
app = search("aws_opsworks_app", "name:#app_name").first
if app[:deploy] == true
Chef::Log.warn("PROCEEDING: Deploy initiated for #app[:name]")
end
end
【讨论】:
非常感谢!你能给我提供一份文件吗? @Manish-joshi 在上面的示例中,我使用的是 opsworks 数据包,所需的文档可以在这里找到docs.aws.amazon.com/opsworks/latest/userguide/…@Cloudgls【参考方案2】:CreateDeployment
API 调用会生成一次性事件,该事件会在您的 OpsWorks 堆栈中执行 Deploy
操作。我不认为任何官方 CloudFormation 资源直接映射到此,但这里有一些关于如何在 CloudFormation 模板的上下文中调用它的想法:
AWS::CodePipeline::Pipeline
资源添加到您的模板,该资源配置为将您的 OpsWorks 应用程序部署为部署阶段的一部分。有关此集成的文档,请参阅 Using AWS CodePipeline with AWS OpsWorks Stacks。 (虽然它是一个额外的服务 + 复杂层,但我认为 CodePipeline 是一个更好的抽象层,用于在应用程序堆栈中建模部署操作。)
【讨论】:
以上是关于如何通过 cloudformation 部署 opsworks 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
通过 CloudFormation 部署 AWS UserPool 并更新属性
如何在没有内联代码的情况下使用 lambda 函数部署 cloudformation?
通过 Cloudformation、CodeBuild 和 CodePipeline 将 python 包部署到 AWS Lambda
如何使用 Cloudformation 强制重新部署我的 API 网关