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' [] []
贡献
任何帮助都受欢迎。如果您想首先贡献,请阅读贡献指南。




