!ImportValue в Serverless Framework не работает

Я пытаюсь экспортировать DynamoDb StreamArn из стека, созданного в CloudFormation, а затем ссылаюсь на экспорт, используя !ImportValue в serverless.yml.

Но я получаю это сообщение об ошибке:

unknown tag !<!ImportValue> in "/codebuild/output/src/serverless.yml"

Cloudformation и serverless.yml определены, как показано ниже. Любая помощь приветствуется.

StackA.yml

AWSTemplateFormatVersion: 2010-09-09
Description: Resources for the registration site

Resources:
  ClientTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    Properties:
      TableName: client
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 2
        WriteCapacityUnits: 2
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES

Outputs:  
  ClientTableStreamArn:
      Description: The ARN for My ClientTable Stream
      Value: !GetAtt ClientTable.StreamArn
      Export:
        Name: my-client-table-stream-arn

serverless.yml

service: my-service

frameworkVersion: ">=1.1.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs6.10
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeStream
        - dynamodb:GetRecords
        - dynamodb:GetShardIterator
        - dynamodb:ListStreams
        - dynamodb:GetItem
        - dynamodb:PutItem
      Resource: arn:aws:dynamodb:*:*:table/client

functions:

  foo:
    handler: foo.main
    events:
      - stream:
          type: dynamodb
          arn: !ImportValue my-client-table-stream-arn
          batchSize: 1

person L G    schedule 01.09.2017    source источник


Ответы (3)


Решено с помощью ${cf:stackName.outputKey}

person L G    schedule 14.09.2017
comment
Вы также можете указать экспортированное значение в файле yaml без сервера, используя: Fn::ImportValue: my-client-table-stream-arn - person Metallikanz; 20.10.2017
comment
@ Люк, каким будет имя стека в этом случае? У меня есть файл ресурсов, импортированный в мой основной serverless.yml (ресурс написан в формате YAML без сервера), и в этом файле у меня есть некоторый вывод, который я хочу импортировать в основной serverless.yml, но я всегда получаю. Не найден экспорт с именем myOutputKey . Пробую через Fn::ImportValue. - person Cockootec; 07.06.2018

Я тоже боролся с этим, и что мне помогло:

functions:
  foo:
    handler: foo.main
    events:
      - stream:
         type: dynamodb
         arn: 
          !ImportValue my-client-table-stream-arn
         batchSize: 1

Обратите внимание, что встроенные функции ImportValue находятся на новой строке и с отступом, иначе весь event игнорируется при создании cloudformation-template-update-stack.json.

person Jenya Y.    schedule 13.03.2019

Похоже, вы используете сокращение !ImportValue для CloudFormation YAML. Насколько я понимаю, когда CloudFormation анализирует YAML, а !ImportValue фактически использует псевдоним Fn::ImportValue. Согласно документации по бессерверным функциям, похоже, что они должны поддерживать форму импорта Fn::ImportValue.

На основе документации для Fn::ImportValue, вы должны иметь возможность ссылаться на свой экспорт, например

  - stream:
      type: dynamodb
      arn: {"Fn::ImportValue": "my-client-table-stream-arn"}
      batchSize: 1

Надеюсь, это поможет решить вашу проблему.

person Jamie Starke    schedule 10.09.2017