问题描述
我试图使用由 S3 事件触发的 AWS SAM 创建一个 AWS 状态机(步骤函数)。以下是我的 AWS SAM yml 代码段。
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 支持提交错误报告,以便服务修复它。