如何使用AWS CDK部署Fargate

284 阅读5分钟

目录

阅读时间: 5 分钟

讲座

什么是AWS Fargate?

在这篇博客中,我们将看到如何使用AWS CDK部署Fargate。根据AWS的官方文档,"AWS Fargate是一个无服务器、即用即付的计算引擎,让你专注于构建应用程序,而无需管理服务器。"

简单地说,Fargate允许你在AWS的ECS上运行容器,而不需要管理服务器。使用它使管理更加容易,因为人们不需要担心使用什么服务器类型或何时扩展集群。有了它,容器的运行不需要任何EC2实例。

Fargate的特点

使得Fargate成为一个独特的服务的各种功能如下:

1 - 负载平衡

当启动Fargate服务时,如果你指定IP地址,它就会在负载平衡器上注册。

2- 联网

fargate的任务都是在VPC下完成的,它支持aws vpc网络模式,使用这种模式,服务将与其他服务分开。此外,这有助于完全控制该服务。

3 - 配置可以随时管理

Fargate的配置足够大,有多种CPU和内存的组合来密切配合需求。其范围从2GB到8GB。这种配置的灵活性有助于在任何时候达到任何配置。

4- 拥有对容器注册表的支持

使用fargate的任务执行角色,可以很容易地进行认证,以帮助从ECR提取图像。此外,它还有助于与docker hub进行连接。

如何使用AWS CDK部署Fargate?

先决条件:

1- 一个aws账户

2 - 配置好的AWS客户端

3 - 用于安装cdk的npm包管理器

4- 安装了node->版本>14.0.0

现在让我们来看看步骤。

步骤1 - 安装aws cdk

要安装aws cdk,请运行以下命令

npm install -g aws-cdk

运行上述命令后,使用下面的命令检查版本:-

cdk --version

第2步 - 创建一个带有基本文件的文件夹进行部署

下面的命令将有助于创建这个文件夹。

mkdir aws-fargate
cd aws-fargate

现在,在上述文件夹中创建以下文件:

a - cdk.json文件

cdk.json文件的两个主要目的是:告诉CDK CLI如何执行我们的CDK代码。并跟踪功能标志,这使得CDK团队能够安全地推出新功能和导致破坏性变化的错误修复。

该文件中的代码是

{ "app": "node --experimental-specifier-resolution=node --loader ts-node/esm index.ts" }

b - package.json文件

这是你的npm模块清单。它包括像你的应用程序的名称,版本,依赖性和构建脚本,如 "watch "和 "build "等信息。

其代码是

{
  "name": "fargate-application",
  "version": "1.0.0",
  "description": "Running an application load balanced service on Fargate",
  "private": true,
  "type": "module",
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "cdk": "cdk"
  },
  "author": {
    "name": "Amazon Web Services",
    "url": "https://aws.amazon.com",
    "organization": true
  },
  "license": "Apache-2.0",
  "devDependencies": {
    "@types/node": "^8.10.38",
    "aws-cdk": "*",
    "typescript": "~4.6.0"
  },
  "dependencies": {
    "aws-cdk-lib": "^2.0.0",
    "constructs": "^10.0.0",
    "ts-node": "10.7.0"
  }
}

package.json文件描述了应用程序的名称。它有各种规格:

  • 第一个规格是关于名称、描述和脚本。这些脚本在提示中运行。
  • 第二个规范是关于作者的。
  • 第三和第四个规范是关于许可证和应用程序中涉及的依赖关系。

c - index.ts文件

这是一个类型的文件,基本上是实现的主要代码。在我们的文件中,写的代码是创建vpc和实例化的Fargate服务,只有集群和图像。

import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecs_patterns from "aws-cdk-lib/aws-ecs-patterns";
import * as cdk from "aws-cdk-lib";
class FirstFargate extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 });
    const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
    new ecs_patterns.ApplicationLoadBalancedFargateService(this, "FargateService", {
      cluster,
      taskImageOptions: {
        image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
      },
    });
  }
}
const app = new cdk.App();
new FirstFargate(app, 'FirstService');
app.synth();

所以上面的代码将做以下工作:

  • 导入所需的库。
  • vpc和Fargate集群将被创建。
  • 创建构造函数以调用各种道具。
  • 图像将从注册表中提取。

d - tsconfig.json

tsconfig.json文件指定了根文件和编译项目所需的编译器选项

下面的代码显示了上述文件的使用情况。

{
    "compilerOptions": {
    "target":"ES2018",
    "module": "ESNext",
    "moduleResolution": "node",
    "lib": ["es2016", "es2017.object", "es2017.string"],
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterlop": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": false,
    "inlineSourceMap": true,
    "inlineSources": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization":false
},
"ts-node": {
    "esm": true
},
"lib": ["esnext"]
}

上面的代码显示了编译器选项,它基本上显示了编译上述项目时的所有选项。

到现在为止,这些都是文件和演示的需要,为了部署Fargate,让我们继续前进

第3步 - 部署上述堆栈

为了部署上述堆栈,在文件所在的同一目录下运行以下命令。

npm install

上述命令将安装堆栈文件中提到的所有依赖项。

接下来运行下面的命令。

cdk bootstrap

上面的命令将准备环境。上面的命令将在AWS中制作云计算模板。它包含了所有部署时需要的资源。

上面的输出显示环境已经被启动了。在验证了这些变化之后,让我们来部署应用程序。

为了部署堆栈,运行下面的命令。

cdk deploy

该命令部署了fargate服务。

输出1

CDK部署

输出2

你可以看到堆栈已经被部署了。

下面是在AWS上创建的堆栈的输出。

**注意:**不要忘记运行 "**cdk destroy "**命令,因为正在使用的资源将产生高额费用。

我们通过上述部署实现了什么?

  • 它将自动配置一个负载平衡器。
  • 创建一个安全组,并使负载平衡器与之集成。
  • 它为ECR添加权限。
  • 它可以防止一个实例被自动删除。
  • 通过上述演示,可以实现自动扩展。

结语

最后,我们看到了如何在不管理服务器的情况下运行容器。此外,使用Fargate使整个过程自动化。Fargate与Elastic Container Service和Elastic Kubernetes Service都兼容。

学习愉快!!!谢谢

谢谢你!!!!。