У меня проблемы с aws Cloudformation. Я пытаюсь включить вложенные стеки, так как исчерпал лимит в 200 ресурсов. Это то, что у меня есть в качестве примера
Стек A - родительский стек с ресурсом API
RestAPI:
Type: AWS::Serverless::Api
Properties:
StageName: !Sub ${Stage}
DefinitionBody:
Fn::Transform:
Name: AWS::Include
Parameters:
Location:
- Fn::Join:
- ''
- - 's3://'
- Ref: S3BucketName
- '/swagger.yaml'
GetLogs:
Type: AWS::Serverless::Function
Properties:
Handler: Logs_Lambda/index.getHandler
Role: !GetAtt RDSLambdaExecutionRole.Arn
Events:
GetUsers:
Type: Api
Properties:
Path: management/logs
Method: get
RestApiId: !Ref RestAPI
Стек B - дочерний стек Stack A
LambdaSaveLogsInvokePermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref SaveLogs
Action: 'lambda:InvokeFunction'
Principal: apigateway.amazonaws.com
SaveLogs:
Type: AWS::Serverless::Function
Properties:
FunctionName: SaveLogs
CodeUri:
Bucket: !Ref BuildBucketName
Key: !Ref BuildObjectKey
Handler: logs_Lambda/index.saveHandler
Role: !Ref RDSLambdaExecutionRoleArn
Events:
SaveLogs:
Type: Api
Properties:
Path: management/logs/save
Method: post
RestApiId: !Ref RestAPI
Мои файлы подкачки имеют следующие ссылки
x-amazon-apigateway-integration:
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SaveLogs.Arn}/invocations"
x-amazon-apigateway-integration:
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetLogs.Arn}/invocations"
Обратите внимание, что стек B ссылается на ресурс RestAPI, который передается как параметр из стека A
Мои проблемы и что я пытался
- Создание набора изменений завершается неудачно, когда выполняется конвейер кода, говоря, что не может найти какую-либо ссылку на SaveLogs.Arn. Я считаю, что стек A встраивает код в RestAPI и, следовательно, он не может найти ссылку на ресурс дочернего стека
- . Поэтому я сделал вывод из стека B для SaveLogs Arn и обновил файл swagger до обратитесь к выводу. Затем он выдал ошибку на наборе изменений, которая гласила: «Круговая зависимость между ресурсами» (что тоже звучит правильно) .
Вопросы
Мой вопрос: как нам преодолеть это?
Есть ли способ как-то использовать разные сваг-файлы для каждого стека?
Есть ли другой способ написания вложенного стека для API
с точки зрения масштабируемости?
Кто-нибудь сможет прокомментировать или помочь с этим?
Заранее спасибо