ECS Fargate是一个Serverless的服务,Serverless顾名思义就是无服务器,不用花时间去管理EC2,由AWS去分配Fargate的资源并维护host,相比之下,ECS则可以连进EC2 host做参数设定,以及docker exec进到container debug。主要还是取决应用场景。
Fargate也是会由Cluster、Service和Task三者组成服务。
ECS EC2 mode与Fargate mode在CDK上,会有很多相似之处,主要差别会在於,EC2以及EBS上的设定,而Fargate mode就不需要做EC2 & EBS的设定。此篇,subnet的设定会以Day15的方式去建置
VPC设定,由自己去设定public subnet,这边不会用到private subnet,所以将NAT参数设成0
vpc = ec2.Vpc(self, "VPC",
cidr="10.0.0.0/16",
enable_dns_hostnames=True,
enable_dns_support=True,
max_azs=0,
nat_gateways=0)
Public Subnet设定,参数如同前面章节一样
public_subnet = ec2.Subnet(self, "public-subnet1",
availability_zone="us-east-2a",
cidr_block="10.0.10.0/24",
vpc_id=vpc.vpc_id,
map_public_ip_on_launch=True)
public_subnet.add_default_internet_route(gateway_id=vpc.internet_gateway_id, gateway_attachment=vpc)
增加Security Group的设定,但只允许HTTP protocol对外,因为Fargate把Host封装起来,我们是无法访问,所以就无需增加SSH rules
sg = ec2.SecurityGroup(self, "CDK-SG",
vpc=vpc,
description="cdk create security group",
security_group_name="cdkSG")
sg.add_ingress_rule(peer=ec2.Peer.any_ipv4(), connection=ec2.Port.tcp(80), description="cdk allow anywhere about HTTP protocol")
cluster = ecs.Cluster(self, "Fargate-Cluster",
enable_fargate_capacity_providers=True,
vpc=vpc)
定义Fargate Task,在设定CPU和Memory的时候,Memory必须为2倍的CPU。在设计应用程序的时候,也需要给予足够多的Memory,因为应用程序在执行的时候,若Memory不足很容易造成,程序崩溃。
task = ecs.FargateTaskDefinition(self, "fargate-task",
cpu=1024,
memory_limit_mib=2048,
)
task.add_container(id="app",
image=ecs.ContainerImage.from_registry("johnson860312/awswebdb"),
container_name="mycontainer",
port_mappings=[
ecs.PortMapping(container_port=80,
host_port=80,
protocol=ecs.Protocol.TCP)
],
cpu=128,
memory_reservation_mib=256
)
最後再由Service去做Task的执行使用,设定Public IP以及在哪个Subnet上
svc = ecs.FargateService(self, "fargate-svc",
task_definition=task,
cluster=cluster,
security_groups=[sg],
assign_public_ip=True,
vpc_subnets=ec2.SubnetSelection(
subnets=[public_subnet, public_subnet2]
),
desired_count=3
)
上述的做法就可以快速建立Fargate,并将想要应用程序执行在Container,并在browser上访问
<<: 第16车厢-提示我一下嘛!bootstrap-tooltip应用篇
NextAuth + JWT authentication 虽然 Next.js 的定位是一个全端框...
前面讲 函式 function 时提到参数,回头看自己打的文章发现错误的地方修正了一下。 Param...
如果有从永丰银行API那边下载过C#版的丰收款QPay.SampleCode,应该能发现他们目前的专...
innodb以表为单位来搜集统计资料,分为两种资料 基於磁碟的永久性统计资料。顾名思义存在磁碟,服务...
虚拟机的建置与操作已经来到基本使用的程度了,对於各种应用修改与尝试後可能伴随虚拟机被搞砸的风险。 ...