【问题标题】:How to deploy an opsworks application by cloudformation?如何通过 cloudformation 部署 opsworks 应用程序?
【发布时间】: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"
     }]
  }
}

应用程序如下所示:

有什么想法吗? 谢谢。

【问题讨论】:

    标签: deployment amazon-cloudformation aws-opsworks


    【解决方案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
    

    【讨论】:

    【解决方案2】:

    CreateDeployment API 调用会生成一次性事件,该事件会在您的 OpsWorks 堆栈中执行 Deploy 操作。我不认为任何官方 CloudFormation 资源直接映射到此,但这里有一些关于如何在 CloudFormation 模板的上下文中调用它的想法:

    • 编写一个Custom Resource,在创建时调用 CreateDeployment(例如,通过适用于 Node.js 的 AWS 开发工具包)。
    • AWS::CodePipeline::Pipeline 资源添加到您的模板,该资源配置为将您的 OpsWorks 应用程序部署为部署阶段的一部分。有关此集成的文档,请参阅 Using AWS CodePipeline with AWS OpsWorks Stacks。 (虽然它是一个额外的服务 + 复杂层,但我认为 CodePipeline 是一个更好的抽象层,用于在应用程序堆栈中建模部署操作。)

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 2017-08-16
      • 2013-10-12
      • 2016-12-12
      • 2015-02-09
      • 2016-06-17
      • 1970-01-01
      • 2014-09-22
      • 2018-07-29
      相关资源
      最近更新 更多