bitbull/magento2-module-awseventbridge

用于 AWS EventBridge 集成的 Magento 2 模块。

0.5.0-beta 2020-08-26 13:09 UTC

README

将 Magento 事件发送到 Amazon EventBridge 服务,以便将 Magento 与许多不同的 AWS 无服务器服务集成。

Packagist

Magento

PHP

内容

安装说明

使用 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 权限的信息

如果您正在使用 EC2 实例,请将此策略添加到附加的 IAM 角色

在以下位置了解更多关于使用 IAM 角色与 EC2 的信息

如果您在本地、本地或使用与 AWS 不同的云服务提供商运行 Magento,请按照以下步骤操作

  1. 创建一个新的 AWS IAM 用户
  2. 附加创建的策略
  3. 为用户生成访问密钥

在以下位置了解更多关于创建 IAM 用户的信息

设置

转到 "商店" > "配置" > "服务" > "AWS EventBridge",然后开始配置此模块。

凭证

您可以设置 IAM 用户的访问密钥

Credentials keys

从环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 获取

Credentials env

使用 EC2 实例角色

Credentials ec2

选项

编辑模块选项

Options

  • 设置您希望接收事件的正确区域,例如 "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 服务。

启用事件

Events

这些选项部分包含了一组支持的事件列表,这些事件可以被激活并用于触发 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' [] []

贡献

任何帮助都受欢迎。如果您想首先贡献,请阅读贡献指南