AWS CDK 的教程 AWS Cloud9 - AWS Cloud9

AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多

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

AWS CDK 的教程 AWS Cloud9

本教程向您展示如何在 AWS Cloud9 开发环境 AWS Cloud Development Kit (AWS CDK) 中使用。 AWS CDK 是一组软件工具和库,开发人员可以使用它们将 AWS 基础架构组件建模为代码。

AWS CDK 包括 AWS 构造库,您可以使用它来快速解决许多任务 AWS。例如,您可以使用 Fleet 构造将代码完全且安全地部署到一队主机。您可以创建自己的构造为架构的各种元素建模,与其他人共享这些构造或将其发布到社区。有关更多信息,请参阅 AWS Cloud Development Kit 开发人员指南

按照本教程操作并创建此示例可能会对您的 AWS 账户收费。其中包括亚马逊、亚马逊和亚马逊EC2SNS等服务可能产生的费用SQS。有关更多信息,请参阅亚马逊EC2定价亚马逊SNS定价亚马逊SQS定价

先决条件

在使用此示例之前,请确保您的设置满足以下要求:

  • 您必须拥有现有的 AWS Cloud9 EC2开发环境。此示例假设您的EC2环境已连接到运行 Amazon Linux 的亚马逊EC2实例,或者 Ubuntu 服务器。如果您有不同类型的环境或操作系统,可能需要按照本示例的说明来设置相关的工具。有关更多信息,请参阅 在中创建环境 AWS Cloud9

  • 您已经打开 AWS Cloud9 IDE了现有环境的。打开环境时,会在 IDE Web 浏览器中 AWS Cloud9 打开该环境的。有关更多信息,请参阅 在 AWS Cloud9 中打开环境

步骤 1:安装所需工具

在此步骤中,您将在您的环境中安装运行用 TypeScript 编程语言编写的示例 AWS CDK 所需的所有工具。

  1. 节点版本管理器(或 nvm),用于稍后安装 Node.js。

  2. Node.js,这是示例所必需的,包含 Node Package Manager npm,或者你用它来安装 TypeScript 和 AWS CDK 更高版本。

  3. TypeScript,这是本样本所要求的。( AWS CDK 还支持其他几种编程语言。)

  4. AWS CDK

步骤 1.1:安装节点版本管理器 (nvm)

  1. 在中的终端会话中 AWS Cloud9 IDE,确保安装了最新的安全更新和错误修复。要执行此操作,请运行 yum update(适用于 Amazon Linux)或 apt update 命令(适用于 Ubuntu Server)。(要开始新的终端会话,请在菜单栏上依次选择 Window(窗口)> New Terminal(新建终端)。)

    对于 Amazon Linux:

    sudo yum -y update

    对于 Ubuntu Server:

    sudo apt update
  2. 确认是否已安装 nvm。为此,请运行带 --version 选项的 nvm 命令。

    nvm --version

    如果成功,则输出包含 nvm 版本号,并且您可以向前跳至 步骤 1.2:安装 Node.js

  3. 下载并安装 nvm。要执行此操作,请运行安装脚本。在此示例中,安装了 v0.33.0,但您可以在此处检查 nvm 的最新版本。

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
  4. 开始使用 nvm。您可用关闭终端会话并重新启动,或者查找包含命令以加载 nvm~/.bashrc 文件。

    . ~/.bashrc

步骤 1.2:安装 Node.js

  1. 确认是否已安装 Node.js,如果已安装,请确认安装的版本为 16.17.0 或更高版本。此示例使用 Node.js 16.17.0 进行测试。要进行检查,在终端会话仍处于打开状态IDE的情况下,请运行带--version选项的node命令。

    node --version

    如果已安装 Node.js,则输出将包含版本号。如果该版本号是 v16.17.0,请向前跳至 步骤 1.3:安装 TypeScript

  2. 安装 Node.js 16,方法是运行带有 install 操作的 nvm 命令。

    注意

    你也可以运行nvm install node安装 Node.js 的长期支持 (LTS) 版本。 AWS Cloud9 支持跟踪 Node.js 的LTS版本。

    nvm install v16
  3. 开始使用 Node.js 16。为此,请运行 nvm 命令与 alias 操作、别名的版本号以及要用于该别名的版本,如下所示。

    nvm alias default 16
    注意

    上述命令将 Node.js 16 设置为 Node.js 的默认版本。或者,您可以运行带有 use 操作(如 nvm use 16.17.0 )而非 alias 操作的 nvm 命令。不过,use 操作会导致该版本的 Node.js 仅在当前终端会话运行时运行。

  4. 要确认您使用的是 Node.js 16,请再次运行 node --version 命令。如果已安装正确的版本,则输出将包含版本 v16。

