发布于 2026-01-06 3 阅读
0

使用 RDS、ECS 和 Docker 的 CRUD API Express 参加 Mux 举办的全球开发者展示挑战赛:展示你的项目!

使用 RDS、ECS 和 Docker 构建 CRUD API Express

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

视频版

您更喜欢视频版本吗?
Youtube 视频

在本文中,我们将了解如何将基于 ECR 镜像的 ECS 实例连接到 RDS Postgres 实例。

先决条件

  • 您的机器上已安装 Docker
  • AWS账户

定义

  • RDS:关系数据库服务。AWS 提供的用于关系数据库(例如 Postgres)的服务。(有关 RDS 和 Postgres 的更多信息,请参阅我之前的文章。)

  • ECR :Elastic Container Registry。直接在 AWS 上存储 Docker 镜像(本质上是Docker Hub的替代方案)。

  • ECS:弹性容器服务。部署并运行基于存储在注册表中的镜像的应用程序(它同时支持 Docker Hub 和 ECR)。

我们今天的行动

  • 创建 RDS Postgres 实例
  • 测试实例
  • 使用 AWS 命令​​行界面创建 ECR 存储库
  • 克隆存储库
  • 创建 Docker 镜像
  • 根据 ECR 存储库的要求对图像进行相应标记
  • 将图像推送到 ECR
  • 基于 ECR 存储库创建 ECS,并设置环境变量
  • 期末测试

创建 RDS Postgres 实例

打开 AWS 控制台,搜索 RDS:

image.png

然后点击“创建数据库”

image.png

让我们创建一个 PostgreSQL 实例。我们将使用 12.5-R1 版本,以便利用 AWS 的免费套餐:

image.png

“设置”中,输入以下值:

  • 数据库实例标识符(名称)
  • 主用户
  • 主密码 + 确认密码(选择一个足够安全的密码)

image.png

为确保连接性,您必须保证实例可以从外部访问。在“公共访问”下,选择“是”。如果遇到网络问题,请检查安全组的入站规则。

image.png

完成后,点击“创建数据库”

image.png

以下是我们RDS Postgres实例的评测:

image.png

测试实例

要测试 RDS 实例是否可访问,我们可以使用psql命令。您也可以使用其他类似命令行的工具pgadmin或本地应用程序进行测试。

在以下命令中,将替换RDS_INSTANCE_IP为您从 RDS 实例摘要中获取的命令:

psql --host RDS_INSTANCE_IP --port 5432 --username postgres
Enter fullscreen mode Exit fullscreen mode

使用命令行界面创建 ECR 存储库

ECR 代表 Elastic Container Registry,它是 AWS 的镜像仓库。您可以把它想象成一个存储和检索 Docker 镜像的地方。

在 AWS 控制台中,ECR在搜索栏中输入并点击Elastic Container Registry

image.png

用户界面如下所示:

image.png

这是检查现有代码库的好方法。但要创建一个代码库,我们将使用命令行界面。

使用以下命令获取您的凭据:

aws sts get-caller-identity
Enter fullscreen mode Exit fullscreen mode

然后使用您首选的凭证和区域。将 `<region>` 替换为您选择的区域,并将 `<account_id>` 替换为您的 AWS 账户 ID(您可以使用命令获取)。

aws ecr get-login-password --region <REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com
Enter fullscreen mode Exit fullscreen mode

让我们通过检查 AWS 控制台来确认存储库是否已创建:

image.png

太好了!现在我们来克隆并修改代码库。

克隆仓库

image.png

克隆 aws-express-template 仓库:

git clone https://github.com/tinystacks/aws-docker-templates-express.git
Enter fullscreen mode Exit fullscreen mode

现在,在命令行中使用 CD 命令进入该目录:

cd aws-docker-templates-express
Enter fullscreen mode Exit fullscreen mode

然后使用您喜欢的 IDE 打开项目。如果您使用的是 Visual Studio Code,则可以输入:

code .
Enter fullscreen mode Exit fullscreen mode

检查应用程序并创建 Docker 镜像

如果您想在本地测试该项目,可以安装依赖项(可选 - 需要本地安装 npm):

npm i
Enter fullscreen mode Exit fullscreen mode

项目建设:

