我得到了错误:
$ aws cloudformation deploy --template-file ./packaged-stack.yml --stack-name mystackname --capabilities CAPABILITY_NAMED_IAM`
An error occurred (ValidationError) when calling the CreateChangeSet operation: Unable to fetch parameters [XXX] from parameter store for this account.这里出了什么问题?
奇怪的是,XXX是来自参数存储的值,所以CloudFormation实际上能够获得值……但它似乎试图从参数中读取,该参数的名称是它获得的值。我想我的用法是不正确的?
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: '...'
Parameters:
BaseStack:
Type: AWS::SSM::Parameter::Value<String>
Default: /some/thing/baseStack在本例中,存储在/some/thing/baseStack中的值为XXX
发布于 2019-10-09 07:51:36
当您将参数从一个模板传递到另一个模板时,通常会发生这种情况。
Template 1 has parameter reading from SSM store and passing it to another templateParameters:
SNSTopicArnParam:
Description: Arn of the SNS topic
Type: AWS::SSM::Parameter::Value<String>
Default: /arn/topics/topic1
Resources:
CallOtherStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: someurl/template2.yaml
Parameters:
SNSTopicArn: !Ref SNSTopicArnParam模板2具有以下参数和资源(将出现Unable to fetch parameters错误)。
Parameters:
SNSTopicArnFromCaller:
Description: Arn of the SNS topic
Type: AWS::SSM::Parameter::Value<String>
Default: /arn/topics/topic1
Resources:
NewSubscription:
Type: AWS::SNS::Subscription
Properties:
Parameters:
TopicArn: !Ref SNSTopicArnFromCaller
Endpoint: someValue
Protocol: SQS这是因为模板one的值为/ arn /topic/topic1(主题的arn ),并在调用它时将arn值传递给template2。并且template2将该值的类型作为另一个SSM参数。
要解决此问题,template2参数类型应仅为实际参数值的类型。在这种情况下,它应该是字符串
因此,模板2应该按如下所示进行更新以正常工作
Parameters:
SNSTopicArnFromCaller:
Description: Arn of the SNS topic
Type: String
Resources:
NewSubscription:
Type: AWS::SNS::Subscription
Properties:
Parameters:
TopicArn: !Ref SNSTopicArnFromCaller
Endpoint: someValue
Protocol: SQS发布于 2019-01-03 21:31:01
我们遇到了类似的问题,并发现在更新参数的定义时遇到了这个问题。
我们的情况是:
已使用类型为String default Dev的参数StageName创建堆栈。
然后,我们转到使用参数存储,并使用参数存储路径将参数定义更新为AWS::SSM:: parameter ::Value和default类型。
当调用更新堆栈时,Cloudformation正在读取现有值' Dev‘,并将其作为默认值传递给参数,因此它会在路径Dev处查找参数存储值。显然,这并不存在,并导致了错误:
调用CreateChangeSet操作时出错(ValidationError):无法从此帐户的参数存储区获取参数Dev。
对我们来说,最简单的修复方法是删除堆栈并重新创建,但可以看到这对其他人来说是一个问题。如果有人有更好的“升级”方法,那将是很好的发现。
我们对Lambda使用sam deploy进行部署,所以不确定这是否适用于其他堆栈的update-stack。
更新**
我尝试通过create/update stack重新创建它,但失败了,所以看起来这个问题仅限于pacakge/deploy升级机制
发布于 2019-11-23 06:33:40
更新堆栈似乎不会更新堆栈参数的默认值。如果要更新默认值,则需要重命名参数,然后更新堆栈。一旦成功,您可以立即将该参数重新命名。
https://stackoverflow.com/questions/51918238
复制相似问题