首页 文章

!无服务器框架中的ImportValue无法正常工作

提问于
浏览
3

我正在尝试从CloudFormation中创建的堆栈中导出DynamoDb StreamArn,然后使用serverless.yml中的!ImportValue引用导出 .

但我收到此错误消息:

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

2 回答

  • 1

    使用 ${cf:stackName.outputKey} 解决

  • 4

    您似乎正在使用 !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
    

    希望有助于解决您的问题 .

相关问题