【发布时间】:2021-01-29 08:04:23
【问题描述】:
我试图使用由 S3 事件触发的 AWS SAM 创建一个 AWS 状态机(步进函数)。以下是我的 AWS SAM yml sn-p。
SampleStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
Name: sample-state-machine
DefinitionUri: state-machines/my-definition.asl.json
Events:
S3PutEvent:
Type: EventBridgeRule
Properties:
Pattern:
source:
- "aws.s3"
detail:
eventSource:
- s3.amazonaws.com
eventName:
- PutObject
requestParameters:
bucketName:
- !Ref MyBucketName
在部署此应用程序时,它使用我在 sam yml 模板中指定的模式成功创建了规则。 (但 JSON 键值对的顺序略有变化)
{
"source": [
"aws.s3"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"requestParameters": {
"bucketName": [
"my-bucket"
]
},
"eventName": [
"PutObject"
]
}
}
很遗憾,此规则未从事件总线捕获任何事件。所以我尝试按以下顺序更改 JSON 键值对,
{
"source": [ "aws.s3"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"my-bucket"
]
}
}
}
它开始接收事件并正常工作。
所以我的问题是,
- 此顺序对于 AWS eventbridge 规则模式真的很重要吗?
- 如果是这样,我们如何在 AWS sam 执行(YML 到 JSON)时保留这个顺序?
谢谢
【问题讨论】:
-
如果您可以肯定地验证订单会影响它,那么您应该将其作为错误记录到 aws。
-
当我通过 Terraform 创建规则时,我似乎遇到了同样的问题。 JSON 顺序在规则创建期间更改 + 有序版本不起作用。你有没有运气解决这个问题?
标签: amazon-web-services aws-serverless aws-sam aws-event-bridge