new-immo-group/messenger-transport-sqs-iam

处理 IAM 文件以访问 IAM 角色的 aws 连接器

v2.0.0 2024-09-13 10:20 UTC

README

此库允许通过 IAM 认证简化 AWS 的 SQS 队列的集成。

它将为匹配 ^https://sqs. 的任何 DSN 注册一个新的 Messenger 传输。

安装

$ composer require new-immo-group/messenger-transport-sqs-iam

配置

环境变量

需要以下环境变量

AWS_REGION=                         # in my case, eu-west-3
AWS_VERSION=                        # generically latest
AWS_SDK_LOAD_NONDEFAULT_CONFIG=true # whether to load .aws/config
AWS_PROFILE=                        # profile in $HOME/.aws/config you want to load
AWS_ACCOUNT_ID=
MESSENGER_TRANSPORT_DSN=https://sqs.${AWS_REGION}.amazonaws.com/${AWS_ACCOUNT_ID}

AWS SDK

主机的 $HOME/.aws/config$HOME/.aws/credentials 文件必须存在。

注意,如果设置了环境变量 AWS_SDK_LOAD_NONDEFAULT_CONFIG,在加载 .aws/credentials 时,AWS-SDK 也会加载 .aws/config

如果存在活动的 open_basedir() 限制,请确保将 $HOME/.aws 添加到允许的路径列表中。

Symfony

注册 SQS 传输

services:
  NewImmoGroup\AwsBroker\SqsTransportFactory:
    class: NewImmoGroup\AwsBroker\SqsTransportFactory
    tags: [messenger.transport_factory]
    arguments:
      $defaultOptions:
        auto_setup: true
        queue_prefix: 'some-prefix-'
        queue_tags:
          queue_env: "%env(APP_ENV)%"

我们可以提供可选的默认工厂选项值

  • auto_setup:它控制传输级别上,是否在发送消息时自动创建队列。默认为 false
  • queue_prefix:定义将添加到队列名称的前缀。
  • queue_tags:将设置在所有创建的队列上的标签列表。

这些选项中的任何一个都可以在队列级别上覆盖(见下文)。

队列配置示例

framework:
  messenger:
    transports:
      async:
        dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
        serializer: messenger_serializer
        options:
          queue_name: "my-queue-name-here"
          auto_setup: false
          queue_prefix: 'some-prefix-'
          queue_tags:
            env: "%env(APP_ENV)%"

auto_setupqueue_prefixqueue_tags 参数是可选的。如果存在,它们将覆盖工厂默认值。

CI/测试

需要 PHP7.4-CLI 和 PHP8.1-CLI。

端到端/功能测试将需要一个有效的 AWS 配置(通常几小时后到期)。

make test # Symfony5/PHP7.4
make test@php8 # Symfony5/PHP8.1
make test@sf6 # Symfony6/PHP8.1

AWS.SQS 权限

提供用户应能够调用

  • GetQueueUrl
  • CreateQueue
  • SendMessage
  • DeleteMessage
  • GetQueueAttribute