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定价
先决条件
在使用此示例之前,请确保您的设置满足以下要求:
-
您必须拥有现有的 AWS Cloud9 EC2开发环境。此示例假设您的EC2环境已连接到运行 Amazon Linux 的亚马逊EC2实例,或者 Ubuntu 服务器。如果您有不同类型的环境或操作系统,可能需要按照本示例的说明来设置相关的工具。有关更多信息,请参阅 在中创建环境 AWS Cloud9。
-
您已经打开 AWS Cloud9 IDE了现有环境的。打开环境时,会在 IDE Web 浏览器中 AWS Cloud9 打开该环境的。有关更多信息,请参阅 在 AWS Cloud9 中打开环境。
步骤 1:安装所需工具
在此步骤中,您将在您的环境中安装运行用 TypeScript 编程语言编写的示例 AWS CDK 所需的所有工具。
-
节点版本管理器(或
nvm
),用于稍后安装 Node.js。 -
Node.js,这是示例所必需的,包含 Node Package Manager
npm
,或者你用它来安装 TypeScript 和 AWS CDK 更高版本。 -
TypeScript,这是本样本所要求的。( AWS CDK 还支持其他几种编程语言。)
-
的AWS CDK。
步骤 1.1:安装节点版本管理器 (nvm)
-
在中的终端会话中 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
-
确认是否已安装
nvm
。为此,请运行带--version
选项的nvm
命令。nvm --version
如果成功,则输出包含
nvm
版本号,并且您可以向前跳至 步骤 1.2:安装 Node.js。 -
下载并安装
nvm
。要执行此操作,请运行安装脚本。在此示例中,安装了 v0.33.0,但您可以在此处检查 nvm
的最新版本。curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
-
开始使用
nvm
。您可用关闭终端会话并重新启动,或者查找包含命令以加载nvm
的~/.bashrc
文件。. ~/.bashrc
步骤 1.2:安装 Node.js
-
确认是否已安装 Node.js,如果已安装,请确认安装的版本为 16.17.0 或更高版本。此示例使用 Node.js 16.17.0 进行测试。要进行检查,在终端会话仍处于打开状态IDE的情况下,请运行带
--version
选项的node
命令。node --version
如果已安装 Node.js,则输出将包含版本号。如果该版本号是 v16.17.0,请向前跳至 步骤 1.3:安装 TypeScript。
-
安装 Node.js 16,方法是运行带有
install
操作的nvm
命令。注意
你也可以运行
nvm install node
安装 Node.js 的长期支持 (LTS) 版本。 AWS Cloud9 支持跟踪 Node.js 的LTS版本。nvm install v16
-
开始使用 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 仅在当前终端会话运行时运行。 -
要确认您使用的是 Node.js 16,请再次运行
node --version
命令。如果已安装正确的版本,则输出将包含版本 v16。
步骤 1.3:安装 TypeScript
-
确认您是否已经 TypeScript 安装。为此,在终端会话仍处于打开状态的情况下IDE,使用
--version
选项运行命令行 TypeScript 编译器。tsc --version
如果您已 TypeScript 安装,则输出将包含 TypeScript 版本号。如果 TypeScript 已安装,请直接跳至步骤 1.4:安装 AWS CDK。
-
安装 TypeScript。为此,请运行带有
install
操作、-g
选项和 TypeScript 软件包名称的npm
命令。它 TypeScript 作为全局软件包安装在环境中。npm install -g typescript
-
确认 TypeScript 已安装。为此,请使用
--version
选项运行命令行 TypeScript 编译器。tsc --version
如果 TypeScript 已安装,则输出将包含 TypeScript 版本号。
步骤 1.4:安装 AWS CDK
-
确认您是否已经 AWS CDK 安装了。为此,在终端会话仍处于打开状态IDE的情况下,运行带有
--version
选项的cdk
命令。cdk --version
如果安装了, AWS CDK 则输出将包含 AWS CDK 版本号和内部版本号。向前跳至 步骤 2:添加代码。
-
AWS CDK 通过运行
npm
命令以及install
操作、要安装的 AWS CDK 软件包的名称以及在环境中全局安装软件包的-g
选项来安装。npm install -g aws-cdk
-
确认已 AWS CDK 安装并正确引用。为此,请运行带
--version
选项的cdk
命令。cdk --version
如果成功,则会显示 AWS CDK 版本号和内部版本号。
步骤 2:添加代码
在此步骤中,您将创建一个示例 TypeScript 项目,其中包含 AWS CDK 以编程方式部署 AWS CloudFormation 堆栈所需的所有源代码。此堆栈在您的 AWS 账户中创建一个 Amazon SNS 主题和一个 Amazon SQS 队列,然后将队列订阅到该主题。
-
在终端会话仍处于打开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.
-
将该目录设置为的 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
命令运行更轻松以及可能减少构建和运行错误的信息。
-
-
在 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
、、App
StackProps
Queue
、和Topic
类分别表示 AWS CloudFormation 堆栈及其属性、可执行程序、Amazon SQS 队列和亚马逊SNS主题。 -
该
HelloCdkStack
类代表此应用程序的 AWS CloudFormation 堆栈。此堆栈包含此应用程序的新 Amazon SQS 队列和亚马逊SNS主题。
-
-
在 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
类。 -
用于
npm
运行编 TypeScript 译器以检查编码错误,然后启用 AWS CDK 以执行项目的bin/hello-cdk.js
文件。为此,请从项目的根目录中运行带有run
操作的npm
命令,指定package.json
文件中的build
命令值,如下所示。npm run build
前面的命令运行 TypeScript 编译器,编译器会添加支持
bin/hello-cdk.d.ts
和lib/hello-cdk-stack.d.ts
文件。该编译器还可将hello-cdk.ts
和hello-cdk-stack.ts
文件转换为hello-cdk.js
和hello-cdk-stack.js
文件。
步骤 3:运行代码
在此步骤中,您将指示根据bin/hello-cdk.js
文件中的代码创建 AWS CloudFormation 堆栈模板。 AWS CDK 然后,您指示部署堆栈,该堆栈将创建 Amazon SNS 主题和 Amazon SQS 队列,然后为队列订阅该主题。 AWS CDK 然后,通过从主题向队列发送消息,确认已成功部署主题和队列。
-
AWS CDK 创建 AWS CloudFormation 堆栈模板。为此,在终端会话仍处于打开状态的情况下IDE,从项目的根目录中运行带有
synth
操作和堆栈名称的cdk
命令。cdk synth HelloCdkStack
如果成功,输出将显示 AWS CloudFormation 堆栈模板的
Resources
部分。 -
首次在特定 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
-
让 AWS CDK 运行 AWS CloudFormation 堆栈模板来部署堆栈。为此,从项目的根目录,运行带有
deploy
操作和堆栈名称的cdk
命令。cdk deploy HelloCdkStack
如果成功,则输出将显示
HelloCdkStack
堆栈已部署且没有错误。注意
如果输出显示一条消息,说明堆栈未定义环境,且无法从标准位置获取 AWS 凭据或未配置区域,请确保在中正确设置了您的 AWS 凭据IDE,然后再次运行该
cdk deploy
命令。有关更多信息,请参阅 AWS 服务 从中的环境中呼叫 AWS Cloud9。 -
要确认 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 SNSlist-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 SQSlist-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 中删除环境。