将源代码从管道发送到Cloudformation中的另一个模板

时间:2020-03-06 15:32:14

标签: amazon-web-services amazon-cloudformation

我正在尝试在我的代码中实现AWS::CloudFormation::Stack,以避免重复多次代码。 (在这种情况下,每个lambda都有一个cloudwatch警报)

在进行此更改之前,我正在做的是,将我的“ alarms.json”放入了AWS::CodePipeline::Pipeline上的一项操作中,并且工作正常。

但是文件变得一团糟,因为我有15条相同的警报,只是更改了需要跳转的lambda名称的名称。因此,我想到了创建一个文件并在其中放置一个警报的想法。接收lambda名称作为参数。

因此,这成为我的疑问,在AWS::CloudFormation::Stack中的TemplateURL应该在S3的位置,但是我可能做错了,因为我得到的错误是{{1 }}

因此要实现这一目标,我正在做的是: 在发出警报的.json上,我添加了一个新参数

TemplateURL must be an Amazon S3 URL.

然后在同一文件中,我有一个堆栈

"SourceCodeS3": 
{
    "Description": "Sourcecode",
    "Type": "String",
    "ConstraintDescription": "Source code Location in s3"
}

所以在管道中,我有一个"stackAlarm": { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "Parameters" : {"Name" : {"Ref": "lambda"} }, "TemplateURL" : { "Fn::ImportValue": { "Fn::Sub": "${SourceCodeS3}/AWSAlarms/lambdaAlarm.json" } }, "TimeoutInMinutes" : 20 } } ,类似于下一个:

action deploy

文件的位置为{ "ActionTypeId" : { "Category" : "Deploy", "Owner" : "AWS", "Provider" : "CloudFormation", "Version" : "1" }, "Configuration" : { "ActionMode": "REPLACE_ON_FAILURE", "StackName": "RawDataApplication", "Capabilities": "CAPABILITY_IAM,CAPABILITY_NAMED_IAM", "ChangeSetName": "code-pipeline-update", "RoleArn": "arn", "TemplatePath": "BuildArtifact::lambdas.json", //This calls properly "ParameterOverrides": "{\"Environment\": \"Internal\", \"SourceCodes3\" : \"BuildArtifact::AWS\" }" }, "Name" : "namehere", "InputArtifacts" : [{ "Name": "BuildArtifact" }], "Region" : {"Ref": "AWS::Region"}, "RoleArn" : "arn", "RunOrder" : 1 }

这很奇怪,因为我遇到两个不同的错误: 管道中的1:$AWS/AWSAlarms/lambdaAlarm.json,这让我觉得我没有发送任何东西 2在cloudformation中:如果我转到实际错误并转到事件,我会看到:Parameters: [SourceCodeS3] must have values可能是因为为空

除此之外,我尝试在TemplateURL must be an Amazon S3 URL.文件中返回一个工件,即文件。但这没用。 我还尝试使用buildspec访问文件,将文件添加到sourceCode,然后添加到InputArtifacts

ParameterOverrides

并使用get attr东西

"InputArtifacts" : 
[{
    "Name": "BuildArtifact"
},{
    "Name": "SourceCode"
}]
"ParameterOverrides": "{\"Environment\": \"Internal\", \"SourceCodes3\" : \"BuildArtifact::AWS\" }"

在这一点上,我想知道我试图实现的目标是否可行,以及我是否以正确的方式做到这一点。

有人可以帮我吗,

谢谢。

0 个答案:

没有答案