В шаблоне Cloudformation я определяю два сегмента S3.
Bucket1:
Type: AWS::S3::Bucket
Properties:
...
Bucket2:
Type: AWS::S3::Bucket
Properties:
...
Outputs:
Bucket1:
Description: S3 Bucket
Value: !Ref Bucket1
Export:
Name: !Sub "${AWS::StackName}:Bucket1"
Bucket2:
Description: S3 Bucket
Value: !Ref Bucket2
Export:
Name: !Sub "${AWS::StackName}:Bucket2"
Я использую эти экспортированные сегменты в двух разных шаблонах облачной информации.
Шаблон 1
Parameters:
LoaderCodeBucket:
Type: String
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:
Fn::ImportValue:
!Sub "${LoaderCodeBucket}:Bucket1"
Шаблон 2
Parameters:
ProcessorCodeBucket:
Type: String
Resources:
MyOtherLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:
Fn::ImportValue:
!Sub "${ProcessorCodeBucket}:Bucket2"
Шаблон 1 проходит aws cloudformation validate-template --template-body ...
, а шаблон 2 не проходит из-за
Ошибка шаблона: атрибут в Fn :: ImportValue не должен зависеть от каких-либо ресурсов, импортированных значений или Fn :: GetAZ.
Единственное отличие состоит в том, что лямбда-функция в шаблоне 2 используется в приложении аналитики aws, которое также определено в шаблоне 2.
Я точно знаю, что проблемы возникают из-за S3 Bucket, потому что, когда я удаляю этот раздел кода, он проходит проверку.
Я использую этот сайт, чтобы попытаться отладить эту проблему, но, похоже, ни один из вопросов не дает ответа на эту конкретную проблему.
Это в том же регионе / той же учетной записи.
Мой вопрос: почему этот конкретный раздел кода (шаблон 2) выдает ошибку шаблона, когда шаблон 1 проходит без ошибок?
Куда присваивается ProcessorCodeBucket
? Вероятно, разница в том, как заполняется ProcessorCodeBucket
, и как заполняется LoaderCodeBucket
— person DanSchneiderNA schedule 02.02.2021
Что вы имеете в виду, как это назначается? Корзины заполняются из внешнего репо, которое загружает zip-файл с кодом, который находится во внешнем репо. Обе корзины заполняются из одного и того же внешнего репо. — person DanSchneiderNA schedule 02.02.2021
Это рабочий пример.
Шаблон 1:
Шаблон 2: мы можем импортировать его как
!ImportValue my-s3-BucketOne
Если вы действительно хотите использовать параметр из параметра, это будет
Fn::ImportValue: !Sub ${BucketExportNamePrefix}-BucketOne