当前位置: 首页 > news >正文

aws(学习笔记第四十九课) ECS集中练习(1)

文章目录

  • aws(学习笔记第四十九课) ECS集中练习(1)
  • 学习内容:
    • 1. 代码连接和修改
      • 1.1 代码链接
      • 1.2 `ECS`的大分类
    • 2. 进行各种`ecs`的练习
      • 2.1 `AutoScaling Group`的练习
      • 2.1.1 整体架构
      • 2.1.2 代码
      • 2.2 为`cluster`添加一个服务
        • 2.2.1 整体架构
        • 2.2.2 代码部分
      • 2.3 为`ecs service`添加一个`elb (elastic loader balancer)`
        • 2.3.1 整体架构
        • 2.3.2 `Elastic Loader Balancer`代码
      • 2.4 整体执行代码
      • 2.5 `cleanup`

aws(学习笔记第四十九课) ECS集中练习(1)

  • 练习ecs的各种使用方法

学习内容:

  • 使用Auto Scaling Group来启动ecs service

1. 代码连接和修改

1.1 代码链接

ECS集中练习

1.2 ECS的大分类

  • EC2 启动模式
    • 显式管理 EC2 实例(如您的 CDK 代码中的 AutoScalingGroup)。
    • 需配置实例类型、AMI、扩展策略等。
    • 适合需要直接控制底层基础设施的场景。
  • Fargate 启动模式
    • 完全托管,无需管理 EC2 实例。
    • 按任务资源(vCPU/内存)付费,无需预置容量。
    • 适合无状态服务或快速部署场景。
      在这里插入图片描述

2. 进行各种ecs的练习

2.1 AutoScaling Group的练习

2.1.1 整体架构

在这里插入图片描述

2.1.2 代码

class ECSCluster(Stack):def __init__(self, scope: Construct, id: str, **kwargs) -> None:super().__init__(scope, id, *kwargs)vpc = ec2.Vpc(self, "MyVpc",max_azs=2)# 添加 ECS 实例角色ecs_role = iam.Role(self, "EcsInstanceRole",assumed_by=iam.ServicePrincipal("ec2.amazonaws.com"),managed_policies=[iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AmazonEC2ContainerServiceforEC2Role")])# 替换 AutoScalingGroup 的启动配置为启动模板launch_template = ec2.LaunchTemplate(self, "LaunchTemplate",instance_type=ec2.InstanceType("t2.xlarge"),machine_image=ecs.EcsOptimizedImage.amazon_linux2(),security_group=ec2.SecurityGroup(self, "SG", vpc=vpc),associate_public_ip_address=True,user_data=ec2.UserData.for_linux(),role = ecs_role)asg = autoscaling.AutoScalingGroup(self, "MyFleet",launch_template=launch_template,desired_capacity=3,vpc=vpc,vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),)cluster = ecs.Cluster(self, 'EcsCluster',vpc=vpc)capacity_provider = ecs.AsgCapacityProvider(self, "AsgCapacityProvider",auto_scaling_group=asg)cluster.add_asg_capacity_provider(capacity_provider)
app = App()
ECSCluster(app, "MyFirstEcsCluster")
app.synth()

主要步骤如下:

  • 创建vpc
  • 创建ecsrole
    这里是AWS Managed Roleservice-role/AmazonEC2ContainerServiceforEC2Role,通过这个role,给ec2赋予需要的ecs权限
  • 创建ec2.LaunchTemplate,新的cdk中,创建Auto Scaling Group必须要使用ec2.LaunchTemplate
  • 使用ec2.LaunchTemplate创建autoscaling.AutoScalingGroup
  • 创建ecs cluster
  • ecs cluster设定provider,即调用add_asg_capacity_provider

2.2 为cluster添加一个服务

这里,准备好了ecs cluster之后,就相当于准备好了一个计算环境(Compute Environment),接下来测试下服务。

2.2.1 整体架构

在这里插入图片描述
整体架构分为三个大部分:

  • Compute Environment
    这部分就是为整个ecs cluster提供计算能力,这里成为compute environment
  • Task Definition
    这里,为了提供了服务的静态定义,包括
    • image – 使用哪个镜像
    • momory_limit_mib – 使用多大的计算资源
    • cpu – 使用的虚拟cpu的核数等
  • service
    如果让一个service能够真正的动起来,也就是启动起来,光有静态的task definition还是不够的,需要定义service
2.2.2 代码部分
# 添加测试任务task_definition = ecs.Ec2TaskDefinition(self, "TestTask",network_mode=ecs.NetworkMode.AWS_VPC)task_definition.add_container("TestContainer",image=ecs.ContainerImage.from_registry("nginx:alpine"),  # 使用Nginx测试镜像memory_limit_mib=256,cpu=256,port_mappings=[ecs.PortMapping(container_port=80)])service = ecs.Ec2Service(self, "TestService",cluster=cluster,task_definition=task_definition,desired_count=1,)

2.3 为ecs service添加一个elb (elastic loader balancer)

2.3.1 整体架构

在这里插入图片描述

2.3.2 Elastic Loader Balancer代码
 # 创建负载均衡器lb = elbv2.ApplicationLoadBalancer(self, "ServiceLB",vpc=vpc,internet_facing=True)# 添加监听器listener = lb.add_listener("Listener", port=80)listener.add_targets("ECSTarget",port=80,targets=[service])# 输出 URLCfnOutput(self, "ServiceEndpoint",value=f"http://{lb.load_balancer_dns_name}",description="Nginx Service URL")

2.4 整体执行代码

cd your_own_dir/python/ecs/cluster
python -m venv .venv
source .venv/Scripts/activate
pip install -r requirements.txt
cdk --require-approval never deploy

在这里插入图片描述
在这里插入图片描述
因为ServiceEndpoint已经作为cdkCfnOutput输出了,所以可以确认自己的service endpoint url
在这里插入图片描述

2.5 cleanup

cdk destroy
http://www.dtcms.com/a/287363.html

相关文章:

  • 基于深度学习的推荐系统:从协同过滤到神经网络
  • Java机考题:815. 公交路线 图论BFS
  • OpenCV 官翻7 - 对象检测
  • 用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 02
  • Vue 3 中导出 Excel 文件
  • github上传代码
  • window、DOM、document、html 他们之间的关系是什么?
  • springboot基础-demo
  • Java中缓存的使用浅讲
  • Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)
  • 深入理解设计模式:策略模式的艺术与实践
  • 云端成本治理利器:亚马逊云科技智能仪表盘(AWS Cost Intelligence Dashboard)深度解析
  • Android14 SystemUI 启动流程(2)
  • Spring MVC @RequestParam注解全解析
  • Spring MVC源码分析 DispatcherServlet#getHandlerAdapter方法
  • C# 中的强大运算符
  • 掌握配置文件(一):精通`properties`与`yml`的语法及选择
  • 【iOS】ZARA仿写
  • MySQL详解二
  • ros2高级篇之高可用启动文件及配置编写
  • 深入解析HDFS写入流程:管道机制与数据可靠性保障
  • (Python)类和类的方法(基础教程介绍)(Python基础教程)
  • 7月19日日记
  • SpringAI_Chat模型_DeepSeek模型--基础对话
  • Word快速文本对齐程序开发经验:从需求分析到实现部署
  • 嵌入式单片机开发 - Keil MDK 复制工程
  • Python day18
  • MySQL事务管理(上)(12)
  • xss-labs靶场1-8
  • DAMA数据管理具像化解读|第一章数据管理|业务驱动因素