Category: EC2 Systems Manager


EC2 Run Command와 CloudWatch Events 함께 사용해 보기

오늘은 EC2 Run Command (대규모 원격 인스턴스 관리 )와 CloudWatch Events (AWS 자원 변경에 대한 실시간 추적 기능) 기능을 함께 사용하는 방법에 대해 알아보겠습니다.

  • EC2 Run CommandEC2 Systems Manager의 일부입니다. EC2 인스턴스 및 기존 사내 서버를 함께 안정적으로 대량 통제 및 선택적으로 운용할 수 있습니다. Windows 및 Linux에서 스크립트 실행, 소프트웨어 설치, 통계 및 로그 파일 수집 및 패치 등의 관리 작업을 수행 할 수 있습니다.
  • CloudWatch Events를 사용하면 거의 실시간으로 AWS 자원의 변경 사항을 추적 할 수 있습니다. AWS Lambda 함수, Amazon Kinesis 스트림, Amazon SNS 토픽, 내부 EC2 인스턴스 및 EBS를 포함하여 원하는 곳으로 변경 내역을 쉽게 보낼 수 있는 이벤트 스트림을 만들 수 있습니다.

함께 사용해 보기
두 가지 서비스를 함께 동작할 수 있는 아이디어를 생각해 보겠습니다. EC2 Run Command를 사용하여 EC2 인스턴스 또는 사내 서버에서 작업을 수행하는 CloudWatch 이벤트 규칙을 만들 수 있고, 다음과 같은 활용 사례가 있습니다.

  • 최종 로그 수집 – 종료될 인스턴스에서 애플리케이션이나 시스템 로그를 수집합니다 (수동 또는 오토 스케일링을 통해 생성된 인스턴스를 종료하게 될때)
  • 오류 로그 상태 수집 – 애플리케이션 충돌 또는 보안 문제 발생 후 로그를 수집합니다.
  • 인스턴스 설정 – 인스턴스가 시작된 후, 애플리케이션을 다운로드 및 설치한 뒤에 파라미터 및 시스템 구성을 설정하고 프로세스를 시작할 수 있습니다.
  • 구성 업데이트 – S3에서 구성 파일을 변경하면, 적용 가능한 인스턴스 (태그 설정)에 설치할 수 있습니다. 예를 들어,  특정 태깅을 한 인스턴스 그룹에 Apache 웹 서버 구성 파일을 업데이트 하여 설치 한 후, 웹 서버를 다시 시작하여 변경 사항을 적용 할 수 있습니다. 또는 AWS IP 주소 범위가 업데이트 될 때마다 인스턴스 방화벽을 업데이트 하는 것도 가능합니다.
  • EBS 스냅샷 테스트 및 오류 확인 – 새로운 스냅샷을 만든 후 테스트 인스턴스에 마운트하고, 파일 시스템에서 오류를 확인할 수 있습니다.
  • 인스턴스 부하 조정 – 인스턴스가 시작되거나 종료 될 때마다 내부 추적 정보를 업데이트하거나 작업 부하의 균형을 조정할 수 있도록 다른 사람에게 알릴 수 있습니다.

직접 해보기
오토 스케일링을 통해 새로운 인스턴스를 오토 스케일링 그룹에 추가 할 때마다 특정 PowerShell 스크립트를 실행하는 기능을 만들어 보겠습니다.

먼저 CloudWatch 이벤트 콘솔을 열고 Create rule를 클릭합니다.

내 이벤트 소스를 자동 자동 확장 그룹 (AS-Main-1)으로 구성하고 EC2 인스턴스가 성공적으로 시작될 때, 기능을 수행하겠다고 표시합니다.

이제 타겟을 설정합니다. SSM 실행 명령을 선택하고 AWS-RunShellScript 문서를 선택한 다음, 자동 확장 그룹에서 태그가 지정된 인스턴스에서 명령을 실행하도록 지정합니다.

그런 다음 Configure details을 클릭하고 내 규칙에 이름과 설명을 입력 한 다음 Create rule를 클릭합니다.

모든 것이 설정되면 스케일 아웃 작업의 결과로 시작된 각 인스턴스에서 명령 service httpd start이 실행됩니다.

정식 출시
본 새로운 기능은 현재 사용할 수 있으며 지금 바로 사용할 수 있습니다.

Jeff;

이 글은 EC2 Run Command is Now a CloudWatch Events Target의 한국어 번역입니다.

EC2 Systems Manager – EC2 및 온-프레미스 서버 함께 관리하기

