# @agiledigital/serverless-sns-sqs-lambda 中文文档

规范地址：https://npmcn.com/package/%40agiledigital/serverless-sns-sqs-lambda/

版本：2\.1\.0
npm 元数据更新时间：2024-01-05T04:08:06.699Z
中文译文更新时间：2026-11-05T22:57:22.418Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40agiledigital/serverless-sns-sqs-lambda
原文对照：https://npmcn.com/package/%40agiledigital/serverless-sns-sqs-lambda/?lang=original
项目主页：https://github.com/agiledigital/serverless-sns-sqs-lambda#readme
源码仓库：https://github.com/agiledigital/serverless-sns-sqs-lambda

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：125 kB，10 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- peer 依赖：serverless 3\.x
- 首次发布：2019-09-11T06:50:56.033Z
- 最新版本发布：2023-05-24T02:18:46.894Z
- 近 30 天下载量：10127（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：27（近 12 个月 0 个）

## 中文简介

无服务器的插件, 使无服务器的- sns- sqs- lambda 事件

## 安装

```sh
npm install @agiledigital/serverless-sns-sqs-lambda
```

也可以使用：`pnpm add @agiledigital/serverless-sns-sqs-lambda`、`yarn add @agiledigital/serverless-sns-sqs-lambda`、`bun add @agiledigital/serverless-sns-sqs-lambda`

## README

# 无服务器 Sns Sqs Lambda

