명령줄에서 서버리스 컨테이너를 클라우드에 배포
Fargate 는 AWS Fargate에 컨테이너를 배포하기 위한 명령줄 인터페이스입니다. 개발자는 Fargate를 사용하여 애플리케이션 배포(이미지 및 환경 변수), 배포 모니터링, 컨테이너 로그 보기, 다시 시작 및 크기 조정과 같은 Fargate 서비스를 쉽게 운영할 수 있습니다.
컬 유틸리티 스크립트를 사용하거나 릴리스 페이지에서 바이너리를 다운로드하여 안정적인 최신 CLI를 설치할 수 있습니다. 설치하고 나면 fargate
명령을 받게 됩니다.
curl -s get-fargate.turnerlabs.io | sh
최신 시험판을 설치하려면 다음 명령을 사용하십시오.
curl -s get-fargate.turnerlabs.io | RELEASE=develop sh
기본적으로 Fargate는 AWS Fargate를 사용할 수 있는 단일 리전인 us-east-1을 사용합니다. CLI는 나중에 사용할 수 있도록 --region 매개변수를 허용하며 AWS_REGION 및 AWS_DEFAULT_REGION 환경 설정을 따릅니다. 필요한 모든 서비스를 사용할 수 없는 지역을 지정하면 오류가 반환됩니다.
어떤 지역에서 어떤 서비스를 사용할 수 있는지에 대한 분석은 지역 표를 참조하세요.
Fargate는 다음 위치에서 자격 증명을 찾는 Go용 AWS SDK를 사용하여 구축되었습니다.
환경 변수
공유 자격 증명 파일
EC2 인스턴스 프로필
자세한 내용은 Go용 AWS SDK 설명서의 자격 증명 지정을 참조하십시오.
매개변수를 지정하는 방법에는 여러 가지가 있습니다. 각 항목은 아래 항목보다 우선합니다.
CLI 인수(예: --cluster my-cluster
)
환경 변수(예: FARGATE_CLUSTER=my-cluster
)
fargate.yml
(예: 아래)
cluster : my-cluster
service : my-service
task : my-task
rule : my-event-rule
verbose : false
nocolor : true
깃발 | 짧은 | 기본 | 설명 |
---|---|---|---|
--무리 | -기음 | ECS 클러스터 이름 | |
--지역 | 미국-동부-1 | AWS 지역 | |
--색상 없음 | 거짓 | 컬러 출력 비활성화 | |
--말 수가 많은 | -다섯 | 거짓 | 자세한 출력 |
서비스는 AWS Fargate에서 실행되는 컨테이너의 장기 인스턴스를 관리합니다. 어떤 이유로든 컨테이너가 종료되면 서비스 스케줄러는 컨테이너를 다시 시작하고 서비스에서 원하는 수의 작업이 실행되도록 합니다. 서비스를 로드 밸런서와 함께 사용하여 서비스의 작업 간에 트래픽을 분산할 수 있습니다.
깃발 | 짧은 | 기본 | 설명 |
---|---|---|---|
--서비스 | -에스 | ECS 서비스 이름 |
fargate service list
서비스 나열
fargate service deploy [--image <docker-image>]
서비스에 새 이미지 배포
서비스에 사용할 Docker 컨테이너 이미지는 --image 플래그를 통해 지정할 수 있습니다.
fargate service deploy [--file docker-compose.yml]
docker compose 파일에 정의된 이미지, 환경 변수, 시크릿을 서비스에 배포합니다.
docker compose 파일에 정의된 docker 이미지와 환경 변수를 하나의 단위로 함께 배포합니다. 환경 변수와 비밀은 작성 파일의 내용으로 대체됩니다.
비밀은 docker compose 파일 확장자 필드 x-fargate-secrets
아래에서 키-값 쌍으로 정의될 수 있습니다. 확장 필드를 사용하려면 작성 파일 버전이 2.x 시리즈의 경우 최소 2.4
, 3.x 시리즈의 경우 최소 3.7
이어야 합니다.
이를 통해 로컬에서 docker-compose up
실행하여 AWS에서 실행되는 것과 동일한 방식으로 앱을 실행할 수 있습니다. docker-compose yaml 구성은 다양한 옵션을 지원하지만 이미지 및 환경 변수만 Fargate에 배포됩니다. docker compose 파일이 두 개 이상의 컨테이너를 정의하는 경우 aws.ecs.fargate.deploy: 1
레이블을 사용하여 배포하려는 컨테이너를 나타낼 수 있습니다. 예를 들어:
version : " 3.7 "
services :
web :
build : .
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-service:0.1.0
ports :
- 80:5000
environment :
FOO : bar
BAZ : bam
env_file :
- hidden.env
x-fargate-secrets :
QUX : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : 1
redis :
image : redis
fargate service info
서비스 점검
로드 밸런서 구성, 활성 배포, 환경 변수 및 비밀을 포함하여 서비스에 대한 확장 정보를 표시합니다.
배포에는 실행 중인 서비스의 활성 버전이 표시됩니다. CPU, 메모리 또는 환경 변수와 같은 구성에 대한 배포 또는 업데이트로 인해 서비스가 전환되는 경우 다중 배포가 표시됩니다.
fargate service logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--time] [--no-prefix]
서비스의 작업 로그 표시
--follow 옵션을 사용하여 서비스 로그의 특정 세그먼트 또는 테일 로그를 실시간으로 반환합니다. 로그 앞에는 "fargate/<service-name>/<task-id>" 형식의 로그 스트림 이름이 붙습니다.
Control-C에 의해 중단될 때까지 Follow는 계속 실행되고 로그를 반환합니다. --follow가 전달되면 --end를 지정할 수 없습니다.
--task 플래그를 통해 작업 ID를 전달하여 서비스 내의 특정 작업에 대한 로그를 반환할 수 있습니다. 여러 특정 작업에서 로그를 검색하려면 작업 ID와 함께 --task를 여러 번 전달합니다.
--start 및 --end 옵션을 시간 표현식과 함께 전달하여 특정 로그 창을 요청할 수 있습니다. 시간 표현식은 기간 또는 타임스탬프일 수 있습니다.
--filter 플래그를 통해 필터 표현식을 전달하여 특정 용어에 대한 로그를 필터링할 수 있습니다. 해당 용어를 검색하려면 단일 용어를 전달하고, 모든 용어를 포함하는 로그 메시지를 검색하려면 여러 용어를 전달하십시오. 자세한 내용은 CloudWatch Logs 설명서를 참조하십시오.
--time은 출력에 로그 타임스탬프를 포함합니다.
--no-prefix는 출력에서 로그 스트림 접두사를 제외합니다.
fargate service ps
서비스에 대해 실행 중인 작업 나열
fargate service scale <scale-expression>
서비스의 작업 수 확장
주어진 스케일 표현식으로 서비스에서 실행하려는 작업 수를 변경합니다. 스케일 표현식은 절대 숫자이거나 +5 또는 -2와 같은 기호로 지정된 델타일 수 있습니다.
fargate service env set [--env <key=value>] [--file <pathname>]
[--secret <key=valueFrom>] [--secret-file <pathname>]
환경 변수 및 비밀 설정
--env, --file, --secret 또는 --secret-file 플래그를 통해 하나 이상의 환경 변수 또는 비밀을 지정해야 합니다. 각 변수 앞에 --env를 반복하여 명령줄에서 변수 수에 관계없이 지정할 수 있습니다. 그렇지 않으면 여러 변수를 텍스트 파일에 한 줄에 하나씩 배치하고 --file 및/또는 --secret-file을 사용하여 파일 이름을 지정할 수 있습니다. .
파일의 각 --env 및 --secret 매개변수 문자열 또는 행은 "key=value" 형식이어야 하며 값에 리터럴 선행 공백을 원하지 않는 한 따옴표가 없고 "=" 주위에 공백이 없어야 합니다. 또한 "키" 측은 합법적인 쉘 식별자여야 합니다. 즉, ASCII 문자 AZ 또는 밑줄로 시작해야 하며 문자, 숫자 및 밑줄로만 구성되어야 합니다.
각 --secret 플래그에 대한 "key=value"의 "값"은 ARN을 AWS Secrets Manager 비밀 또는 AWS 시스템 관리자 매개변수 저장소 매개변수로 참조해야 합니다.
fargate service env unset --key <key-name>
환경 변수 및 비밀 설정 해제
--key 플래그를 통해 지정된 환경 변수 또는 비밀을 설정 해제합니다. 여러 변수를 설정 해제하려면 키 이름과 함께 --key를 여러 번 지정하세요.
fargate service env list
환경 변수 표시
깃발 | 짧은 | 기본 | 설명 |
---|---|---|---|
--cpu | 각 작업에 할당할 CPU 단위의 양 | ||
--메모리 | -중 | 각 작업에 할당할 MiB 양 |
fargate service update [--cpu <cpu-units>] [--memory <MiB>]
서비스 구성 업데이트
CPU 및 메모리 설정은 --cpu 및 --memory 플래그를 사용하여 각각 CPU 단위 및 메비바이트로 지정됩니다. 1024개 CPU 단위마다 vCPU 1개와 동일합니다. AWS Fargate는 특정 CPU 및 메모리 구성 조합만 지원합니다.
CPU(CPU 유닛) | 메모리(MiB) |
---|---|
256 | 512, 1024 또는 2048 |
512 | 1GiB 단위로 1024~4096 |
1024 | 2048~8192(1GiB 증분) |
2048년 | 4096~16384(1GiB 증분) |
4096 | 8192~30720(1GiB 증분) |
--cpu 또는 --memory 중 하나 이상을 지정해야 합니다.
fargate service restart
서비스 다시 시작
서비스에 대한 새 작업 세트를 생성하고 이전 작업을 중지합니다. 예를 들어 서비스가 외부 소스에서 캐시된 데이터를 다시 로드해야 하는 경우에 유용합니다.
깃발 | 짧은 | 기본 | 설명 |
---|---|---|---|
--일 | -티 | 작업 정의 계열 |
작업은 컨테이너의 일회성 실행입니다. 작업 인스턴스는 AWS API, AWS Management Console을 통해 수동으로 중지하거나 어떤 이유로든 중단될 때까지 실행됩니다.
fargate task register [--image <docker-image>]
[-e KEY=value -e KEY2=value] [--env-file dev.env]
[--secret KEY3=valueFrom] [--secret-file secrets.env]
작업 계열의 최신 개정을 기반으로 지정된 Docker 이미지, 환경 변수 또는 비밀에 대한 새 작업 정의를 등록하고 새 개정 번호를 반환합니다.
새 작업 정의에 사용할 Docker 컨테이너 이미지는 --image 플래그를 통해 지정할 수 있습니다.
환경 변수는 하나 이상의 --env
플래그 또는 --env-file
플래그를 사용하여 지정할 수 있습니다.
하나 이상의 --secret
플래그 또는 --secret-file
플래그를 사용하여 비밀을 지정할 수 있습니다.
fargate task register [--file docker-compose.yml]
docker compose 파일에 정의된 이미지, 환경 변수 및 비밀을 사용하여 새 작업 정의를 등록합니다. 환경 변수는 작성 파일의 내용으로 대체됩니다.
비밀은 docker compose 파일 확장자 필드 x-fargate-secrets
아래에서 키-값 쌍으로 정의될 수 있습니다. 확장 필드를 사용하려면 작성 파일 버전이 2.x 시리즈의 경우 최소 2.4
, 3.x 시리즈의 경우 최소 3.7
이어야 합니다.
docker compose 파일이 두 개 이상의 컨테이너를 정의하는 경우 aws.ecs.fargate.deploy: 1
레이블을 사용하여 배포하려는 컨테이너를 나타낼 수 있습니다.
fargate task describe
explain 명령은 Docker Compose 형식의 작업 정의를 설명합니다. Docker 이미지, 환경 변수, 비밀 및 대상 포트는 매핑된 요소입니다.
이 명령은 task register
, service deploy
또는 service env set
명령으로 변경된 내용을 확인하는 데 유용할 수 있습니다. 디버깅이나 문제 해결을 위해 작업 정의를 로컬로 실행하는 데에도 유용할 수 있습니다.
fargate task describe -t my-app > docker-compose.yml
docker-compose up
fargate.yml
파일, FARGATE_TASK
환경을 사용하거나 선택적 개정 번호를 포함하는 -t
플래그를 사용하여 작업 정의 패밀리를 지정할 수 있습니다.
fargate task describe -t my-app
fargate task describe -t my-app:42
예제 출력:
version : " 3.7 "
services :
app :
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-app:1.0
ports :
- published : 8080
target : 8080
environment :
AWS_REGION : us-east-1
ENVIRONMENT : dev
FOO : bar
x-fargate-secrets :
KEY : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : " 1 "
fargate task logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--container-name] [--time] [--no-prefix]
작업 로그 표시
다음 규칙을 사용하는 Cloudwatch 로그 그룹을 가정합니다. fargate/task/<task>
여기서 task
--task
,fargate.yml 또는 환경 변수 옵션을 통해 지정됩니다.
--follow 옵션을 사용하여 작업 로그의 특정 세그먼트 또는 테일 로그를 실시간으로 반환합니다. 로그 앞에는 fargate/<container-name>/<task-id>.
--container-name
사용하면 작업 정의 내에서 로그를 가져올 컨테이너를 지정할 수 있습니다(기본값은 app
).
Control-C에 의해 중단될 때까지 Follow는 계속 실행되고 로그를 반환합니다. --follow
전달되면 --end
지정할 수 없습니다.
--task
플래그를 통해 작업 ID를 전달하여 특정 작업에 대한 로그를 반환할 수 있습니다. 여러 특정 작업에서 로그를 검색하려면 작업 ID와 함께 --task
여러 번 전달합니다.
--start
및 --end
옵션을 시간 표현식과 함께 전달하여 특정 로그 창을 요청할 수 있습니다. 시간 표현식은 기간 또는 타임스탬프일 수 있습니다.
--filter
플래그를 통해 필터 표현식을 전달하여 특정 용어에 대한 로그를 필터링할 수 있습니다. 해당 용어를 검색하려면 단일 용어를 전달하고, 모든 용어를 포함하는 로그 메시지를 검색하려면 여러 용어를 전달하십시오.
--time
출력에 로그 타임스탬프를 포함합니다.
--no-prefix
출력에서 로그 스트림 접두사를 제외합니다.
깃발 | 짧은 | 기본 | 설명 |
---|---|---|---|
--규칙 | -아르 자형 | CloudWatch 이벤트 규칙 |
events
명령은 CloudWatch 이벤트(예약된 작업 등) 작업을 위한 하위 명령을 제공합니다.
fargate events target --revision <revision>
규칙 대상의 EcsParameters.TaskDefinitionArn
업데이트하여 CloudWatch 이벤트 규칙에 대한 작업 정의 개정을 "배포"합니다(다음 이벤트 규칙 호출에서 새 버전을 실행함).
일반적인 CI/CD 시스템은 다음과 같은 작업을 수행할 수 있습니다.
REVISION=$(fargate task register -i 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:${VERSION}-${CIRCLE_BUILD_NUM} -e FOO=bar)
fargate events target -r ${REVISION}