지난 해 EC2 Run Command 를 소개하고 EC2 인스턴스와 하이브리드 및 교차 클라우드 환경에서 원격 인스턴스 관리를 대규모로 수행하는 방법을 보여드렸습니다. 이 과정에서 리눅스 인스턴스에 대한 지원을 추가해 EC2 Run Command를 광범위하게 적용할 수 있고 매우 유용한 관리 도구로 만들었습니다.

가족이 되신 것을 환영합니다
WernerAWS re:Invent에서 EC2 System Manager를 발표했고 드디어 이것에 대해 말할 수 있게 되었습니다!

EC2 Run Command의 향상된 버전과, 여덟 개의 유용한 기능이 포함된 새로운 관리 서비스입니다. EC2 Run Command 처럼 윈도우, 리눅스를 실행하는 서비스와 인스턴스로 이루어진 교차 클라우드 환경 및 하이브리드 환경을 지원합니다. AWS Management Console을 열고 관리할 인스턴스를 선택한 다음 수행 하고싶은 작업을 정의하기만 하면 됩니다(API와 CLI에서도 접근할 수 있습니다).

다음은 개선된 기능과 새로운 기능에 대한 개요입니다:

  • Run Command – 이제 명령 실행 속도를 제어하고 에러 비율이 높아졌을 때 명령 실행을 중지할 수 있습니다.
  • State Manager – 규칙적인 간격으로 적용되는 정책을 통해 정의된 시스템 설정을 유지합니다.
  • Parameter Store – 라이센스 키, 비밀번호, 사용자 목록 및 다른 값들을 위한 (암호화 가능한)중앙 집중 저장소를 제공합니다.
  • Maintenance Window – 업데이트 설치와 기타 시스템 유지 관리를 위한 기간을 지정하세요.
  • Software Inventory – 각 인스턴스에서 자세한 소프트웨어 사항들과 사용자가 정의한 추가사항까지 포함한 설정 목록을 수집합니다.
  • AWS Config Integration – 새로운 Software Inventory 기능과 함께 AWS Config는 software inventory의 변화를 인스턴스에 기록할 수 있습니다.
  • Patch Management – 인스턴스의 패치 과정을 단순화하고 자동화합니다.
  • Automation – AMI 구축과 기타 반복적인 AMI 관련 작업을 단순화합니다.

각각을 살펴봅시다..

Run Command 개선 사항

이제 동시에 실행되는 명령의 숫자를 제어할 수 있습니다. 명령이 내부 업데이트나 서버 패치와 같이 제한적인 공유 리소스들을 참조하고, 너무 많은 리퀘스트로 인한 오버로딩을 피하고 싶은 상황에서 유용합니다.

이 기능은 현재 CLI와 API로 접근할 수 있습니다. 다음은 CLI에서 동시실행을 2로 제한하는 예제입니다:

Bash
$ aws ssm send-command \
  --instance-ids "i-023c301591e6651ea" "i-03cf0fc05ec82a30b" "i-09e4ed09e540caca0" "i-0f6d1fe27dc064099" \
  --document-name "AWS-RunShellScript" \
  --comment "Run a shell script or specify the commands to run." \
  --parameters commands="date" \
  --timeout-seconds 600 --output-s3-bucket-name "jbarr-data" \
  --region us-east-1 --max-concurrency 2

다음은 –instance-ids 대신 –targets를 지정하여 태그와 태그 값에 의해 작동하는 흥미로운 변형 예제입니다.

Bash
$ aws ssm send-command \
  --targets "Key=tag:Mode,Values=Production" ... 

최대 에러 수 또는 에러 비율을 지정하는 옵션으로 에러를 반환하면 명령 실행을 멈출 수 있습니다:

Bash
$ aws ssm send-command --max-errors 5 ... 
$ aws ssm send-command --max-errors 5% ...

State Manager

State Manager는 문서를 따라 인스턴스를 정의된 상태로 유지하도록 도와줍니다. 문서를 만들어 타겟 인스턴스 집합과 연결한 다음, 문서를 실행해야 하는 시간과 빈도를 지정하기 위한 연관성을 생성합니다. 다음은 요일 파일의 메세지를 업데이트하는 문서입니다.

그리고 연관성은 이와 같습니다(태그를 사용하기 때문에 현재 인스턴스 및 같은 방식으로 태그된 나중에 만들어질 다른 인스턴스에도 적용됩니다):

태그를 사용해서 타겟을 지정하면 미래에도 사용할 수 있으며 동적 오토 스케일 환경에서도 기대했던 대로 작동하게 합니다. 모든 연관성을 볼 수 있으며 새로운 연관성을 선택하고 Apply Association Now를 클릭해 실행할 수 있습니다.

