

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 AS2 消息自定义 HTTP 标头
<a name="as2-custom-http-headers"></a>

向贸易伙伴发送 AS2 消息时，您可能需要自定义 HTTP 标头以满足特定要求或增强与合作伙伴 AS2 服务器配置的兼容性。此 CloudFormation 模板创建了一个基础架构，用于为通过发送的 AS2 消息启用自定义 HTTP 标头 AWS Transfer Family。它设置了充当代理的 Amazon API Gateway 和 Lambda 函数，允许动态修改交易伙伴 AS2 服务器所需的标头。

使用此模板执行以下操作：
+ 向出站 AS2 消息添加自定义 HTTP 标头
+ 使用自定义值覆盖默认标题值
**重要**  
覆盖默认标头值时要小心，因为这可能会导致发送失败：需要一些 AS2 标头。
+ 确保与具有特定标题要求的贸易伙伴兼容

## 模板概述
<a name="template-overview"></a>

该模板创建了以下主要组件：
+ 用于处理和转发消息的 Lambda 函数 AS2 
+ 用于公开 Lambda 函数的亚马逊 API Gateway
+ Lambda 函数的 IAM 角色和权限
+ 支持 HTTPS 的条件资源

模板文件可在此处获得：[动态 HTTP 标头模板](https://s3.amazonaws.com/aws-transfer-resources/as2-templates/dynamic-http-headers.template.yml)。

## 工作方式
<a name="how-it-works"></a>

1. Amazon API Gateway 接收来自的传入 AS2 消息 AWS Transfer Family。

1. 该请求被转发到 Lambda 函数。

1. Lambda 函数处理请求，根据需要添加或修改标头。

1. 然后，修改后的请求会被转发到合作伙伴的 AS2 服务器。

1. 来自合作伙伴服务器的响应将通过 Lambda 和 Amazon API Gateway 返回到。 AWS Transfer Family

## 主要功能
<a name="key-features"></a>
+ *动态标题修改：*允许自定义主题标题和添加其他必需的标题。
+ P@@ *rotocol Support：*可同时使用 HTTP 和 HTTPS 协议。
+ *灵活配置：*允许指定合作伙伴主机、端口和路径。

## 实施详情
<a name="implementation-details"></a>

该模板实现了以下关键组件：

### Lambda 函数
<a name="lambda-function"></a>

该解决方案的核心是一个 Node.js Lambda 函数，该函数：
+ 接收来自亚马逊 API Gateway 的请求
+ 根据配置和传入的请求数据修改标头
+ 将修改后的请求转发到合作伙伴的服务器 AS2 
+ 同时处理 HTTP 和 HTTPS 协议
+ 包括错误处理和日志记录

### Amazon API Gateway
<a name="api-gateway"></a>

HTTP API 设置为：
+ 接收传入的 AS2 消息
+ 将请求路由到 Lambda 函数
+ 将回复返回到 AWS Transfer Family

### 模板参数
<a name="as2-header-template-parameter-details"></a>

按如下方式输入模板参数信息。请注意，所有这些参数都是字符串。
+ `Environment`: 此参数用于命名模板创建的资源：无论它们是用于开发环境还是生产环境。有效值为 **dev** 和 **prod**。
+ `PartnerHost`： AS2 伙伴服务器的 IP 地址或主机名。
+ `PartnerPort`: AS2 伙伴服务器的端口号。如果未指定，则 HTTP 的默认值为 80，HTTPS 的默认值为 443。
+ `PartnerPath`: 伙伴服务器上 AS2 终端节点的路径
+ `ProtocolType`：用于 AS2 通信的协议：有效值为 **HTTP 和 HTT** **PS**。

### 有条件的资源
<a name="conditional-resources"></a>

为了支持 HTTPS，模板会有条件地创建：
+ 用于 CA 证书的 Lambda 层
+ Lambda 函数中特定于 HTTPS 的配置

## 部署和使用
<a name="deployment-and-usage"></a>

**使用 CloudFormation 模板自定义 AS2 HTTP 标头**

1. 在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。

1. 在左侧导航窗格中，选择**堆栈**。

1. 选择**创建堆栈**，然后选择**使用新资源（标准）**。

1. 在 “**先决条件-准备模板**” 部分，选择 **“选择现有模板**”。

1. 复制此链接，即[动态 HTTP 标头模板](https://s3.amazonaws.com/aws-transfer-resources/as2-templates/dynamic-http-headers.template.yml)，然后将其粘贴**到 Amazon S3 网址**字段中。

1. 选择**下一步**。

1. 在参数详细信息中填写您的信息。详情请参阅[模板参数](#as2-header-template-parameter-details)。

1. 选择**下一步**。在**配置堆栈选项**页面上，再次选择**下一步**。

1. 查看您正在创建的堆栈的详细信息，然后选择**创建堆栈**。
**注意**  
在页面底部的**能力**下，您必须确认这 CloudFormation 可能会创建 AWS Identity and Access Management (IAM) 资源。

部署此 CloudFormation 堆栈后：

1. 请注意堆栈输出中提供的 Amazon API Gateway 终端节点网址。

1. 更新您的现有 AWS Transfer Family 连接器以使用这个新的 Amazon API Gateway 终端节点。

1. 现在，该解决方案将处理 AS2 消息，根据配置添加或修改标头。

**警告**  
仅修改主题标题或添加合作伙伴明确期望的标题。更改其他标头可能会导致传输失败。