📜  cdk bootstrap - Html (1)

📅  最后修改于: 2023-12-03 15:14:07.226000             🧑  作者: Mango

使用 cdk bootstrap 搭建 Html 主题应用程序

CDK(Cloud Development Kit)是由 AWS 推出的一种基础设施即代码的开发框架,它提供了一种简单的方式让开发者可以使用高级编程语言(如 TypeScript 或 Python)去定义基础设施的代码。在 CDK 中,一个应用程序被称为一个 Stack,它由一个或多个 Construct 组成,Construct 是 CDK 的基础单位,可以表示任何一个 AWS 资源。

使用 cdk bootstrap 命令可以为 AWS 账号在指定 Region 中创建一个用于存储 CDK 合成后的模板文件的 S3 存储桶,并将该存储桶的地址保存到本地的 CDK 环境中的 .cdk 目录下。

下面是一个使用 cdk bootstrap 搭建 Html 主题应用程序的流程:

步骤一:创建一个新的 CDK Project

首先,需要确保您的本地计算机上已经安装了 Node.js 和 AWS CLI,然后执行以下命令:

mkdir MyApp
cd MyApp
cdk init app --language=typescript

该命令将创建一个名为 MyApp 的目录,该目录下包括了一个 CDK TypeScript 应用程序的基本结构。

步骤二:添加 Html 主题代码

对于本例,我们将创建一个基于 HTML 的主题,用于创建一个简单的 Web 应用程序。

我们首先需要安装 aws-cdk-libaws-cdk-lib@aws-cdk-sdk-lambda-nodejs 包:

npm install aws-cdk-lib aws-cdk-lib@aws-cdk-sdk-lambda-nodejs

然后,我们可以在 lib 目录下创建一个新的 HtmlStack.ts 文件,该文件定义了一个基于 HTML 的主题应用程序的类。

import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import { Duration } from 'aws-cdk-lib';

export class HtmlStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create an S3 Bucket to host our index.html file
    const bucket = new s3.Bucket(this, 'Bucket');

    // Create an IAM Role for the Lambda function
    const role = new iam.Role(this, 'Role', {
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com')
    });

    // Attach a policy allowing access to the S3 bucket
    bucket.grantReadWrite(role);

    // Create a Lambda function to serve the index.html file
    const handler = new lambda.Function(this, 'Handler', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.fromAsset('lambda-handler'),
      handler: 'index.handler',
      role: role
    });

    // Create an API Gateway endpoint to trigger our Lambda function
    const api = new apigateway.RestApi(this, 'Endpoint');
    const integration = new apigateway.LambdaIntegration(handler);
    api.root.addMethod('GET', integration);

    // Output the URL for the S3 Bucket and API Gateway endpoint
    new cdk.CfnOutput(this, 'BucketUrl', {
      value: `http://${bucket.bucketName}.s3-website-${this.region}.amazonaws.com`
    });
    new cdk.CfnOutput(this, 'EndpointUrl', {
      value: api.url
    });
  }
}

本示例创建了一个 S3 Bucket 用于存储应用程序的 HTML 文件和其他静态资源,创建了一个 Lambda 函数用于处理 HTTP 请求并返回存储在 S3 Bucket 中的 HTML 文件,创建了一个 API Gateway 端点用于触发 Lambda 函数。同时,输出了 S3 Bucket 和 API Gateway 端点的 URL。

步骤三:使用 cdk bootstrap 命令创建 S3 存储桶

在您的新应用程序的根目录下,在终端执行以下命令:

cdk bootstrap --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

该命令将会在您的 AWS 账号中创建一个存储桶用于存储 CDK 合成后的模板文件。

请注意:运行此命令将在您的 AWS 账号下创建一些资源,可能会产生一些费用。若您希望避免产生费用,请尝试在免费使用的 AWS 区域中部署本应用程序。

步骤四:部署应用程序

执行以下命令以部署该应用程序:

cdk deploy

执行该命令后,CDK 会编译 TypeScript 代码、生成 CloudFormation 模板,然后使用 AWS CLI 将模板上传至您的 AWS 账号中。

在部署完毕后,您可以在 AWS 管理控制台中查看存储桶的 URL 和 API Gateway 端点的 URL。

总结

使用 cdk bootstrap 命令可以为 AWS 账号在指定 Region 中创建一个用于存储 CDK 合成后的模板文件的 S3 存储桶,并将该存储桶的地址保存到本地的 CDK 环境中的 .cdk 目录下。本文示例使用了基于 HTML 的主题创建了一个简单的应用程序,通过 S3 Bucket 存储静态资源,使用 Lambda 函数处理 HTTP 请求并返回 HTML 文件,使用 API Gateway 提供 HTTP 端口,同时输出了 S3 Bucket 和 API Gateway 端点的 URL。

