我正在尝试在我的代码中实现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\" }"
在这一点上,我想知道我试图实现的目标是否可行,以及我是否以正确的方式做到这一点。
有人可以帮我吗,
谢谢。