ECS+Fargate의 Public IP를 고정 IP로 설정하려면
하고 싶은 일
Amazon ECS+Fargate 구축, Public IP 주소 할당
인터넷 Gateway로 가는 노선이 있는 Public Subnet에서 이걸 설정하고 있어요.
노는 거라서 퍼블릭으로
(Private 시 AWS 비용이 증가하기 때문)
이 Public IP 주소는 디버깅을 할 때 ECS 작업을 만들 때마다 달라지기 때문에 고정시키고 싶습니다
찾아보니까 두 가지 방법이 있어요.
이유는 비용 문제입니다.
NLB 작성
VPC와 Public Subnet은 Fargate와 같은 것을 사용합니다.
AWS 콘솔을 사용하여 작성
EC2 -> Elastic IP
에서 Elastic IP 주소 만들기EC2 -> ターゲットグループ
에서 대상 그룹 생성Basic configuration
항목 설정
값 설정
시험을 준비하다
Choose a target type
IP addresses
Fargate이므로 IP(인스턴스는 대개 아님)
Target group name
대상 그룹 이름
Protocol
TCP
NLB는 L4(TCP 및 UDP) 프로토콜 지원
Port
80
VPC
Fargate 같은 녀석
Health checks
항목 설정
값 설정
시험을 준비하다
Health check protocol
TCP
Register targets
설정 없음
EC2 -> ロードバランサー
에서 Network Load Balancer 제작Basic configuration
항목 설정
값 설정
시험을 준비하다
Load balancer name
로드 밸런서의 이름
Scheme
Internet-facing
Public Subnet은 인터넷용(인터넷용), Private Subnet은 인터넷용(내부용)
IP address type
IPv4
Network mapping
항목 설정
값 설정
시험을 준비하다
VPC
Fargate 같은 녀석
Subnet
Fargate 같은 녀석
IPv4 settings
Elastic IP 생성
Listeners and routing
항목 설정
값 설정
시험을 준비하다
Protocol
TCP
Port
80
이번에는 HTTP 프로토콜로 기다리고 있습니다.
Default action(type)
Forward to
지정된 대상 그룹에 요청 라우팅
Default action
생성된 대상 그룹
Terraform으로 만들다
Elastic IP
resource "aws_eip" "this" {
tags = {
Name = "sample"
}
}
대상 그룹
resource "aws_lb_target_group" "this" {
target_type = "ip"
name = "sample"
protocol = "TCP"
port = 80
vpc_id = aws_vpc.this.id
health_check {
protocol = "TCP"
}
}
NLB
resource "aws_lb" "this" {
load_balancer_type = "network"
name = "sample"
internal = false
ip_address_type = "ipv4"
subnet_mapping {
subnet_id = aws_subnet.pub_a.id
allocation_id = aws_eip.this.id
}
}
NLB 청중
resource "aws_lb_listener" "this" {
load_balancer_arn = aws_lb.this.id
protocol = "TCP"
port = "80"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.this.arn
}
}
ECS 서비스 다시 실행
AWS 콘솔을 사용하여 작성
로드 밸런서 이후 추가할 수 없기 때문에 서비스 다시 만들기
항목 설정
값 설정
시험을 준비하다
부하 평형기의 종류
Network Load Balancer
로드 밸런서 이름
생성된 로드 밸런서
대상 그룹 이름
생성된 대상 그룹
ECS 서비스의 보안 그룹에서 로드 밸런서에 대한 액세스를 허용하기 위해 입국 규칙에 VPC의 IPv4CIDR 블록(예: 10.0.0.0/16)을 추가했습니다.
Port range 는 Fargate 에서 실행되는 애플리케이션에 따라 적절히 설정됩니다.
EC2 -> ターゲットグループ -> Targetsタブ
에서 헬스 status가 헬스가 되면 돼요.Elastic IP 주소로 의사 소통 가능
Terraform으로 만들다
보안 그룹
입국 규칙에 VPC용 IPv4CIDR 블록 추가
적절한 포트 설정
resource "aws_security_group" "this" {
name = "sample"
vpc_id = aws_vpc.this.id
}
resource "aws_security_group_rule" "nlb" {
type = "ingress"
description = "NLB"
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = [aws_vpc.this.cidr_block]
security_group_id = aws_security_group.this.id
}
ECS 서비스
resource "aws_ecs_service" "this" {
...
load_balancer {
target_group_arn = aws_lb_target_group.this.arn
container_name = "sample"
container_port = 8080
}
}
Reference
이 문제에 관하여(ECS+Fargate의 Public IP를 고정 IP로 설정하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kurosame/articles/e0ddb38645ee43텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)