자습서: 애플리케이션 종속성 업데이트, 관리형 노드 패치 및 애플리케이션별 상태 확인 수행 - AWS Systems Manager

자습서: 애플리케이션 종속성 업데이트, 관리형 노드 패치 및 애플리케이션별 상태 확인 수행

대부분의 경우 관리형 노드는 최신 소프트웨어 업데이트로 패치된 후 재부팅해야 합니다. 그러나 안전 장치 없이 프로덕션 환경에서 노드를 재부팅하면 경보 호출, 잘못된 지표 데이터 기록, 데이터 동기화 중단과 같은 여러 문제가 발생할 수 있습니다.

이 자습서에서는 AWS Systems Manager 문서(SSM 문서) AWS-RunPatchBaselineWithHooks를 사용하여 다음을 수행하는 복잡한 다단계 패치 작업을 수행하여 이러한 문제를 피하는 방법을 보여줍니다.

  1. 애플리케이션에 새로 연결 방지

  2. 운영 체제 업데이트 설치

  3. 애플리케이션의 패키지 종속성 업데이트

  4. 시스템 다시 시작

  5. 애플리케이션별 상태 확인 수행

이 예에서는 인프라를 다음과 같이 설정했습니다.

  • 대상 가상 머신은 Systems Manager에 관리형 노드로 등록됩니다.

  • Iptables는 로컬 방화벽으로 사용됩니다.

  • 관리형 노드에서 호스팅되는 애플리케이션이 포트 443에서 실행되고 있습니다.

  • 관리형 노드에서 호스팅되는 애플리케이션이 nodeJS 애플리케이션입니다.

  • 관리형 노드에서 호스팅되는 애플리케이션이 pm2 프로세스 관리자에 의해 관리됩니다.

  • 애플리케이션에 이미 지정된 상태 확인 엔드포인트가 있습니다.

  • 애플리케이션의 상태 확인 엔드포인트에 최종 사용자 인증이 필요하지 않습니다. 엔드포인트를 사용하면 조직의 가용성 설정 요구 사항을 충족하는 상태 확인을 수행할 수 있습니다. (사용자 환경에서는 nodeJS 애플리케이션이 실행 중이고 요청을 수신할 수 있는지 확인하는 것으로 충분할 수 있습니다. 다른 경우에는 캐싱 계층 또는 데이터베이스 계층에 대한 연결이 이미 설정되었는지도 확인해야 할 수 있습니다.)

이 자습서의 예제는 데모용으로만 제공되며 프로덕션 환경에 있는 그대로 구현되지 않습니다. 또한 AWS-RunPatchBaselineWithHooks 문서와 함께 Systems Manager의 기능인 Patch Manager의 수명 주기 후크 기능은 다양한 다른 시나리오를 지원할 수 있습니다. 다음은 몇 가지 예제입니다.

  • 지표 보고 에이전트를 패치 전에 중지하고 관리형 노드 재부팅 후 다시 시작합니다.

  • 관리형 노드를 패치 전에 CRM 또는 PCS 클러스터에서 분리하고 재부팅한 후 다시 연결합니다.

  • 운영 체제(OS) 업데이트가 적용된 후 관리형 노드가 재부팅되기 전에 Windows Server 시스템에서 서드 파티 소프트웨어(예: Java, Tomcat, Adobe 애플리케이션 등)를 업데이트합니다.

