Импорт / экспорт вложенных стеков облачной информации - экспорт с именем EXPORT_NAME не найден - PullRequest
1 голос
/ 25 января 2020

У меня есть стек Cloudformation с главным шаблоном и двумя вложенными шаблонами, один из которых содержит лямбда-выражение и связанную роль, а другой содержит корзину S3. Я хочу экспортировать Lambda ARN из шаблона Lambda и передать его в шаблон S3, чтобы я мог выполнять некоторые действия по уведомлению о событиях (иметь новый элемент в корзине S3 для запуска Lambda).

Если я закомментирую код CF в главном шаблоне, который импортирует экспортированный Lambda ARN и передает его в корзину, все работает нормально - основной и вложенный шаблоны развертываются нормально, и я вижу экспортированный Lambda ARN -

(c4abb639548f2545e145ea54ed13d2ea) justin@justin-XPS-13-9360:~/work/gists/c4abb639548f2545e145ea54ed13d2ea$ ./describe_outputs.sh xxx-MyLambda-1B451J61821EC
------------------------------------------------------------------------------------------------------------------
|                                                 DescribeStacks                                                 |
+-------------------------+--------------+-----------------------------------------------------------------------+
|       ExportName        |  OutputKey   |                              OutputValue                              |
+-------------------------+--------------+-----------------------------------------------------------------------+
|  xxx-lambda-arn|  FunctionArn |  arn:aws:lambda:eu-west-1:119552584133:function:xxx-lambda   |
+-------------------------+--------------+-----------------------------------------------------------------------+

Однако, если я раскомментирую код, передающий экспортированный Lambda ARN в шаблон корзины -

  MyBucket:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: !Sub "https://s3.${AWS::Region}.amazonaws.com/${S3Bucket}/${AppName}/templates/bucket.yaml"
      Parameters:
        BucketName: !Join
          - '-'
          - - Ref: AppName
            - bucket
        LambdaArn:                            # <- this
          Fn::ImportValue:                    # <- this
            Fn::Sub: "${AppName}-lambda-arn"  # <- this

, то внезапно произойдет сбой развертывания всех стеков -

(c4abb639548f2545e145ea54ed13d2ea) justin@justin-XPS-13-9360:~/work/gists/c4abb639548f2545e145ea54ed13d2ea$ aws cloudformation describe-stack-events --stack-name xxx
{...}
ROLLBACK_IN_PROGRESS |  No export named xxx-lambda-arn found. Rollback requested by user. 

Я удивлен основным стеком не может обнаружить, что одному из его вложенных стеков (стек S3) необходимо экспортировать значение из другого вложенного стека (стека Lambda).

Я надеялся, что это можно решить, добавив * Блок 1014 *, что делает вложенный стек S3 зависимым от вложенного стека Lambda, но это тоже не работает.

Есть ли какой-то вид ограничения на импорт / экспорт значений через вложенный стек, принадлежащий одному и тому же главному стеку? Или есть обходной путь?

Полный смысл здесь -

https://gist.github.com/jhw/c4abb639548f2545e145ea54ed13d2ea

1 Ответ

1 голос
/ 25 января 2020

В вашем вложенном стеке вам нужно указать выход, чтобы мастер-стек имел к нему доступ из ресурса, т.е.

Лямбда-стек

"Resources": {
    "LambdaFunction": ...
}
"Outputs": {
    "LambdaFunction": {
                "Value":
                { "Fn::GetAtt": ["LambdaFunction","Arn"] }
    }

Мастер-стек

LambdaArn: !GetAtt Lambda.Outputs.LambdaArn

На Lambda можно ссылаться из основного стека, для получения дополнительной информации взгляните на эту эталонную архитектуру https://github.com/aws-samples/ecs-refarch-cloudformation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...