我尝试从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
答案 0 :(得分:5)
使用npm i --no-optional
答案 1 :(得分:1)
您似乎正在使用!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
希望这有助于解决您的问题。
答案 2 :(得分:0)
我也为此而苦苦挣扎,对我来说欺骗的是:
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
。