애플리케이션 종속성 업데이트, 관리형 노드 패치 및 애플리케이션별 상태 확인 수행
  1. 다음 내용으로 사전 설치 스크립트에 대한 SSM 문서를 생성하고 이름을 NodeJSAppPrePatch로 지정합니다. your_application을 애플리케이션 이름으로 바꿉니다.

    이 스크립트는 새로운 수신 요청을 즉시 차단하고 패치 작업을 시작하기 전에 이미 활성화된 요청이 완료될 때까지 5초간 기다립니다. sleep 옵션에 대해 수신 요청을 완료하는 데 일반적으로 걸리는 시간보다 긴 시간(초)을 지정합니다.

    # exit on error set -e # set up rule to block incoming traffic iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1 # wait for current connections to end. Set timeout appropriate to your application's latency sleep 5 # Stop your application pm2 stop your_application

    SSM 문서 생성에 대한 자세한 내용은 SSM 문서 콘텐츠 생성 섹션을 참조하세요.

  2. 설치 후 스크립트에 대해 다음 내용으로 다른 SSM 문서를 생성하여 애플리케이션 종속성을 업데이트하고 이름을 NodeJSAppPostPatch로 지정합니다. /your/application/path를 애플리케이션의 경로로 바꿉니다.

    cd /your/application/path npm update # you can use npm-check-updates if you want to upgrade major versions
  3. onExit 스크립트에 대한 다음 내용으로 다른 SSM 문서를 생성하여 애플리케이션을 다시 불러오고 상태 확인을 수행합니다. 이 SSM 문서의 이름을 NodeJSAppOnExitPatch로 지정합니다. your_application을 애플리케이션 이름으로 바꿉니다.

    # exit on error set -e # restart nodeJs application pm2 start your_application # sleep while your application starts and to allow for a crash sleep 10 # check with pm2 to see if your application is running pm2 pid your_application # re-enable incoming connections iptables -D INPUT -j DROP -p tcp --syn --destination-port # perform health check /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1
  4. 다음 단계에 따라 AWS Systems Manager의 기능인 State Manager에 연결을 생성하여 작업을 실행합니다.

    1. AWS Systems Manager 콘솔(https://console.aws.amazon.com/systems-manager/)을 엽니다.

    2. 탐색 창에서 State Manager를 선택한 후 연결 생성을 선택합니다.

    3. [이름(Name)]에 연결의 목적을 식별하는 데 도움이 되는 이름을 입력합니다.

    4. [문서(Document)] 목록에서 AWS-RunPatchBaselineWithHooks를 선택합니다.

    5. [작업(Operation)]에서 [설치(Install)]를 선택합니다.

    6. (옵션) [스냅샷 ID(Snapshot Id)]에 작업 속도를 높이고 일관성을 보장하기 위해 생성하는 GUID를 제공합니다. 00000000-0000-0000-0000-111122223333과 같이 단순한 GUID 값을 사용할 수 있습니다.

    7. [설치 전 후크 문서 이름(Pre Install Hook Doc Name)]에 NodeJSAppPrePatch를 입력합니다.

    8. [설치 후 후크 문서 이름(Post Install Hook Doc Name)]에 NodeJSAppPostPatch를 입력합니다.

    9. [종료 시 후크 문서 이름(On ExitHook Doc Name)]에 NodeJSAppOnExitPatch를 입력합니다.

  5. 대상(Targets)에서, 태그를 지정하거나, 노드를 수동으로 선택하거나, 리소스 그룹을 선택하거나, 모든 관리형 노드를 선택하여 관리형 노드를 식별할 수 있습니다.

  6. [일정 지정(Specify schedule)]에서 연결을 실행할 빈도를 지정합니다. 예를 들어 관리형 노드 패치의 경우 일주일에 한 번이 일반적입니다.

  7. 속도 제어(Rate control) 섹션에서 여러 관리형 노드에서 연결을 실행하는 방법을 제어하는 옵션을 선택합니다. 한 번에 관리형 노드의 일부만 업데이트되는지 확인합니다. 그렇지 않으면 전체 또는 대부분의 플릿이 한 번에 오프라인 상태가 될 수 있습니다. 속도 제어 사용에 대한 자세한 내용은 State Manager 연결에서의 대상 및 속도 제어 정보 섹션을 참조하세요.

  8. (선택 사항) 출력 옵션에서 명령 출력을 파일에 저장하려면 S3 버킷에 쓰기 활성화 옆의 상자를 선택합니다. 상자에 버킷 및 접두사(폴더) 이름을 입력합니다.

    참고

    데이터를 S3 버킷에 쓰는 기능을 부여하는 S3 권한은 이 작업을 수행하는 IAM 사용자의 권한이 아닌 관리형 노드에 할당된 인스턴스 프로파일의 권한입니다. 자세한 내용은 Systems Manager에 대한 인스턴스 권한 구성 또는 하이브리드 환경을 위한 IAM 서비스 역할 생성을 참조하세요. 또한 지정된 S3 버킷이 다른 AWS 계정에 있는 경우 관리형 노드와 연결된 인스턴스 프로파일 또는 IAM 서비스 역할은 해당 버킷에 쓸 수 있는 권한이 있어야 합니다.

  9. 연결 생성을 선택합니다.