npm run build
Enter fullscreen mode Exit fullscreen mode
npm run start
Enter fullscreen mode Exit fullscreen mode

在构建镜像之前,让我们检查一下 config 文件夹中名为postgres.ts.

您可以在这里定义一些环境变量来访问您的数据库:

  • PG_HOST数据库地址。稍后我们将在此处使用 RDS 实例地址。
  • PG_PORT数据库端口。Postgres 的默认端口是 5432。
  • PG_USER数据库的默认用户
  • PG_PASSWORD数据库用户的密码。
  • PG_DATABASE我们要访问的数据库。请注意,名为 `<database_name>` 的数据库postgres是 Postgres 实例的默认数据库。

image.png

要使用 Docker 构建镜像,请使用以下命令:

docker build -t crud-express .
Enter fullscreen mode Exit fullscreen mode

这里名称并不重要,因为我们将重新标记本地镜像,以便将其推送到我们即将创建的 ECR 存储库。

将图像标记到 ECR 存储库

要为本地镜像添加标签以便将其推送到 ECR 存储库,您需要复制镜像 URI。例如,您可以从 Amazon 控制台的 ECR 存储库列表中复制它:

image.png

docker tag crud-express <AWS_ECR_REPO_URI>  
Enter fullscreen mode Exit fullscreen mode

将图像推送至 ECR

只需使用与之前相同的标签,将本地标记的图像推送到您的 ECR 存储库即可:

docker push  <AWS_ECR_REPO_URI>  
Enter fullscreen mode Exit fullscreen mode

之后,请等待几分钟,直到推送完成。

image.png

从 ECR 存储库映像创建 ECS 任务

现在到了有趣的部分。因为我们两者兼备:

  • 具有公共访问权限的 RDS Postgres 实例
  • ECR注册表上的图像

  • 我们可以根据 ECR 镜像创建一个 ECS 实例,并通过将变量提供PG_HOST给我们的应用程序,使用 RDS 实例的 URI 将其连接到 RDS 实例。

在 AWS 控制台中,查找 ECS:

image.png

让我们使用控制台来配置自定义容器:

image.png

选择一个你喜欢的容器名称。使用 ECR URI 作为你的 Docker 镜像:

image.png

将端口设置为 80:

image.png

现在有一个非常重要的步骤——按如下方式设置环境变量:

  • 钥匙 :PG_HOST
  • 值:您的 RDS URI,以便 ECS 应用可以连接到 RDS 实例。

image.png

接下来,点击“更新”

image.png

任务定义页面,您可以直接点击“下一步”:

image.png

“定义您的服务”页面,单击“下一步”

image.png

对于集群,您可以为集群选择一个名称,然后单击“下一步”

image.png

然后您只需等待几分钟,让 AWS 创建您的资源:

image.png

完成后,点击该任务:

image.png

向下滚动并复制公网 IP 地址,以便我们可以使用我们最喜欢的 API 测试工具:

image.png

期末测试

为了测试我们的应用程序,我们将使用 Postman。首先,让我们检查一下应用程序是否已启动并运行。向以下端点发送一个 GET 请求AWS_APP_IP:80/ping

image.png

现在我们来向数据库插入几条数据。向以下端点发送一个 PUT 请求,请求体(标题和内容)如下AWS_APP_IP:80/postgresql-item

image.png

我们再做一个:

image.png

现在,要获取所有项目,请向以下端点发出 GET 请求AWS_APP_IP:80/postgresql-item

image.png

要获取单个项目,请在 URL 末尾附加项目的 ID,发出相同的请求
(请注意,我们在这里没有正确处理错误 - 这只是为了演示目的):

image.png

要更新现有项目,您可以向端点发送 POST 请求AWS_APP_IP:80/posgresql-item/1,指定 id 并传递消息正文:

image.png

我们来检查一下这些值是否已更新:

image.png

您还可以删除现有项目,方法是向端点发出 DELETE 请求AWS_APP_IP:80/postgresql-item/ID(例如 2):
image.png

至此,我们已成功验证了将 ECS 任务连接到 Amazon RDS 数据库!

视频版

您更喜欢视频版本吗?
Youtube 视频

文章来源:https://dev.to/tinystacks/crud-api-express-with-rds-ecs-and-docker-46fg