Невозможно получить параметры (значение параметра) из хранилища параметров для этой учетной записи
Я получаю ошибку:
$ 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
в этом примере
5 ответов
Обычно это происходит, когда вы передаете параметры из одного шаблона в другой.
Template 1 has parameter reading from SSM store and passing it to another template
Parameters:
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 имеет следующий параметр и ресурсы (будет ошибка с ошибкой Невозможно получить параметры).
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
Это потому, что шаблон будет иметь значение /arn/themes/topic1 (arn темы) и передавать значение arn в template2 при его вызове. А template2 имеет тип значения в качестве другого параметра SSM.
Чтобы решить эту проблему, тип параметра template2 должен быть просто типом фактического значения параметра. В этом случае это должно быть String
Итак, для правильной работы шаблон 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
У нас была похожая проблема, и мы обнаружили, что столкнулись с этой проблемой при обновлении определения параметра.
Наша ситуация была:
Создан стек с параметром StageName с типом String по умолчанию Dev.
Затем мы перешли к использованию хранилища параметров и обновили определение параметра с типом AWS::SSM::Parameter::Value и по умолчанию указали путь к хранилищу параметров.
При вызове стека обновлений Cloudformation считывала существующее значение Dev и передавала его как значение по умолчанию для параметра, а затем искала значение хранилища параметров по пути Dev. Очевидно, что это не существовало и привело к ошибке:
Произошла ошибка (ValidationError) при вызове операции CreateChangeSet: невозможно извлечь параметры [Dev] из хранилища параметров для этой учетной записи.
Самым простым решением для нас было удаление стека и воссоздание, но мы видим, что это проблема для других. Если у кого-то есть лучший метод "обновления", было бы хорошо узнать.
Мы развертывали с помощью sam deploy для Lambda, поэтому не уверены, применимо ли это к update-stack для других стеков.
ОБНОВИТЬ**
Я попытался воссоздать это с помощью стека создания / обновления, но не получилось, поэтому похоже, что эта проблема ограничена механизмом обновления pacakge/deploy
Похоже , что обновление стека не приведет к обновлению значения по умолчанию для параметров стека. если вы хотите обновить значение по умолчанию, вам нужно переименовать параметр, а затем обновить стек. как только это сработает, вы можете немедленно переименовать параметр обратно.
Я была такая же проблема. Обновлен существующий параметр экземпляра набора стека со строки до поиска в хранилище параметров, и обновление экземпляра стека не удалось для одной из трех учетных записей с ошибкойUnable to fetch parameters ['string'] from parameter store for this account
. К сожалению, из-за того, что эти экземпляры находились в производственных учетных записях, удаление и повторное развертывание было невозможным.
Я обратился в службу поддержки AWS, и они согласились с диагнозом в этой ветке. Следующее было предложением, которое сработало.
- Обновите застрявший экземпляр стека, указав список параметров, но без значений параметров. Это должно сбросить параметры обратно к значениям по умолчанию StackSet.
- Я успешно сделал это с помощью следующей команды AWS CLI:
aws cloudformation update-stack-instances --stack-set-name stack-set-name --accounts "############" --regions us-east-1 --parameter-overrides
- Я успешно сделал это с помощью следующей команды AWS CLI:
- Попытайтесь снова обновить экземпляр стека с желаемыми параметрами.
В моем случае мне не нужно было выполнять шаг 2, потому что я хотел использовать значение параметров по умолчанию. Другим может потребоваться передать желаемые параметры на этом втором шаге.
Надеюсь это поможет.
При использовании вложенных стеков тип параметра должен быть строковым, поскольку ссылка на параметр в основном стеке приведет к тому, что он будет строковым.
основной шаблон -> корневой стек
"Parameters": {
"MyParam": {
"Description": "My description",
"Type": "AWS::SSM::Parameter::Value<String>"
}
}
...
"MyNestedStack": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"Parameters": {
"MyParamFromMain": { "Ref": "MyParam" }
}
}
}
2-й шаблон -> вложенный/дочерний стек
"Parameters": {
"MyParamFromMain": {
"Description": "My description",
"Type": "String"
}
}