!无服务器框架中的 ImportValue 不起作用
!ImportValue in Serverless Framework not working
我正在尝试从 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
您似乎正在为 CloudFormation YAML 使用 !ImportValue
shorthand。我的理解是,当 CloudFormation 解析 YAML 时,!ImportValue
实际上是别名 Fn::ImportValue
。根据 Serverless Function 文档,它们似乎应该支持 Fn::ImportValue
形式的导入。
根据 Fn::ImportValue 的文档,您应该能够像
一样引用您的导出
- stream:
type: dynamodb
arn: {"Fn::ImportValue": "my-client-table-stream-arn"}
batchSize: 1
希望对您的问题有所帮助。
使用${cf:stackName.outputKey}
解决
我也为此苦苦挣扎,对我有用的是:
functions:
foo:
handler: foo.main
events:
- stream:
type: dynamodb
arn:
!ImportValue my-client-table-stream-arn
batchSize: 1
注意,内部函数 ImportValue
换行缩进,否则生成 cloudformation-template-update-stack.json
时整个 event
将被忽略。
我正在尝试从 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
您似乎正在为 CloudFormation YAML 使用 !ImportValue
shorthand。我的理解是,当 CloudFormation 解析 YAML 时,!ImportValue
实际上是别名 Fn::ImportValue
。根据 Serverless Function 文档,它们似乎应该支持 Fn::ImportValue
形式的导入。
根据 Fn::ImportValue 的文档,您应该能够像
一样引用您的导出 - stream:
type: dynamodb
arn: {"Fn::ImportValue": "my-client-table-stream-arn"}
batchSize: 1
希望对您的问题有所帮助。
使用${cf:stackName.outputKey}
我也为此苦苦挣扎,对我有用的是:
functions:
foo:
handler: foo.main
events:
- stream:
type: dynamodb
arn:
!ImportValue my-client-table-stream-arn
batchSize: 1
注意,内部函数 ImportValue
换行缩进,否则生成 cloudformation-template-update-stack.json
时整个 event
将被忽略。