AWS Fargate를 Terraform으로 구축
Terraform에서 VPC에서 단번에 작성해 갑니다.
2018/2/15 시점에서는 도쿄 리전 미대응이므로, 버지니아 리전에서 실행합니다.
작성 후의 이미지 (Fargate)
관리 콘솔에서 EC2가 존재하지 않는지 확인하고 싶습니다.
이전 이미지(ECS)
차이는 컨테이너 인스턴스의 유무만
계속해서 VPC/Subnet/ALB 등의 NetWork 주위의 설정은 필수
ECS 프로비저닝 파일과의 변경 사항
terrafrom
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準拠の組み合わせのみ指定可能
task_definition.json
[
{
"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"
}
}
}
]
CPU/Memory의 조합은 이쪽
이하 추가
target_type = "ip"
IAM 삭제
NetWork 설정을 Auto Scale에서 이전
diff
- 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 실행
$ terraform --version
Terraform v0.11.3
+ provider.aws v1.9.0
+ provider.template v1.0.0
bush
## 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を記載]'
※추기(2018/02/15):
provider.aws v1.9.0
에서 ECS Service
의 공용 IP 자동 할당 기능이 지원되었으므로 내용이 수정되었습니다.## CannotPullContainerError
apply 는 성공합니다만, 서비스 등록한 태스크가 오르지 않습니다.
오류 원인은 Docker Image가 풀 수 없는 것 같습니다.
원인은
Auto-assign public IP
가 DISABLED
이므로 인터넷에 연결할 수 없습니다.(
provider.aws v1.6.0
에서는 Auto-assign public IP
는 미 대응 ※2018/1/10 시점)## AWS CLI로 네트워크 설정 조정
+
ecs updatae-service
에서 Auto-assign public IP
에서 ENABLED
로작업이
RUNNING
입니다.# 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}"
마지막으로
컨테이너 인스턴스가 관리 콘솔에 존재하지 않는 것도 무사히 확인할 수 있었습니다.
다음 번 는 오토 스케일을 사용해보고 싶습니다.
Reference
이 문제에 관하여(AWS Fargate를 Terraform으로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takeshi_hirosue/items/90051144aae8bb5a646f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)