[![serverless](http://public.serverless.com/badges/v3.svg)](http://www.serverless.com/) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://npmcn.com/package/%40agiledigital/serverless-sns-sqs-lambda/LICENSE) ![Github Actions Status](https://github.com/agiledigital/serverless-sns-sqs-lambda/workflows/Node.js%20CI/badge.svg?branch=master) [![Type Coverage](https://img.shields.io/badge/dynamic/json.svg?label=type-coverage&prefix=%E2%89%A5&suffix=%&query=$.typeCoverage.atLeast&uri=https%3A%2F%2Fraw.githubusercontent.com%2Fagiledigital%2Fserverless-sns-sqs-lambda%2Fmaster%2Fpackage.json)](https://github.com/plantain-00/type-coverage) [![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/agiledigital/serverless-sns-sqs-lambda.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/agiledigital/serverless-sns-sqs-lambda/context:javascript) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) ![npm](https://img.shields.io/npm/v/@agiledigital/serverless-sns-sqs-lambda)

这是AWS lambda 函数的无服务器框架插件 。 现在,它 可以直接订阅 SNS 主题。 不过,如果你想 提供重试能力和错误处理, 您需要写很多 锅炉板,用于在Lambda号与Lambda号之间添加一个队列和一个死字队列 SNS话题. 此插件允许您使用 : `batchSize` (单位:千美元) `maxRetryCount` 仅作为直接签署该议题.

# 目录

-   [安装](https://npmcn.com/package/%40agiledigital/serverless-sns-sqs-lambda/#readme-install)
-   [设置](https://npmcn.com/package/%40agiledigital/serverless-sns-sqs-lambda/#readme-setup)

## 安装

运行 `npm install` 在您的无服务器项目中 .

`$ npm install --save-dev @agiledigital/serverless-sns-sqs-lambda`

将插件添加到您的无服务器. yml 文件

```yml
plugins:
  - "@agiledigital/serverless-sns-sqs-lambda"
```

## 设置

以 snsSqs 事件提供Lambda 函数,插件会添加 AWS SNS 话题和订阅, SQS 队列和死字母队列,以及Lambda 的角色需要.

```yml
functions:
  processEvent:
    handler: handler.handler
    events:
      - snsSqs:
          name: TestEvent # Required - choose a name prefix for the event queue
          topicArn: !Ref Topic # Required - SNS topic to subscribe to
          omitPhysicalId: true # Optional - default value is false but recommended to be set to true for new deployments (see below)
          batchSize: 2 # Optional - default value is 10
          maximumBatchingWindowInSeconds: 10 # optional - default is 0 (no batch window)
          maxRetryCount: 2 # Optional - default value is 5
          kmsMasterKeyId: !GetAtt SQSQueueKey.Arn # optional - default is none (no encryption) - see Notes on Encryption section below
          kmsDataKeyReusePeriodSeconds: 600 # optional - AWS default is 300 seconds
          deadLetterMessageRetentionPeriodSeconds: 1209600 # optional - AWS default is 345600 secs (4 days)
          deadLetterQueueEnabled: true # optional - default is true
          visibilityTimeout: 120 # optional (in seconds) - AWS default is 30 secs
          rawMessageDelivery: true # Optional - default value is true
          enabled: true # Optional - default value is true
          filterPolicy: # Optional - filter messages that are handled
            pets:
              - dog
              - cat

            # Overrides for generated CloudFormation templates
            # Mirrors the CloudFormation docs but uses camel case instead of title case
            #
            # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html
            mainQueueOverride:
              maximumMessageSize: 1024
              ...
            deadLetterQueueOverride:
              maximumMessageSize: 1024
              ...
            # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
            eventSourceMappingOverride:
              sourceAccessConfigurations:
                - Type: SASL_SCRAM_256_AUTH
                  URI: arn:aws:secretsmanager:us-east-1:01234567890:secret:MyBrokerSecretName
            # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
            subscriptionOverride:
              region: ap-southeast-2

resources:
  Resources:
    Topic:
      Type: AWS::SNS::Topic
      Properties:
        TopicName: TestTopic

plugins:
  - "@agiledigital/serverless-sns-sqs-lambda"
```

### 省略物理指数选项是什么?

AWS 允许您省略 SQS 资源的物理ID( 队列名称) .

在这种情况下,名称由AWS根据逻辑ID(Cloud Formation资源名)自动生成.

这提供了一些好处,例如能够进行需要替换的更新,而不必担心队列名称的80个字符最大长度.

然而,如果需要按名称引用队列(这应该少有),而不是CloudFormation的引用,你可能必须关闭它,以便名称稳定.

如果这是插件的第一个版本, 将默认设定为“ true ” 。 然而,由于插件已经在使用中, 它可能打破已有的堆栈, 并且可能不向后兼容, 因此默认情况下我们设置它为“ 假的 ” 。 将它切换到一个已存在的堆栈上的“ true” 已经测试过, 它似乎可以工作, 尽管它确实创建了新的队列并删除旧队列 。 在已有的堆栈上切换选项, 以你自己的风险 .

另见: [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html 互联网档案馆的存檔,存档日期2013-12-21](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html)

### 关于加密的说明

如果您选择加密您的 SQS 队列, SNS 话题将无法使用管理下的密钥( 化名/ aws/ sqs) 发送任何消息 。 这是由于AWS的限制.

见: [https://aws.amazon.com/premiumsupport/knowledge-center/sns-topic-sqs-queue-sse-kms-key-policy/ 互联网档案馆的存檔,存档日期2014-12-21](https://aws.amazon.com/premiumsupport/knowledge-center/sns-topic-sqs-queue-sse-kms-key-policy/)

您需要创建如下的CMK :

```yaml
# To allow SNS to push messages to an encrypted queue, a CMK must be used
SQSQueueCMK:
  Type: AWS::KMS::Key
  Properties:
    KeyPolicy:
      Version: "2012-10-17"
      Id: key-default-1
      Statement:
        - Sid: Enable IAM User Permissions
          Effect: Allow
          Principal:
            AWS: !Join
              - ""
              - - "arn:aws:iam::"
                - !Ref "AWS::AccountId"
                - ":root"
          Action: "kms:*"
          Resource: "*"
        - Sid: Allow SNS publish to SQS
          Effect: Allow
          Principal:
            Service: sns.amazonaws.com
          Action:
            - kms:GenerateDataKey
            - kms:Decrypt
          Resource: "*"
```

并随后在 `snsSqs` 配置为 `kmsMasterKeyId` 属性.

```yaml
functions:
  processEvent:
    handler: handler.handler
    events:
      - snsSqs:
          # ...
          kmsMasterKeyId: !GetAtt SQSQueueKey.Arn
          # ...
```

`kmsMasterKeyId` 可以是密钥ID(简单字符串),也可以是ARN或指向ARN. 使用! 对一个密钥的校正会返回一个密钥ID并且无效,所以您需要使用GetAtt并引用Arn属性.

### 云态覆盖

如果您想要覆盖 CloudFormation 模板的一部分 此插件生成的 CloudFormation 可以通过原始的 CloudFormation 以覆盖上述配置选项.

配置必须提供骆驼大小写键, 除此之外,你可以使用"云形"配置 由AWS指定.

例如, 如果您想要覆盖主队列的最大MessageSize 您可以在 [AWS 文档](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html) 将关键骆驼大小写(“最大误差”)并传入覆盖部分:

```yaml
    events:
      - snsSqs:
          name: Example
          ...
          mainQueueOverride:
            maximumMessageSize: 1024
```

## 常见问题

### @agiledigital/serverless-sns-sqs-lambda 是什么？

无服务器的插件, 使无服务器的- sns- sqs- lambda 事件

### 如何安装 @agiledigital/serverless-sns-sqs-lambda？

在项目目录运行 npm install @agiledigital/serverless-sns-sqs-lambda，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：serverless（3\.x）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @agiledigital/serverless-sns-sqs-lambda 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/agiledigital\_\_serverless-sns-sqs-lambda 是否存在。

### @agiledigital/serverless-sns-sqs-lambda 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @agiledigital/serverless-sns-sqs-lambda 可以商用吗？

@agiledigital/serverless-sns-sqs-lambda 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @agiledigital/serverless-sns-sqs-lambda 的下载量有多少？

根据 npm 官方下载统计，@agiledigital/serverless-sns-sqs-lambda 在 2026/10/05 – 2026/11/03 这 30 天内被下载 10,127 次，日均约 338 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @agiledigital/serverless-sns-sqs-lambda 还在维护吗？

最新版本 2\.1\.0 发布于 2023/05/24（3 年前）；至今共发布 27 个版本，其中过去 12 个月发布了 0 个；首次发布于 2019/09/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

