기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS PCS에서 노드 수명 주기 작업 구성
컴퓨팅 노드 그룹 구성에서 노드 수명 주기 작업을 정의합니다. 이 주제에서는 스크립트를 정의하고, 재부팅 시 재실행 여부를 제어하고, 저장하고, 인수를 전달하고, 실패를 처리하고, 캐시하고, 무결성을 검증하고, 로그를 읽는 방법을 설명합니다.
에이전트 버전 요구 사항
노드 수명 주기 작업에는 AWS PCS 에이전트 버전 1.5.0-1 이상이 필요합니다. 컴퓨팅 노드가 이전 에이전트 버전의 사용자 지정 AMI를 사용하는 경우 수명 주기 작업을 구성하기 전에 에이전트를 업데이트합니다. 자세한 내용은 AWS PCS 에이전트 버전 단원을 참조하십시오.
스크립트를 정의하는 방법
각 스크립트에는 name, scriptSource, 선택적 arguments, onError 정책 및가 있습니다executionPolicy. 위치 및 무결성 필드는 아래에 그룹화되어 있습니다scriptSource.
{ "name": "My script", "scriptSource": { "scriptLocation": "s3://my-bucket/my-script.sh", "s3VersionId": "optional, S3 only", "checksum": "optional 64-char SHA-256 hex" }, "arguments": ["arg1", "arg2"], "onError": "TERMINATE", "executionPolicy": "FIRST_BOOT_ONLY" }
컴퓨팅 노드 그룹에 수명 주기 작업 추가
컴퓨팅 노드 그룹을 생성하거나 업데이트할 때 수명 주기 작업을 추가할 수 있습니다. AWS Management Console 또는를 사용합니다 AWS CLI.
재부팅 동작 제어
스크립트executionPolicy별로 설정하여 재부팅 시 재실행 여부를 제어합니다.
값 |
동작 |
사용해야 하는 경우 |
|---|---|---|
|
노드의 첫 부팅 시 스크립트를 한 번 실행합니다. 이후 재부팅할 때마다 건너뜁니다. |
패키지 설치, 도메인 조인 또는 스토리지 초기화와 같은 일회성 설정입니다. 이러한 스크립트를 멱등성으로 만들 필요는 없습니다. |
|
처음 부팅할 때와 재부팅할 때마다 스크립트를 실행합니다. |
임시 파일 시스템을 다시 탑재하거나 노드 상태를 다시 구성하는 등 다시 시작한 후 다시 적용해야 하는 구성입니다. |
한 번 FIRST_BOOT_ONLY 실행하도록 설정된 스크립트는 재부팅 시 건너뜁니다. 모든 부팅에서 EVERY_BOOT 실행되도록 설정된 스크립트는 멱등성이어야 합니다(동일한 결과로 두 번 이상 실행해도 안전함).
스크립트 스토리지 위치
Amazon S3에 스크립트를 저장하거나 HTTPS를 통해 제공할 수 있습니다. 스크립트는 API를 통해 인라인으로 업로드할 수 없으며 각 스크립트는 2MiB 이하여야 합니다. 에이전트는이 크기를 초과하는 모든 스크립트를 거부합니다.
-
Amazon S3(
s3://) - 인스턴스 IAM 프로파일이 객체bucket/keys3:GetObject에 있어야 합니다. S3 게이트웨이 VPC 엔드포인트를 사용하면 프라이빗 서브넷의 노드가 VPC 엔드포인트를 통해 스크립트를 검색할 수 있습니다. 를 사용하여 특정 버전을 고정합니다scriptSource.s3VersionId(S3 위치만 해당). -
HTTPS(
https://) - 호스트는 공개적으로 읽을 수 있어야 하며(인증 없음) 노드에는 아웃바운드 인터넷 액세스(인터넷 게이트웨이, NAT 게이트웨이 또는 HTTP 프록시)가 필요합니다. 이는 GitHub 또는 기타 퍼블릭 리포지토리에서 호스팅되는 스크립트에 유용합니다.hostname/path
외부 스토리지는 팀 간에 버전 관리, 감사 가능성 및 재사용을 제공합니다. 인라인 또는 업로드된 스크립트는 지원되지 않습니다.
스크립트에 인수 전달
인수를 정렬된 배열로 전달합니다. 스크립트에 위치 명령줄 파라미터로 도달합니다.
arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)
에이전트는 환경 변수를 모든 스크립트로 내보냅니다. 이러한 변수에는 클러스터 및 노드 메타데이터가 포함됩니다.
변수 |
설명 |
|---|---|
|
클러스터 식별자/이름 |
|
컴퓨팅 노드 그룹 식별자/이름 |
|
노드 식별자 |
|
|
#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"
오류 처리
각 스크립트에는 스크립트가 0이 아니거나 신호에 의해 종료될 때 발생하는 상황을 제어하는 onError 필드가 있습니다.
값 |
동작 |
사용해야 하는 경우 |
|---|---|---|
|
노드 실패를 표시하고 종료합니다. |
중요한 설정(스토리지 탑재, Active Directory 조인). 손상된 노드에 대한 비용 지불을 방지합니다. |
|
스테이지에서 나머지 스크립트를 중지하고 노드를 실행 중인 상태로 둡니다. |
디버깅 - 실패 후 인스턴스를 검사합니다. |
|
오류를 기록하고 다음 스크립트를 실행합니다. |
선택적 또는 최선의 작업. |
스크립트가 0이 아니거나 신호에 의해 종료되면 실패합니다(예: SIGSEGV). 스크립트는 재시도되지 않습니다. 작업에 일시적인 오류가 발생할 수 있는 경우 스크립트 내에 재시도 로직을 추가합니다. 그러나 스크립트 검색(다운로드)은 onError 동작이 적용되기 전에 지수 백오프를 사용하여 최대 3회 시도(최대 약 17초)까지 재시도됩니다.
스크립트 캐싱 및 업데이트
에이전트는 처음 부팅할 때 각 스크립트를 인스턴스에 다운로드하고 로컬에 저장합니다. 두 필드는 재부팅 시 동작을 제어합니다. 재다운로드를 scriptCachingPolicy 제어하고 재실행을 executionPolicy 제어합니다.
-
CACHE_ONCE(기본값) - 처음 부팅할 때 한 번 다운로드합니다. 다시 가져오지 않습니다. 동작은 재부팅 간에 동일합니다. 스크립트 콘텐츠를 업데이트하려면 인스턴스를 교체해야 합니다. -
REFRESH_ON_REBOOT- 재부팅할 때마다 다시 다운로드하여 캐시를 덮어씁니다. 이렇게 하면 재부팅을 통해 스크립트 수정을 제공할 수 있습니다. 부팅할 때마다 네트워크 액세스가 필요합니다. 새로 고침이 실패하면 다운로드가 검색 실패로 처리되고 스크립트의onError동작이 적용됩니다(캐싱된 복사본에 대한 대체 없음). 새로 고친 스크립트는 인 경우에만 재부팅 시 실제로 다시 실행executionPolicy됩니다EVERY_BOOT.
수명 주기 구성(스크립트 실행, 인수, 오류 처리 및 실행 정책)은 항상 인스턴스당 변경할 수 없습니다. 를 통해 변경하면 새 인스턴스에만 UpdateComputeNodeGroup 영향을 미치고 실행 중인 작업이 노드가 교체되기 전에 완료되도록 DRAIN 전략을 트리거합니다.
스크립트 무결성(체크섬)
선택적으로 스크립트의 checksum에 SHA-256을 64자 16진수 문자열scriptSource로 제공합니다. 에이전트는 다운로드 시 이를 검증합니다. 불일치는 다운로드 실패로 처리되고를 트리거합니다onError. 프로덕션, 특히 공유 또는 외부 소스의 스크립트에 대한 체크섬을 사용하는 것이 좋습니다.
sha256sum mount-efs.sh # use the 64-char hex hash as the checksum value
로깅 및 디버깅
각 스크립트는 자체 로그 파일에 쓰고 에이전트는 자체 운영 로그를 유지합니다.
# agent: download, caching, checksum, orchestration /var/log/amazon/pcs/lifecycle/actions/executor.log # each script's stdout/stderr /var/log/amazon/pcs/lifecycle/actions/<stage>/<script-name>.log
로그 파일 이름은 정의한 스크립트 이름을 사용합니다. 스페이스는 보존됩니다. 예를 들어 라는 스크립트는에 Mount EFS home directory 씁니다Mount EFS home directory.log. SSH 또는 AWS Systems Manager Session Manager에 연결하여 읽습니다. 두 가지 모두 nodeBootstrapped 스테이지에서 사용할 수 있습니다. 로 실패한 노드TERMINATE는 교체되므로 종료 후 디버깅을 위해 로그를 오프 인스턴스로 전달합니다. 수명 주기 로그 디렉터리를 Amazon CloudWatch Logs로 전송하도록 Amazon CloudWatch 에이전트를 구성하는 노드 부트스트랩 스크립트를 추가합니다. AWS유지 관리형 configure-cloudwatch-logs.sh 스크립트는 이를 수행합니다. 자세한 내용은 AWS PCS의 노드 수명 주기 작업에 대한 사용 AWS유지 관리 스크립트 단원을 참조하십시오.