【问题标题】:Using Cloudformation for Codedeploy使用 Cloudformation 进行 Codedeploy
【发布时间】:2016-01-07 22:41:42
【问题描述】:

我正在尝试使用对流层来制作 cloudformation 模板。模板制作的堆栈旨在成为 codedeploy 的简单示例

我之前有 troposphere 生成 ec2、s3、iam 和 route53 生成模板。我之前已经让 codedeploy 与 GUI AWS 控制台一起工作

我遇到了一个错误,我不明白为什么

这是我的对流层程序

    from troposphere import Template
    from troposphere.codedeploy import Application, DeploymentConfig, DeploymentGroup, MinimumHealthyHosts, S3Location


    #1
    #CreateApplication with an applicationName
    app=Application( 'test123')

    #2
    #CreateDeploymentConfig

    config=DeploymentConfig('config123',
                           MinimumHealthyHosts=MinimumHealthyHosts( Type='HOST_COUNT', Value=1 )
                           )

    #3
    #CreateDeploymentGroup using applicationName as input
    #and deploymentConfigName
    depgroup=DeploymentGroup("depgroup123",
                             ApplicationName='test123',
                             DeploymentConfigName='config123', 
                             ServiceRoleArn='arn:aws:iam::930517348825:role/isCompatibleWithAWSCodeDeploy')
)    
    t = Template()
    t.add_description(
    """
    Test of making a code deploy setup from a template
    """)
    t.add_resource(app)
    t.add_resource(config)
    t.add_resource(depgroup)

    print(t.to_json())

这是它制作的 Cloudformation 模板

{
    "Description": "\nTest of making a code deploy setup from a template\n",
    "Resources": {
        "config123": {
            "Properties": {
                "MinimumHealthyHosts": {
                    "Type": "HOST_COUNT",
                    "Value": 1
                }
            },
            "Type": "AWS::CodeDeploy::DeploymentConfig"
        },
        "depgroup123": {
            "Properties": {
                "ApplicationName": "test123",
                "DeploymentConfigName": "config123",
                "ServiceRoleArn": "arn:aws:iam::930517348825:role/isCompatibleWithAWSCodeDeploy"
            },
            "Type": "AWS::CodeDeploy::DeploymentGroup"
        },
        "test123": {
            "Type": "AWS::CodeDeploy::Application"
        }
    }
}

当我将模板加载到 cloudformation GUI 中时,这发生在回滚之前

09:08:50 UTC+0000   CREATE_FAILED   AWS::CodeDeploy::DeploymentConfig   config123   Resource creation cancelled
09:08:48 UTC+0000   CREATE_IN_PROGRESS  AWS::CodeDeploy::DeploymentConfig   config123   
09:08:48 UTC+0000   CREATE_FAILED   AWS::CodeDeploy::DeploymentGroup    depgroup123     No application found for name: test123
09:08:47 UTC+0000   CREATE_COMPLETE     AWS::CodeDeploy::Application    test123     

我不明白的是,堆栈已经创建了 AWS::CodeDeploy::Application "test123",但是下一条消息显示“No application found for name: test123”

角色/isCompatibleWithAWSCodeDeploy 已存在。
我还需要添加什么吗?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation troposphere


    【解决方案1】:

    TLDR

    只需使用Refs:

                "ApplicationName": {"Ref": "test123"},                                                                                                                                                        
                "DeploymentConfigName": {"Ref": "config123"},
    

    详细解答

    根据我从您的 cf 模板中可以看到,创建的应用程序没有名称。为了让它有一个名字,你的 cf 模板的适当部分应该如下所示:

        "test123": {                                                                                                                                                                                          
            "Type": "AWS::CodeDeploy::Application",
            "Properties" : {
                "ApplicationName" : "test123"
            }                                                                                                                                                           
        }
    

    同样适用于配置。配置应该有DeploymentConfigName 属性。 但即使在添加 ApplicationName 之后启动也可能会失败。因为您的模板不保证在 application 和 deploymentconfig 之后创建 depgroup。

    为了保证正确的创建顺序,您应该使用Refs:

    {                                                                                                                                                                                                             
        "Description": "\nTest of making a code deploy setup from a template\n",                                                                                                                                  
        "Resources": {                                                                                                                                                                                            
            "config123": {                                                                                                                                                                                        
                "Properties": {                                                                                                                                                                                   
                    "MinimumHealthyHosts": {                                                                                                                                                                      
                        "Type": "HOST_COUNT",                                                                                                                                                                     
                        "Value": 1                                                                                                                                                                                
                    }                                                                                                                                                                                             
                },                                                                                                                                                                                                
                "Type": "AWS::CodeDeploy::DeploymentConfig"                                                                                                                                                       
            },                                                                                                                                                                                                    
            "depgroup123": {                                                                                                                                                                                      
                "Properties": {                                                                                                                                                                                   
                    "ApplicationName": {"Ref": "test123"},                                                                                                                                                        
                    "DeploymentConfigName": {"Ref": "config123"},                                                                                                                                                 
                    "ServiceRoleArn": "arn:aws:iam::930517348825:role/isCompatibleWithAWSCodeDeploy"                                                                                                                     
                },                                                                                                                                                                                                
                "Type": "AWS::CodeDeploy::DeploymentGroup"                                                                                                                                                        
            },                                                                                                                                                                                                    
            "test123": {                                                                                                                                                                                          
                "Type": "AWS::CodeDeploy::Application"                                                                                                                                                            
            }                                                                                                                                                                                                     
        }                                                                                                                                                                                                         
    }
    

    【讨论】:

    • ApplicationName 在我拥有的对流层版本中缺少作为“应用程序”的道具。 git 的最新版本修复了这个问题
    • 最有用的答案,非常感谢。现在试图弄清楚 CodeDeploy 是否完全适用于 CloudFormation。 AWS::CodeDeploy::Deployment 似乎丢失或未记录
    猜你喜欢
    • 2018-05-19
    • 2018-07-11
    • 2019-09-27
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2019-09-21
    • 2018-07-16
    • 1970-01-01
    相关资源
    最近更新 更多