bitbull / magento2-module-awseventbridge
用于 AWS EventBridge 集成的 Magento 2 模块。
Requires
- php: ~7.2.0|~7.3.0|~7.4.0
- aws/aws-sdk-php: ^3.110
This package is auto-updated.
Last update: 2024-09-19 22:28:43 UTC
README
将 Magento 事件发送到 Amazon EventBridge 服务,以便将 Magento 与许多不同的 AWS 无服务器服务集成。
内容
安装说明
使用 composer 安装此模块
composer require bitbull/magento2-module-awseventbridge
执行 Magento 2 设置升级
bin/magento setup:upgrade [--keep-generated]
所需 IAM 权限
创建包含以下内容的新的 IAM 策略
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "events:PutEvents" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "events:source": "example.com" } } } ] }
根据您的模块配置更改 events:source
在以下位置了解更多关于 IAM 权限的信息
- https://docs.aws.amazon.com/en_us/AmazonCloudWatch/latest/events/auth-and-access-control-cwe.html
- https://docs.aws.amazon.com/en_us/AmazonCloudWatch/latest/events/policy-keys-cwe.html
如果您正在使用 EC2 实例,请将此策略添加到附加的 IAM 角色
在以下位置了解更多关于使用 IAM 角色与 EC2 的信息
如果您在本地、本地或使用与 AWS 不同的云服务提供商运行 Magento,请按照以下步骤操作
- 创建一个新的 AWS IAM 用户
- 附加创建的策略
- 为用户生成访问密钥
在以下位置了解更多关于创建 IAM 用户的信息
- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html
设置
转到 "商店" > "配置" > "服务" > "AWS EventBridge",然后开始配置此模块。
凭证
您可以设置 IAM 用户的访问密钥
从环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 获取
使用 EC2 实例角色
选项
编辑模块选项
- 设置您希望接收事件的正确区域,例如 "eu-west-1"。
- 设置事件源名称,当连接到这些事件时,使用可以过滤的值(
events:source
)。 - 设置事件总线名称,留空以使用默认账户。
- 启用跟踪以将
tracking
属性添加到数据对象。 - 如果要在
var/log/aws-eventbridge.log
日志文件中进行更详细的日志记录,请启用调试模式。 - 启用 CloudWatch Events 回退,以使用此服务而不是 EventBridge(向后兼容)。
- 启用 dry run 模式以激活模块操作和集成,而不实际发送事件数据。
- 启用 Queue 模式以异步发送事件,使用 Magento 队列而不是实时(仅在 Magento Enterprise 版本中可用)。
如果您启用了 "Queue 模式",您还需要在 env.php 中启用 cron 消费者运行器
'cron_consumers_runner' => [ 'max_messages' => 5, 'cron_run' => true, 'consumers' => [ 'aws.eventbridge.events.send' ] ]
注意:cron 事件始终同步执行,不使用队列。
事件
此模块注入观察者来监听 Magento 2 事件,处理负载,然后将事件发送到 AWS 服务。
启用事件
这些选项部分包含了一组支持的事件列表,这些事件可以被激活并用于触发 Lambda 函数、向 SNS 主题发送事件、向 SQS 队列添加消息、执行 StepFunction 等操作。启用您希望接收的事件,以便能够触发您的 EventBridge 规则。
创建 AWS EventBridge 规则
为了连接到 EventBridge 事件并触发目标,您需要创建一个匹配一个或多个事件的 EventBridge 规则。
事件名称用于事件数据的 detail-type
部分,因此如果您想匹配 "CartProductAdded" 事件,您需要创建如下规则:
{ "source": [ "example.com" ], "detail-type": [ "CartProductAdded" ] }
请记住也要匹配 source
名称,以避免与不同 Magento 环境发生冲突。
您也可以匹配多个事件名称,例如,如果您想响应所有购物车事件:
{ "source": [ "example.com" ], "detail-type": [ "CartProductAdded", "CartProductUpdated", "CartProductRemoved" ] }
是否可以使用更具体的匹配规则来匹配,例如,与特定产品 sku 相关的所有购物车事件?
{ "source": [ "example.com" ], "detail-type": [ "CartProductAdded", "CartProductUpdated", "CartProductRemoved" ], "detail": { "sku": [ "WJ12-S-Blue" ] } }
有关使用 Event Patterns 进行基于内容的过滤的更多信息,请参阅:
数据规范
事件将通过 Details
事件属性传递数据。
( [sku] => WJ12-S-Blue [qty] => 1 )
每个事件都有一个包含日期、时间戳和事件处理模式的 metadata
属性。
( [metadata] => Array ( [date] => 2020-08-26 08:51:18 [timestamp] => 1598431878 [async] => false // true if event was sent asynchronously using Magento Queue ) )
此外(在后台选项中激活跟踪选项),每个事件还将被丰富一个包含有关客户端、会话和框架信息的 tracking
属性,例如:
( [sku] => WJ12-S-Blue [qty] => 1 [tracking] => Array ( [transport] => HTTP [hostname] => f3a501ad4988 [time] => 1566594699836 [storeId] => 1 [version] => Array ( [module] => dev-master [php] => 7.1.27-1+ubuntu16.04.1+deb.sury.org+1 [magento] => 2.2.7 ) [user] => Array ( [id] => 3 [username] => fabio.gollinucci [email] => fabio.gollinucci@bitbull.it ) [ip] => 172.17.0.1 [userAgent] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0 ) )
当使用 Magento CLI 时,user
基于执行命令的系统用户。
( [sku] => WJ12-S-Blue [qty] => 1 [tracking] => Array ( [transport] => SHELL [hostname] => f3a501ad4988 [time] => 1566821355758 [storeId] => 1 [version] => Array ( [module] => dev-master [php] => 7.1.27-1+ubuntu16.04.1+deb.sury.org+1 [magento] => 2.2.7 ) [user] => Array ( [name] => www-data [passwd] => x [uid] => 1000 [gid] => 33 [gecos] => www-data [dir] => /var/www [shell] => /usr/sbin/nologin ) ) )
支持的事件
以下是您可以启用的事件列表:
购物车事件
CartProductAdded
客户添加产品到购物车。
{ "sku": "abc-123", "qty": 1 }
CartProductUpdated
客户更新购物车。
{ "sku": "abc-123", "operation": "add", "value": 1, "qty": { "from": 1, "to": 2 } }
{ "sku": "abc-123", "operation": "remove", "value": 1, "qty": { "from": 2, "to": 1 } }
CartProductRemoved
客户从购物车中移除产品。
{ "sku": "abc-123", "qty": 2 }
管理员用户事件
UserLoggedIn
管理员用户登录。
{ "id": 1, "username": "admin", "email": "admin@example.com" }
UserLoggedOut
管理员用户登出。
{ "id": 1, "username": "admin", "email": "admin@example.com" }
UserLoginFailed
管理员用户登录失败。
{ "username": "admin" }
客户事件
CustomerLoggedIn
客户用户登录。
{ "id": 1, "createdAt": "2020-08-24 00:00:00", "email": "test@example.com", "firstname": "Test", "gender": "", "lastname": "Test", "middlename": "", "prefix": "", "suffix": "" }
CustomerLoggedOut
客户用户登出。
{ "id": 1, "createdAt": "2020-08-24 00:00:00", "email": "test@example.com", "firstname": "Test", "gender": "", "lastname": "Test", "middlename": "", "prefix": "", "suffix": "" }
CustomerLoginFailed
客户用户登录失败。
{ "username": "test@example.com", "messages": [ "The account sign-in was incorrect or your account is disabled temporarily. Please wait and try again later." ] }
CustomerSignedUp
客户用户注册。
{ "id": 1, "createdAt": "2020-08-24 00:00:00", "email": "test@example.com", "firstname": "Test", "gender": "", "lastname": "Test", "middlename": "", "prefix": "", "suffix": "" }
CustomerSignedUpFailed
客户用户注册失败。
{ "email": "test@example.com", "firstname": "Test", "lastname": "Test", "messages": [ "customerAlreadyExistsErrorMessage" ] }
时事通讯事件
NewsletterSubscriptionChanged
客户用户更改时事通讯订阅偏好。
{ "customerId": 1, "email": "test@example.com", "isSubscribed": true, "status": "SUBSCRIBED", "unsubscriptionLink": "https://..", "code": "1234" }
{ "customerId": 1, "email": "test@example.com", "isSubscribed": false, "status": "UNSUBSCRIBED" }
订单事件
OrderPlaced
新订单已创建。
{ "id": "000000001", "status": "pending", "coupon": null, "billingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": 5, "taxAmount": 0, "total": 64, "items":[{ "sku": "24-MB02", "name": "Fusion Backpack", "price": 59, "qty": 1 }] }
OrderCreated
/ OrderUpdated
订单已创建或更新。
{ "id": "000000001", "status": "pending", "coupon": null, "billingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": 5, "taxAmount": 0, "total": 64, "items":[{ "sku": "24-MB02", "name": "Fusion Backpack", "price": 59, "qty": 1 }] }
OrderCanceled
订单已取消。
{ "id": "000000001", "status": "cancelled", "coupon": null, "billingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAddress": { "country": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": 5, "taxAmount": 0, "total": 64, "items":[{ "sku": "24-MB02", "name": "Fusion Backpack", "price": 59, "qty": 1 }] }
OrderDeleted
订单已删除。
发票事件
InvoiceCreated
/ InvoiceUpdated
发票已创建或更新。
{ "orderId": "000000001", "status": "OPEN", "billingAddress":{ "countryId": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": "10.0000", "taxAmount": 0, "total": 77, "items": [{ "sku": "WS12-M-Purple", "name": "Radiant Tee", "price": "22.0000", "qty": 1 }] }
InvoicePayed
发票已支付。
{ "orderId": "000000001", "status": "PAID", "billingAddress":{ "countryId": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": "10.0000", "taxAmount": 0, "total": 77, "items": [{ "sku": "WS12-M-Purple", "name": "Radiant Tee", "price": "22.0000", "qty": 1 }] }
InvoiceRegistered
发票已注册。
{ "orderId": "000000001", "status": "PAID", "billingAddress":{ "countryId": "IT", "region": null, "street": [ "via di test" ], "city": "Test", "postCode": "12345" }, "shippingAmount": "10.0000", "taxAmount": 0, "total": 77, "items": [{ "sku": "WS12-M-Purple", "name": "Radiant Tee", "price": "22.0000", "qty": 1 }] }
OrderDeleted
发票已删除。
贷记备忘录事件
CreditmemoCreated
/ CreditmemoUpdated
贷记备忘录已创建或更新。
{ "orderId": "000000001", "shippingAmount": 10, "taxAmount": 0, "total": 77, "status": "OPEN", "items": [{ "sku":"WS12-M-Purple", "name":"Radiant Tee", "price":"22.0000", "quantity":1 }] }
CreditmemoRefunded
贷记备忘录已退款。
{ "orderId": "000000001", "shippingAmount": 10, "taxAmount": 0, "total": 77, "status": "REFUNDED", "items": [{ "sku":"WS12-M-Purple", "name":"Radiant Tee", "price":"22.0000", "quantity":1 }] }
CreditmemoDeleted
贷记备忘录已删除。
装运事件
ShipmentSaved
装运已保存。
{ "id": "000000016", "tracks": [{ "title": "DHL", "carrier": "dhl", "number": "123346457" }], "comments": [ "this is a comment" ], "qty": 1, "weight": null, "items": [{ "sku": "MT07-M-Gray", "name": "Argus All-Weather Tank", "price": "22.0000", "qty": 1 }] }
ShipmentDeleted
装运已删除。
缓存事件
CacheFlushAll
管理员用户清空缓存。
{}
CacheFlushSystem
管理员用户清空系统缓存。
{}
CacheFlushCatalogImages
管理员用户清空目录图片缓存。
{}
CacheFlushMedia
管理员用户清空媒体缓存。
{}
CacheFlushStaticFiles
管理员用户清空静态文件缓存。
{}
索引器事件
StateSaved
索引更改状态。
{ "index": "catalog_product_price", "status": "working" }
{ "index": "catalogsearch_fulltext", "status": "valid" }
调试和本地测试
模块日志记录在 var/log/aws-eventbridge.log
日志文件中。
启用“调试模式”选项以增加日志级别并检索有关模块操作的更多详细信息。
[2020-08-26 10:49:36] report.DEBUG: Event 'User/LoginFailed' captured, executing.. [] []
[2020-08-26 10:49:36] report.DEBUG: Event 'User/LoginFailed' executed in 0.002s [] []
启用“Dry Run 模式”以测试模块而无需配置凭据。此选项跳过 AWS API 调用,并允许您在本地进行测试而无需 AWS 账户。
[2020-08-26 10:49:36] report.DEBUG: [DryRun] Sending event 'UserLoginFailed' with data: Array
(
[username] => admin@admin.com
[metadata] => Array
(
[date] => 2020-08-26 10:49:36
[timestamp] => 1598438976
[async] =>
)
)
[] []
[2020-08-26 10:49:36] report.DEBUG: [DryRun] Event 'UserLoginFailed' sent with id 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' [] []
贡献
任何帮助都受欢迎。如果您想首先贡献,请阅读贡献指南。