步骤 1.3:安装 TypeScript

  1. 确认您是否已经 TypeScript 安装。为此,在终端会话仍处于打开状态的情况下IDE,使用--version选项运行命令行 TypeScript 编译器。

    tsc --version

    如果您已 TypeScript 安装,则输出将包含 TypeScript 版本号。如果 TypeScript 已安装,请直接跳至步骤 1.4:安装 AWS CDK

  2. 安装 TypeScript。为此,请运行带有install操作、-g选项和 TypeScript 软件包名称的npm命令。它 TypeScript 作为全局软件包安装在环境中。

    npm install -g typescript
  3. 确认 TypeScript 已安装。为此,请使用--version选项运行命令行 TypeScript 编译器。

    tsc --version

    如果 TypeScript 已安装,则输出将包含 TypeScript 版本号。

步骤 1.4:安装 AWS CDK

  1. 确认您是否已经 AWS CDK 安装了。为此,在终端会话仍处于打开状态IDE的情况下,运行带有--version选项的cdk命令。

    cdk --version

    如果安装了, AWS CDK 则输出将包含 AWS CDK 版本号和内部版本号。向前跳至 步骤 2:添加代码

  2. AWS CDK 通过运行npm命令以及install操作、要安装的 AWS CDK 软件包的名称以及在环境中全局安装软件包的-g选项来安装。

    npm install -g aws-cdk
  3. 确认已 AWS CDK 安装并正确引用。为此,请运行带 --version 选项的 cdk 命令。

    cdk --version

    如果成功,则会显示 AWS CDK 版本号和内部版本号。

步骤 2:添加代码

在此步骤中,您将创建一个示例 TypeScript 项目,其中包含 AWS CDK 以编程方式部署 AWS CloudFormation 堆栈所需的所有源代码。此堆栈在您的 AWS 账户中创建一个 Amazon SNS 主题和一个 Amazon SQS 队列,然后将队列订阅到该主题。

  1. 在终端会话仍处于打开IDE状态的情况下,创建一个用于存储项目源代码的目录,例如您的环境中的一个~/environment/hello-cdk目录。然后切换到该目录。

    rm -rf ~/environment/hello-cdk # Remove this directory if it already exists. mkdir ~/environment/hello-cdk # Create the directory. cd ~/environment/hello-cdk # Switch to the directory.
  2. 将该目录设置为的 TypeScript 语言项目 AWS CDK。为此,请运行带有 init 操作、 sample-app 模板和 --language 选项以及编程语言名称的 cdk 命令。

    cdk init sample-app --language typescript

    这将在该目录中创建以下文件和子目录。

    • 隐藏的 .git 子目录和隐藏的 .gitignore 文件,可使项目与 Git 等源控制工具兼容。

    • lib 子目录,其中包含 hello-cdk-stack.ts 文件。此文件包含您的 AWS CDK 堆栈的代码。此代码将在此过程的下一步骤中介绍。

    • bin 子目录,其中包含 hello-cdk.ts 文件。此文件包含您的 AWS CDK 应用程序的入口点。

    • node_modules 子目录,其中包含应用程序和堆栈可根据需要使用的支持代码包。

    • 隐藏的 .npmignore 文件,其中列出了 npm 生成代码时不需要的子目录和文件类型。

    • cdk.json 文件,其中包含使 cdk 命令运行更轻松的信息。

    • package-lock.json 文件,其中包含 npm 可用于减少可能的生成和运行错误的信息。

    • package.json 文件,其中包含使 npm 命令运行更轻松以及可能减少构建和运行错误的信息。

    • 一个README.md文件,其中列出了可以用来运行的有用命令npm和 AWS CDK.

    • tsconfig.json 文件,其中包含使 tsc 命令运行更轻松以及可能减少构建和运行错误的信息。

  3. Environment(环境)窗口中,打开 lib/hello-cdk-stack.ts 文件,并浏览该文件中的以下代码。

    import sns = require('@aws-cdk/aws-sns'); import sqs = require('@aws-cdk/aws-sqs'); import cdk = require('@aws-cdk/cdk'); export class HelloCdkStack extends cdk.Stack { constructor(parent: cdk.App, name: string, props?: cdk.StackProps) { super(parent, name, props); const queue = new sqs.Queue(this, 'HelloCdkQueue', { visibilityTimeoutSec: 300 }); const topic = new sns.Topic(this, 'HelloCdkTopic'); topic.subscribeQueue(queue); } }
    • Stack、、AppStackPropsQueue、和Topic类分别表示 AWS CloudFormation 堆栈及其属性、可执行程序、Amazon SQS 队列和亚马逊SNS主题。

    • HelloCdkStack类代表此应用程序的 AWS CloudFormation 堆栈。此堆栈包含此应用程序的新 Amazon SQS 队列和亚马逊SNS主题。

  4. Environment(环境)窗口中,打开 bin/hello-cdk.ts 文件,并浏览该文件中的以下代码。

    #!/usr/bin/env node import cdk = require('@aws-cdk/cdk'); import { HelloCdkStack } from '../lib/hello-cdk-stack'; const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack'); app.run();

    此代码从 HelloCdkStack 文件中加载、实例化然后运行 lib/hello-cdk-stack.ts 类。

  5. 用于npm运行编 TypeScript 译器以检查编码错误,然后启用 AWS CDK 以执行项目的bin/hello-cdk.js文件。为此,请从项目的根目录中运行带有 run 操作的 npm 命令,指定 package.json 文件中的 build 命令值,如下所示。

    npm run build

    前面的命令运行 TypeScript 编译器,编译器会添加支持bin/hello-cdk.d.tslib/hello-cdk-stack.d.ts文件。该编译器还可将 hello-cdk.tshello-cdk-stack.ts 文件转换为 hello-cdk.jshello-cdk-stack.js 文件。