Parameter Store

이 기능은 라이센스 키, 비밀번호 및 인스턴스에 배포하려는 기타 데이터의 저장 및 관리를 단순화합니다. 각 매개변수는 형(문자열, 문자열 리스트, 보안 문자열)이 지정되어 있고 암호화된 형태로 저장할 수 있습니다. 다음은 매개변수를 생성하는 방법입니다:

다음은 커맨드에서 매개변수를 참조하는 방법입니다:

Maintenance Window

이 기능은 업데이트 설치와 기타 시스템 유지관리를 위한 시간을 지정할 수 있게 합니다. 다음은 매 주 토요일에 4시간동안 열리는 유지 관리 기간을 생성하는 방법입니다:

창을 생성한 후에는 인스턴스 Id 또는 태그로 창에 인스턴스 집합을 할당해야 합니다:

그리고 나서 유지 관리 기간 동안 수행할 작업을 등록해야 합니다. 예를 들어 리눅스 쉘 스크립트를 실행할 수 있습니다:

Software Inventory

이 기능은 소프트웨어와 인스턴스 집합의 설정에 대한 정보를 수집합니다. 이 정보에 접근하기 위해 Managed Instance와 Setup Inventory를 클릭합니다:

인벤토리를 설정하면 AWS 소유 문서와 인스턴스 집합 간에 연관성이 생깁니다. 타겟을 선택하고 일정을 설정하고 목록화 할 항목의 유형을 확인한 다음 Setup Inventory를 클릭하기만 하세요:

인벤토리가 실행된 후에는 인스턴스를 선택하고 인벤토리를 클릭해서 결과를 관찰할 수 있습니다:

더 분석하기 위해서 결과를 필터링할 수 있습니다. 예를 들어 개발 도구와 라이브러리만 보기 위해 AWS 요소 목록을 필터링 할 수 있습니다:

모든 관리 인스턴스에서 인벤토리 기반 쿼리를 실행할 수 있습니다. 다음은 4.6 이전 버전의 .NET을 실행하고 있는 Windows Server 2012 R2 인스턴스를 찾는 방법입니다:

AWS Config Integration

인벤토리의 결과는 AWS Config까지 연결되어 어플리케이션, AWS 요소, 인스턴스 정보, 네트워크 설정, Windows 업데이트의 변화를 지속적으로 추적합니다. 인스턴스 Config 타임라인 위에 있는 Managed instance information을 클릭해 이 정보에 접근할 수 있습니다:

하단의 세줄은 인벤토리 정보로 이어집니다. 다음은 네트워크 설정입니다:

Patch Management

이 기능은 Windows 인스턴스에 있는 운영체제를 최신으로 유지하게 도와줍니다. 지정한 유지관리 기간 동안 패치를 적용하고 기준을 준수하여 수행됩니다. 기준은 분류와 심각도에 따라 패치를 자동으로 승인하는 규칙과 승인 또는 거부할 명시적인 패치 목록을 지정합니다.

다음은 저의 기준입니다:

각 기준은 하나 또는 다수의 패치 그룹에 적용될 수 있습니다. 패치그룹에 들어있는 인스턴스는 Patch Group 태그가 있습니다. 저는 그룹에 Win2016라는 이름을 붙였습니다:

그리고 값을 기준과 연결했습니다:

다음 단계에서는 AWS-ApplyPatchBaseline 문서를 사용해 유지 관리 기간동안 패치의 적용을 조정합니다:

Managed Instances 목록으로 돌아가서 한 쌍의 필터를 사용해 패치가 필요한 인스턴스를 찾을 수 있습니다:

Automation

마지막이지만 앞의 기능 못지않게 중요한 Automation 기능은 일반적인 AMI 구축과 업데이트 작업을 간소화합니다. 예를 들어 AWS-UpdateLinuxAmi 문서를 사용해 매 달마다 새 Amazon Linux AMI를 만들 수 있습니다:

다음은 이 자동화가 실행되었을 때 일어나는 일을 보여줍니다:

정식 출시
위에서 설명한 EC2 Systems Manager의 모든 기능을 지금 무료로 사용할 수 있습니다. 당신이 관리하는 리소스에 대해서만 비용을 지불합니다.

– Jeff;

이 글은 EC2 Systems Manager – Configure & Manage EC2 and On-Premises Systems의 한국어 번역으로 AWSKRUG 블로그 번역모임의 이상록님께서 작성해 주셨습니다. 만약 AWS 영문 공식 블로그를 한국어로 소개하시고 싶으신 분은 언제든지 번역 공헌을 해 주실 수 있습니다.