

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

# 使用 AWS Fargate PrivateLink、AWS 和网络负载均衡器在 Amazon ECS 上私下访问容器应用程序
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar，Amazon Web Services*

## Summary
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

此模式描述了如何使用带有 AWS Fargate 启动类型的亚马逊弹性容器服务 (Amazon ECS)，在网络负载均衡器后面，在亚马逊网络服务 (AWS) 云上私下托管 Docker 容器应用程序，并使用 AWS 访问该应用程序。 PrivateLinkAmazon Relational Database Service (Amazon RDS) 为在具有高可用性 (HA) 的 Amazon ECS 上运行的应用程序关系数据库提供托管。如果应用程序需要持久性存储，则您可以使用 Amazon Elastic File System (Amazon EFS)。

此模式对运行 Docker 应用程序的 Amazon ECS 服务使用 [Fargate 启动类型](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html)，并在前端使用网络负载均衡器。然后可以将其与虚拟私有云 (VPC) 终端节点关联，以便通过 AWS 进行访问 PrivateLink。然后，可以使用 VPC 终端节点与其他 VPCs 人共享此 VPC 终端节点服务。

您可以将 Fargate 与 Amazon ECS 配合使用来运行容器，而无需管理服务器或亚马逊弹性计算云 (Amazon EC2) 实例的集群。你也可以使用 Amazon A EC2 uto Scaling 群组来代替 Fargate。有关更多信息，请参阅[使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon ECS 上私下访问容器应用程序](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card)。

## 先决条件和限制
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 已在 Linux、macOS 或 Windows 上安装并配置 [AWS 命令行界面（AWS CLI）版本 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Docker](https://www.docker.com/)，已在 Linux、macOS 或 Windows 上安装并配置
+ 在 Docker 上运行的应用程序

## 架构
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[PrivateLink 用于访问带有 AWS Fargate 启动类型的亚马逊 ECS 上的容器应用程序。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**技术堆栈**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry(Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ 应用程序负载均衡器
+ Network Load Balancer
+ VPC

**自动化和扩展**
+ 您可以使用 [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 通过使用[基础设施即代码 CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)来创建此模式。

## 工具
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**AWS 服务**
+ [Amazon Elastic Container Registry（Amazon ECR）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)是一项安全、可靠且可扩展的 AWS 托管容器映像注册表服务。
+ [Amazon Elastic Container Service（Amazon ECS）](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)是一项高度可扩展的快速容器管理服务，可帮助轻松运行、停止和管理集群上的容器。
+ [Amazon Elastic File System（Amazon EFS）](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)可提供简单、可扩展、完全托管的弹性 NFS 文件系统，以便与 AWS 云服务和本地资源配合使用。
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)是一种可以与 Amazon ECS 配合使用的技术，无需管理服务器或亚马逊 EC2 实例集群即可运行容器。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/rds/index.html)是一项 Web 服务，让用户能够在 AWS 云云中更轻松地设置、操作和扩展关系数据库。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一种面向互联网的存储服务。该服务旨在降低开发人员进行网络规模级计算的难度。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) 可帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 进行的 API 调用，以便以编程方式检索此密钥。
+ [Amazon Virtual Private Cloud（Amazon VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。
+ El@@ [astic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 将传入的应用程序或网络流量分发到多个可用区域中的多个目标，例如 EC2 实例、容器和 IP 地址。

**其他工具**
+ [Docker](https://www.docker.com/) 帮助开发人员轻松地将任何应用程序作为轻量级、便携且自给自足的容器打包、运输和运行。

## 操作说明
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### 创建联网组件
<a name="create-networking-components"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 创建负载均衡器
<a name="create-the-load-balancers"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建网络负载均衡器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)要获取有关此操作和其他操作的帮助，请参阅*相关资源*部分。 | 云管理员 | 
| 创建应用程序负载均衡器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 创建 Amazon EFS 文件系统
<a name="create-an-amazon-efs-file-system"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon EFS 文件系统。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 
| 子网的挂载目标。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 
| 验证子网是否已挂载为目标。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 创建 S3 存储桶
<a name="create-an-s3-bucket"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 打开 Amazon S3 控制台并[创建一个 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)，以在需要时存储应用程序的静态资产。 | 云管理员 | 

### 创建 Secrets Manager 密钥
<a name="create-a-secrets-manager-secret"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  创建 AWS KMS 密钥以加密 Secrets Manager 密钥。 | 打开 AWS Key Management Service (AWS KMS)控制台并创建 KMS 密钥。 | 云管理员 | 
|  创建 Secrets Manager 密钥以存储 Amazon RDS 密码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 创建 Amazon RDS 实例
<a name="create-an-amazon-rds-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据库子网组。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 
| 创建 Amazon RDS 实例。 | 在私有子网中创建和配置 Amazon RDS 实例。确保已启用**多可用区**以实现高可用性 (HA)。 | 云管理员 | 
| 将数据载入 Amazon RDS 实例。 | 将应用程序所需关系数据加载到 Amazon RDS 实例中。此流程将根据应用程序的需求以及数据库架构的定义和设计方式而有所不同。 | 数据库管理员 | 

### 创建 Amazon ECS 组件
<a name="create-the-amazon-ecs-components"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 ECS 集群。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 
| 创建 Docker 映像 | 按照 [AWS 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)中的说明创建 Docker 映像。 | 云管理员 | 
| 创建 Amazon ECR 存储库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员、 DevOps 工程师 | 
| 推送 Docker 映像至 Amazon ECR 存储库  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 
| 创建 Amazon ECS 任务定义。 | 需要任务定义才能在 Amazon ECS 中运行 Docker 容器。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)有关设置任务定义的帮助，请参阅*相关资源*部分中的“创建任务定义”。请务必提供您推送至 Amazon ECR 的 Docker 映像。 | 云管理员 | 
| 创建 ECS 服务，然后选择 Fargate 作为启动类型。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 设置 AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS 终 PrivateLink 端节点。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | 云管理员 | 

### 创建 VPC 端点
<a name="create-a-vpc-endpoint"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 VPC 端点。 | 为您之前@@ [创建的 AWS 终端 PrivateLink 节点创建 VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) 终端节点。VPC 终端节点完全限定域名 (FQDN) 将指向 AWS PrivateLink 终端节点 FQDN。这会为 VPC 端点服务创建一个可供域名服务端点访问的弹性网络接口。 | 云管理员 | 

### 设置目标
<a name="set-the-target"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 添加应用程序负载均衡器作为目标。 | 要添加应用程序负载均衡器作为网络负载均衡器的目标，请遵循 [AWS 文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html)中的说明进行操作。 | 应用程序开发人员 | 

## 相关资源
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**创建负载均衡器：**
+ [为 Amazon ECS 使用网络负载均衡器](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [创建网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [为 Amazon ECS 使用应用程序负载均衡器](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [创建应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**创建 Amazon EFS 文件系统：**
+ [创建 Amazon EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [在 Amazon EFS 中创建挂载目标](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**创建 Secrets Manager 密钥：**
+ [在 AWS KMS 中创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [在 AWS Secrets Manager 中创建密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**创建 Amazon RDS 实例：**
+ [创建 Amazon RDS 数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**创建 Amazon ECS 组件**
+ [创建 Amazon ECR 存储库 ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [使用 Amazon ECR 存储库对 Docker 进行身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [将映像推送至 Amazon ECR 存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [创建 Amazon ECS 任务定义](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [创建 Amazon ECS 服务](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**其他资源：**
+ [通过 AWS 安全访问服务 PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)