使用 AWS Fargate 上进行 AutoScale设置
AWS Fargate
变得更加强大 Auto Scaleing
我会尝试实施它。
AWS官方 博客进行设置的。
在Terraform中进行配置,参考使用
旧 ECS 中的 AutoScale
容器实例( EC2
)有装订,有一种匆忙的感觉。
下面两个 Auto Scale
需要进行设置。
- 容器实例
Auto Scale
ECS Service
的Auto Scale
Fargate 的自动缩放
容器实例( EC2
),您可以在ECS集群内自由安排任务。
容器实例Auto Scale
不再需要。
使用 Terraform 配置
下面一次性创建所有内容。
https://github.com/Thirosue/terraform-sample/tree/master/aws_fargate
请比较下面与ECS的差异。
https://github.com/Thirosue/terraform-sample/tree/master/aws_ecs
- 供应
$ cd /path/to/directory/aws_fargate
$ cat terraform.tfvars
access_key="[アクセスキー記載]"
secret_key="[シークレットキーを記載]"
aws_id="[AWS IDを記載]"
$ terraform plan
$ terraform apply
- 破坏
$ terraform destroy
使用管理控制台进行配置
Fargate起动
我们将使用 Terraform 从 VPC 一次性创建所有内容。
创建后的图像 (Fargate)
我想确认管理控制台中不存在EC2。
上一张图片 (ECS)
唯一的区别是容器实例是否存在。
仍然需要围绕 NetWork 进行设置,例如 VPC/子网/ALB。
ECS 配置文件的更改
- 由于不再需要实例设置,因此删除与 Auto Scale 相关的文件。
- Task定义
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
execution_role_arn = "arn:aws:iam::${var.aws_id}:role/ecsAdminRole" #AWS標準ECS関連のポリシーAmazonECSTaskExecutionRolePolicy/AmazonECS_FullAccessを含む
cpu = 256 #Fargate準拠の組み合わせのみ指定可能
memory = 512 #Fargate準拠の組み合わせのみ指定可能
[
{
"name": "nginx",
"image": "nginx:alpine",
"cpu": 256, //必要に応じ変更
"memory": 512, //必要に応じ変更
"essential": true,
"network_mode": "awsvpc", //追加
"portMappings": [
{
"containerPort": 80
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "awslogs-${app_name}-nginx-log",
"awslogs-region": "${aws_region}",
"awslogs-stream-prefix": "awslogs-${app_name}-nginx"
}
}
}
]
- ALB 目标群体
以下追加
target_type = "ip"
- 云服务器服务
IAM 删除
从自动缩放传输网络设置
- iam_role = "ecsServiceRole"
+ launch_type = "FARGATE"
+ launch_type = "FARGATE"
+
+ network_configuration {
+ subnets = [
+ "${aws_subnet.public-subnet1.id}",
+ "${aws_subnet.public-subnet2.id}"
+ ]
+
+ security_groups = [
+ "${aws_security_group.public_firewall.id}"
+ ]
+ assign_public_ip = "true"
+ }
地形运行
- 地形版本
$ terraform --version
Terraform v0.11.3
+ provider.aws v1.9.0
+ provider.template v1.0.0
- GitHub
## Dry Run
terraform plan -var 'aws_id=[AWS Account Idを記載]'
## apply
terraform apply -var 'aws_id=[AWS Account Idを記載]'
## 削除
terraform destroy -var 'aws_id=[AWS Account Idを記載]'
# network-configurationでassignPublicIp=ENABLEDにupdate
$ aws ecs update-service \
--cluster fargate-auth \
--service fargate-auth-service \
--network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxxx,subnet-xxxxxx],securityGroups=[sg-xxxxxxx],assignPublicIp=ENABLED}"
最后
我们还能够成功确认管理控制台上不存在该容器实例。
,我想尝试自动缩放。
- 实施后服务状况
CloudWatch Alarm
设置
AWS官方 博客实现 参考
- 实施后报警状态
由于CPU利用率低,
ScaleIn
处于报警状态,ScaleOut
还可以
ECS Service AutoScale
设置
AWS官方 博客实现 参考
Service
更新
Auto Scaling Policy
设置
已创建
Alarm
并且冷却时间固定为60秒进行测试。
同样下面,ScaleInPolicy
还创建了
- 设置后
Auto Scaling
的状态
还调整和更新最大任务数。
加载
Apache Bench
等,施加负载,ScaleOutAlarm
点燃。
另请根据需要调整安全组。
$ ab -n 1000000 -c 1000 http://fargate-nginx-alb-XXXXXXXXXXXX.us-east-1.elb.amazonaws.com/
ScaleOut
着火了
task
那里有两个RUNNING
变成
访问暂停
CPU 利用率下降,
ScaleInAlarm
火灾和任务停止。
AutoScale
历史
Alarm
经过start
也stop
可以查看历史记录。
task
是一(重新十进制)RUNNING
还给
最后
旧 ECS
所以我过得很艰难 Auto Scale
现在可以轻松且不受限制地实现。