如何通过cloudformation部署opsworks应用程序?

时间:2016-12-21 09:00:22

标签: deployment amazon-cloudformation aws-opsworks

在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"
     }]
  }
}

应用程序如下所示:enter image description here

有什么想法吗? 谢谢。

2 个答案:

答案 0 :(得分:0)

我相信这可以在食谱中完成。因此,在您的食谱中,您将拥有验证应用名称的功能,如果它存在,则继续部署。

例如,您的部署配方看起来像这样:

 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

答案 1 :(得分:0)

CreateDeployment API调用会生成一次性事件,以执行OpsWorks堆栈中的app.controller('Controller', ['myConfig', function(myConfig) {..}操作。我不认为任何官方CloudFormation资源直接映射到此,但是这里有一些关于如何在CloudFormation模板的上下文中调用它的想法:

  • 在创建时编写一个调用CreateDeployment的Custom Resource(例如,通过AWS SDK for Node.js)。
  • 向您的模板添加AWS::CodePipeline::Pipeline资源,该资源已配置为部署OpsWorks应用程序作为部署阶段的一部分。有关此集成的文档,请参阅Using AWS CodePipeline with AWS OpsWorks Stacks。 (虽然这是一个额外的服务+复杂层,但我认为CodePipeline是一个更好的抽象层,无论如何都可以在应用程序堆栈中建模部署操作。)
相关问题