使用 AWS App Runner 部署 Web 应用程序

教程

模块 1:准备部署

在本模块中,您将使用 AWS CDK 和 AWS App Runner 部署 Web 应用程序

概述

在本模块中,您将创建一个 CDK 应用程序,该应用程序将为 AWS App Runner 创建所有必要的基础设施,并将一个示例容器部署到其中。

要完成的目标

在本模块中,您将:

  • 创建一个简单的 CDK 应用程序
  • 定义 IAM 策略和角色,允许对其他服务的访问
  • 使用 App Runner 部署容器

 完成时间

15 分钟

 模块学习前期准备

  • 具有管理员级别访问权限的 AWS 账户*
  • 推荐浏览器:推荐浏览器:最新版本的 Chrome 或 Firefox

*在过去 24 小时内新创建的账户可能无法使用本教程所需的服务。

操作步骤

创建 CDK 应用程序

首先,请确保您已经下载并解压了此指南引用的示例代码(请将 <EXAMPLE_CODE_URL>替换为示例代码所用的 URL,将 <DOWNLOADED_FILE_NAME> 替换为相应的文件名):

wget <EXAMPLE_CODE_URL>
unzip <DOWNLOADED_FILE_NAME>
cd getting-started-containers-app-runner-main

首先,确保安装了 CDK。如果尚未安装,请按照 AWS CDK 入门指南进行操作。

cdk --version

现在,我们将使用所选语言 TypeScript 来创建框架 CDK 应用程序:

mkdir infra
cd infra
cdk init app --language typescript

这将输出如下内容:

Applying project template app for typescript
# Welcome to your CDK TypeScript project!

This is a blank project for TypeScript development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

## Useful commands

* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `cdk deploy` deploy this stack to your default AWS account/region
* `cdk diff` compare deployed stack with current state
* `cdk synth` emits the synthesized CloudFormation template

Executing npm install...
✅ All done!

为资源堆栈创建代码

打开文件 lib/infra-stack.ts。将在该文件中为要创建的资源堆栈编写代码。资源堆栈是一组云基础设施资源(在本例中,也就是 AWS 资源),这些资源将预配到特定的账户。可以在堆栈中配置用来预配这些资源的账户和区域 — 我们将在稍后介绍。

在此资源堆栈中,您将创建以下资源:

  • App Runner 服务:这将是您的容器的运行方式。
  • 输出:这将显示您服务的 URL 地址。

部署容器服务

要部署您的服务,您首先需要导入正确的模块(请在下面的代码片段中将 <CDK_VERSION> 替换为您先前获取的 CDK 版本):

npm i @aws-cdk/aws-apprunner-alpha@<CDK_VERSION>-alpha.0

然后,您需要编辑 lib/infra-stack.ts 文件,在文件顶部添加依赖项:

import apprunner = require('@aws-cdk/aws-apprunner-alpha'); // Allows working with App Runner resources
import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets'; // Allows building the docker image and uploading to ECR
import * as path from "path"; // Helper for working with file paths

这些部分提供了对部署 Web 应用程序所需的所有组件的访问权限。

接下来,您需要创建一个 App Runner 服务来定义要使用的容器。在本入门教程中,我们将使用示例应用程序中提供的容器镜像,它位于 SampleApp。我们要让 CDK 来管理容器的构建、上传和部署。我们还将创建一个空的 IAM 角色,在将来的教程中,我们可以将其附加到服务上。要创建任务定义和 IAM 角色,请添加以下代码:

   // The code that defines your stack goes here
    
    //If you are running on a Mac using the new M1 chip, please change `../SampleApp` to `../../SampleApp`.
    const imageAsset = new DockerImageAsset(this, 'ImageAssets', {
      directory: path.join(__dirname, '../SampleApp'),
    });

    const service = new apprunner.Service(this, 'Service', {
      source: apprunner.Source.fromAsset({
        imageConfiguration: { port: 80 },
        asset: imageAsset
      })
    });

    new cdk.CfnOutput(this, "apprunner-url", {
      exportName: "apprunner-url",
      value: service.serviceUrl,
      description: "URL to access service"
    });

在上面的代码中,您使用 App Runner 创建了一个服务,它会运行一个由 CDK 从 SampleApp 目录中的 Dockerfile 构建的容器。在使用 CDK 之前,需要先将其引导,这将为 CDK 创建所需的基础设施,以管理您账户中的基础设施。

cdk bootstrap

您应该会看到类似以下内容的输出:

⏳ Bootstrapping environment aws://0123456789012/<region>... 
✅ Environment aws://0123456789012/<region> bootstrapped

引导完成后将运行 CDK 以部署容器、集群和所需的所有其他基础设施。

cdk deploy

您应该会看到类似以下内容的输出:

Output of CDK deploy command

CDK 将在创建基础设施之前显示提示,因为要创建的基础设施会更改安全配置,在本例中,将创建 IAM 角色和安全组。按 键,再按 Enter(回车)键即可部署。CDK 现在将设置您定义的所有基础设施。此过程需要几分钟才能完成。运行时,您将看到如下更新:

Status update of infrastructure being created by CDK

完成后,您将看到如下输出,其中包含指向公共 URL 的链接,以便访问您的服务:

Output showing link to the public URL to access your service

结果

在本模块中,我们学习了如何使用 AWS App Runner 和 AWS CDK 在 AWS 上部署容器。关闭本指南之前,我们建议您在对刚创建的基础设施完成测试并将其终止。在下一个模块中,我们将学习如何清除本指南中使用的资源。

下一项:清除资源

此页内容对您是否有帮助?