步骤 3:运行代码

在此步骤中,您将指示根据bin/hello-cdk.js文件中的代码创建 AWS CloudFormation 堆栈模板。 AWS CDK 然后,您指示部署堆栈,该堆栈将创建 Amazon SNS 主题和 Amazon SQS 队列,然后为队列订阅该主题。 AWS CDK 然后,通过从主题向队列发送消息,确认已成功部署主题和队列。

  1. AWS CDK 创建 AWS CloudFormation 堆栈模板。为此,在终端会话仍处于打开状态的情况下IDE,从项目的根目录中运行带有synth操作和堆栈名称的cdk命令。

    cdk synth HelloCdkStack

    如果成功,输出将显示 AWS CloudFormation 堆栈模板的Resources部分。

  2. 首次在特定 AWS 账户和 AWS 区域组合的环境中部署 AWS CDK 应用程序时,必须安装引导堆栈。该堆栈包含完成各种操作 AWS CDK 所需的各种资源。例如,此堆栈包含一个 Amazon S3 存储桶, AWS CDK 用于在其部署过程中存储模板和资产。要安装引导堆栈,请运行带有 bootstrap 操作的 cdk 命令。

    cdk bootstrap
    注意

    如果您在cdk bootstrap未指定任何选项的情况下运行,则使用默认 AWS 账户和 AWS 区域。您还可以通过指定配置文件和账户/区域组合来引导特定环境。例如:

    cdk bootstrap --profile test 123456789012/us-east-1
  3. 让 AWS CDK 运行 AWS CloudFormation 堆栈模板来部署堆栈。为此,从项目的根目录,运行带有 deploy 操作和堆栈名称的 cdk 命令。

    cdk deploy HelloCdkStack

    如果成功,则输出将显示 HelloCdkStack 堆栈已部署且没有错误。

    注意

    如果输出显示一条消息,说明堆栈未定义环境,且无法从标准位置获取 AWS 凭据或未配置区域,请确保在中正确设置了您的 AWS 凭据IDE,然后再次运行该cdk deploy命令。有关更多信息,请参阅 AWS 服务 从中的环境中呼叫 AWS Cloud9

  4. 要确认 Amazon SNS 主题和 Amazon SQS 队列已成功部署,请向该主题发送消息,然后检查队列中是否有收到的消息。为此,您可以使用诸如 AWS Command Line Interface (AWS CLI) 或之类的工具 AWS CloudShell。有关这些工具的更多信息,请参阅 AWS CLI 还有 aws-shell 教程 AWS Cloud9

    例如,要在终端会话仍处于打开状态的情况下 AWS CLI 向主题发送消息IDE,请使用运行 Amazon SNS publish命令,提供消息的主题和正文、主题的 AWS 区域以及主题的 Amazon 资源名称 (ARN)。

    aws sns publish --subject "Hello from the AWS CDK" --message "This is a message from the AWS CDK." --topic-arn arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K

    在前面的命令中,arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K替换为ARN AWS CloudFormation 分配给该主题的。要获取 ID,您可以运行 Amazon SNS list-topics命令。

    aws sns list-topics --output table --query 'Topics[*].TopicArn'

    如果成功,则 publish 命令的输出将显示所发布消息的 MessageId 值。

    要检查队列中是否有收到的消息,请运行 Amazon SQS receive-message命令,提供队列的URL。

    aws sqs receive-message --queue-url https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K

    在前面的命令中,https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K替换ARN为 AWS CloudFormation 分配给队列的。要获取URL,你可以运行 Amazon SQS list-queues命令。

    aws sqs list-queues --output table --query 'QueueUrls[*]'

    如果成功,则 receive-message 命令的输出将显示收到的消息的相关信息。

步骤 4:清除

为防止在您使用完此示例后继续向您的 AWS 账户收费,您应该删除 AWS CloudFormation 堆栈。这将删除亚马逊SNS主题和亚马逊SQS队列。您还应该删除环境。

步骤 4.1:删除堆栈

在终端会话仍处于打开状态的情况下IDE,从项目的根目录中运行带有destroy操作和堆栈名称的cdk命令。

cdk destroy HelloCdkStack

当系统提示删除堆栈时,请键入 y,然后按 Enter 键。

如果成功,则输出将显示 HelloCdkStack 堆栈已删除且没有错误。

步骤 4.2:删除环境

要删除环境,请参阅 在 AWS Cloud9 中删除环境