# 使用 cdk bootstrap 搭建 Html 主题应用程序

CDK(Cloud Development Kit)是由 AWS 推出的一种基础设施即代码的开发框架,它提供了一种简单的方式让开发者可以使用高级编程语言(如 TypeScript 或 Python)去定义基础设施的代码。在 CDK 中,一个应用程序被称为一个 Stack,它由一个或多个 Construct 组成,Construct 是 CDK 的基础单位,可以表示任何一个 AWS 资源。

使用 cdk bootstrap 命令可以为 AWS 账号在指定 Region 中创建一个用于存储 CDK 合成后的模板文件的 S3 存储桶,并将该存储桶的地址保存到本地的 CDK 环境中的 .cdk 目录下。

## 步骤一:创建一个新的 CDK Project

首先,需要确保您的本地计算机上已经安装了 Node.js 和 AWS CLI,然后执行以下命令:

mkdir MyApp cd MyApp cdk init app --language=typescript


该命令将创建一个名为 MyApp 的目录,该目录下包括了一个 CDK TypeScript 应用程序的基本结构。

## 步骤二:添加 Html 主题代码

对于本例,我们将创建一个基于 HTML 的主题,用于创建一个简单的 Web 应用程序。

我们首先需要安装 `aws-cdk-lib` 和 `aws-cdk-lib@aws-cdk-sdk-lambda-nodejs` 包:

npm install aws-cdk-lib aws-cdk-lib@aws-cdk-sdk-lambda-nodejs


然后,我们可以在 `lib` 目录下创建一个新的 `HtmlStack.ts` 文件,该文件定义了一个基于 HTML 的主题应用程序的类。

```typescript
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import { Duration } from 'aws-cdk-lib';

export class HtmlStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create an S3 Bucket to host our index.html file
    const bucket = new s3.Bucket(this, 'Bucket');

    // Create an IAM Role for the Lambda function
    const role = new iam.Role(this, 'Role', {
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com')
    });

    // Attach a policy allowing access to the S3 bucket
    bucket.grantReadWrite(role);

    // Create a Lambda function to serve the index.html file
    const handler = new lambda.Function(this, 'Handler', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.fromAsset('lambda-handler'),
      handler: 'index.handler',
      role: role
    });

    // Create an API Gateway endpoint to trigger our Lambda function
    const api = new apigateway.RestApi(this, 'Endpoint');
    const integration = new apigateway.LambdaIntegration(handler);
    api.root.addMethod('GET', integration);

    // Output the URL for the S3 Bucket and API Gateway endpoint
    new cdk.CfnOutput(this, 'BucketUrl', {
      value: `http://${bucket.bucketName}.s3-website-${this.region}.amazonaws.com`
    });
    new cdk.CfnOutput(this, 'EndpointUrl', {
      value: api.url
    });
  }
}

本示例创建了一个 S3 Bucket 用于存储应用程序的 HTML 文件和其他静态资源,创建了一个 Lambda 函数用于处理 HTTP 请求并返回存储在 S3 Bucket 中的 HTML 文件,创建了一个 API Gateway 端点用于触发 Lambda 函数。同时,输出了 S3 Bucket 和 API Gateway 端点的 URL。

步骤三:使用 cdk bootstrap 命令创建 S3 存储桶

在您的新应用程序的根目录下,在终端执行以下命令:

cdk bootstrap --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

该命令将会在您的 AWS 账号中创建一个存储桶用于存储 CDK 合成后的模板文件。

请注意:运行此命令将在您的 AWS 账号下创建一些资源,可能会产生一些费用。若您希望避免产生费用,请尝试在免费使用的 AWS 区域中部署本应用程序。

步骤四:部署应用程序

执行以下命令以部署该应用程序:

cdk deploy

执行该命令后,CDK 会编译 TypeScript 代码、生成 CloudFormation 模板,然后使用 AWS CLI 将模板上传至您的 AWS 账号中。

在部署完毕后,您可以在 AWS 管理控制台中查看存储桶的 URL 和 API Gateway 端点的 URL。

总结

使用 cdk bootstrap 命令可以为 AWS 账号在指定 Region 中创建一个用于存储 CDK 合成后的模板文件的 S3 存储桶,并将该存储桶的地址保存到本地的 CDK 环境中的 .cdk 目录下。本文示例使用了基于 HTML 的主题创建了一个简单的应用程序,通过 S3 Bucket 存储静态资源,使用 Lambda 函数处理 HTTP 请求并返回 HTML 文件,使用 API Gateway 提供 HTTP 端口,同时输出了 S3 Bucket 和 API Gateway 端点的 URL。