在 AWS Elastic Beanstalk 上部署 Web 应用程序
入门指南
模块 3:部署 Web 应用程序
在本模块中,我们将应用程序部署到云中。
简介
在本模块中,您将学习打包 NodeJS 应用程序以进行部署。您还将学习如何使用 AWS CDK 预置在模块 2 中创建的所有 AWS Elastic beanstalk 资源。
您将学到的内容
- 打包 NodeJS 应用程序
- 构建和部署 CDK 应用程序
- 更新 NodeJS 应用程序部署
完成时间
10 分钟
模块先决条件
- 具有管理员级访问权限的 AWS 账户**
- 推荐的浏览器:最新版 Chrome 或 Firefox
[**] 过去 24 小时内创建的账户可能尚不具有访问此教程所需服务的权限。
实施
打包 NodeJS 应用程序
在模块 2 中,您了解到我们将使用 AWS CDK 的 S3 Asset 模块将 zip 文件中的应用程序上传到 S3。
为此,您需要为 NodeJS 应用程序创建一个 zip 文件,并将其放置在 AWS CDK 应用程序的根目录中。 将此 zip 文件命名为“app.zip”。为此,运行以下命令:
zip -r ../app.zip ./*

在您的账户中引导启动 CDK
如果这是您第一次在此账户和此区域中使用 AWS CDK,则需要对其进行引导启动。将 AWS CDK 应用程序部署到 AWS 账户和区域时,CDK 需要预置执行部署所需的资源。这些资源包括用于存储部署文件的 Amazon S3 存储桶,以及授予执行部署所需权限的 IAM 角色。预置这些初始资源称为引导启动。
对于引导启动您的 AWS 账户和区域,请运行
cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1
这应该如下所示:
cdk bootstrap aws://123456789012/us-east-1
您可以从 AWS 管理控制台获取账号,并从此列表中获取区域名称。
构建和部署 CDK 应用程序
打包 NodeJS 应用程序并将其放置在 CDK 应用程序目录的根目录中,然后引导启动您的 AWS 账户和区域,之后就可以构建和部署 CDK 应用程序。
第一步是构建 CDK 应用程序。
node run build
如果您的应用程序中没有错误,这将成功构建,现在您可以在云中部署 CDK 应用程序。
cdk deploy
它首先会要求您确认是否要对账户安全级别进行一些更改,这是因为我们创建了一个新角色。

以“y”作为回应,然后部署将开始。完成部署需要几分钟时间。完成后,您将收到此部署自动创建的 CloudFormation 堆栈的 ARN (Amazon资源名称) 消息。
如果您打开 CloudFormation 管理控制台,就会看到其中有 2 个新堆栈。

名为 CdkEbInfraStack 的堆栈包含我们在上一个模块中创建的所有 Elastic Beanstalk 资源:Elastic Beanstalk 应用程序、应用程序版本、实例配置文件和环境。
另一个堆栈 (带有随机字符串) 由 Elastic Beanstalk 创建,它包含 Elastic Beanstalk 应用程序运行所需的所有资源 - Auto Scaling 组、实例、Amazon CloudWatch 警报和指标、负载均衡器和安全组。
在云中查看应用程序
如果想查看部署在云中的应用程序,您需要做的第一件事就是找到此 Web 应用程序的 URL。查找此 URL 的方式是转到 AWS 控制台中的 Elastic Beanstalk 服务并找到名为 MyWebAppEnvironment 的环境。

在该环境中将看到此 URL。单击此 URL,Web 应用程序应启动。
更新 NodeJS 应用程序部署
如果您想要对 Web 应用程序进行更改,并且想将其重新部署到云中,则可以按照以下步骤操作:
- 在 Web 应用程序中执行更改
- 将其打包到 app.zip 文件中
- 将 app.zip 文件放在 CDK 应用程序的根目录中
- 构建 CDK 项目 - npm run build
- 部署 CDK 项目 - cdk deploy
现在,您可以验证是否部署了新版本的 Elastic Beanstalk 应用程序。如果您访问 Web 应用程序 URL,则将部署新版本 - 这需要一些时间,请留意控制台以查看部署何时完成。

常见错误
压缩应用程序
如果您在将 NodeJS 应用程序上传到 Elastic Beanstalk 时收到此错误。
Failed to find package.json. Node.js may have issues starting. Verify package.json is valid or place code in a file named server.js or app.js.
问题可能出在打包应用程序的方式。删除 package-lock.json 和 node_modules 目录并在 Web 应用程序目录中运行此命令。
zip -r app.zip .
这将为 Elastic Beanstalk 正确压缩文件。
打包应用程序时的节点模块
您可以将 node_modules 目录与所有下载的依赖项打包到 Web 应用程序的 zip 文件中。
拥有此目录时,Elastic Beanstalk 会假定不需要下载任何依赖项。
详细阅读有关在 Elastic Beanstalk 程序包中处理 NodeJS 依赖项的说明。