기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Step Functions에서 AWS Systems Manager 자동화 작업을 동기적으로 실행
작성자: Elie El khoury(AWS)
환경: 프로덕션 | 기술: 서버리스 DevOps, 최종 사용자 컴퓨팅, 운영 | |
AWS 서비스: AWS Step Functions, AWS Systems Manager |
요약
이 패턴은 AWS Step Functions 과 통합하는 방법을 설명합니다 AWS Systems Manager. AWS SDK 서비스 통합을 사용하여 상태 머신 워크플로의 작업 토큰으로 Systems Manager startAutomationExecutionAPI를 호출하고 성공 또는 실패 호출과 함께 토큰이 반환될 때까지 일시 중지됩니다. 통합을 보여주기 위해 이 패턴은 AWS-RunShellScript
or 문서 주변에 자동화 문서 (런북) 래퍼를 구현하고 이를 사용하여 동기적으로 or를 AWS-RunPowerShellScript
호출합니다. .waitForTaskToken
AWS-RunShellScript
AWS-RunPowerShellScript
Step AWS Functions의 SDK 서비스 통합에 대한 자세한 내용은 AWS Step Functions 개발자 안내서를 참조하십시오.
Step Functions는 서비스를 사용하여 AWS 분산 애플리케이션을 구축하고, IT 및 비즈니스 프로세스를 자동화하고, 데이터 및 기계 학습 파이프라인을 구축하는 데 사용할 수 있는 코드가 적은 시각적 워크플로 서비스입니다. 워크플로는 장애, 재시도, 병렬화, 서비스 통합 및 관찰성을 관리하므로 더 중요한 비즈니스 로직에 집중할 수 있습니다.
자동화는 아마존 Elastic Compute Cloud (Amazon EC2), 아마존 관계형 데이터베이스 서비스 (Amazon RDS), 아마존 Redshift, 아마존 심플 스토리지 서비스 (Amazon S3) 와 AWS 서비스 같은 일반적인 유지 관리, 배포 및 수정 작업을 간소화합니다. AWS Systems Manager Automation을 사용하면 자동화의 동시성을 세부적으로 제어할 수 있습니다. 예를 들어 동시에 대상으로 지정할 리소스 수와 자동화가 중지되기 전에 발생할 수 있는 오류 수를 지정할 수 있습니다.
런북 단계, 파라미터 및 예제를 포함한 구현 세부 정보는 추가 정보 섹션을 참조하십시오.
사전 조건 및 제한 사항
사전 조건
활성 계정 AWS
AWS Identity and Access Management Step Functions 및 Systems Manager에 액세스할 수 있는 (IAM) 권한
인스턴스에 Systems Manager 에이전트 (SSM 에이전트) 가 설치된 EC2 인스턴스
런북을 실행하려는 인스턴스에 연결된 Systems Manager용 IAM 인스턴스 프로파일
다음과 같은 IAM 권한 (최소 권한 원칙을 따름) 을 가진 Step Functions 역할:
{ "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": "*" }
제품 버전
SSM 문서 스키마 버전 0.3 이상
SSM Agent 버전 2.3.672.0 이상
아키텍처
대상 기술 스택
AWS Step Functions
AWS Systems Manager 자동화
대상 아키텍처
자동화 및 규모 조정
이 패턴은 여러 인스턴스에 Runbook을 배포하는 데 사용할 수 있는 AWS CloudFormation 템플릿을 제공합니다. (Step GitHub Functions 및 Systems Manager 구현
리포지토리를 참조하십시오.)
도구
AWS 서비스
AWS CloudFormation AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 라이프사이클 AWS 계정 전반과 지역에 걸쳐 리소스를 관리할 수 있도록 도와줍니다.
AWS Identity and Access Management (IAM) 을 사용하면 리소스 인증 및 사용 권한을 부여받은 사용자를 제어하여 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
AWS Step Functions AWS Lambda 기능 및 기타 AWS 서비스 기능을 결합하여 비즈니스에 중요한 애플리케이션을 구축하는 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.
AWS Systems Manager은 AWS 클라우드에서 실행되는 애플리케이션 및 인프라를 관리하는 데 도움을 줍니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제를 감지하고 해결하는 시간을 단축하며, 리소스를 대규모로 안전하게 관리할 수 있도록 지원합니다. AWS
code
이 패턴의 코드는 Step GitHub Functions 및 Systems Manager 구현
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
CloudFormation 템플릿을 다운로드하십시오. | GitHub 리포지토리 | AWS DevOps |
런북을 생성하십시오. | 에 로그인하여 AWS Management ConsoleAWS CloudFormation 콘솔을 CloudFormation 템플릿은 세 가지 리소스를 배포합니다.
| AWS DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
테스트 상태 머신을 생성하십시오. | AWS Step Functions 개발자 안내서의 지침에 따라 스테이트 머신을 생성하고 실행하십시오. 정의를 위해 다음 코드를 사용하세요. 계정에 있는 유효한 Systems Manager 활성화 인스턴스의 ID로
이 코드는 런북을 직접 호출하여 Systems Manager Automation에 대한
작업은 대신
| AWS DevOps |
상태 머신의 IAM 역할을 업데이트합니다. | 이전 단계에서는 상태 머신을 위한 전용 IAM 역할을 자동으로 생성합니다. 하지만 런북 직접 호출 권한은 부여하지 않습니다. 다음 권한을 추가하여 역할을 업데이트합니다.
| AWS DevOps |
동기 직접 호출을 검증합니다. | 상태 머신을 실행하여 Step Functions와 Systems Manager Automation 간의 동기 직접 호출을 검증합니다. 샘플 출력은 추가 정보 섹션을 참조하십시오. | AWS DevOps |
관련 리소스
시작하기 AWS Step Functions (AWS Step Functions 개발자 안내서)
태스크 토큰이 포함된 콜백 대기 (AWS Step Functions 개발자 가이드, 서비스 통합 패턴)
send_task_success
및 send_task_failure API 직접 호출(Boto3 설명서) AWS Systems Manager 자동화 (AWS Systems Manager 사용 설명서)
추가 정보
구현 세부 정보
이 패턴은 두 개의 Systems Manager 런북을 배포하는 CloudFormation 템플릿을 제공합니다.
SfnRunCommandByInstanceIds
인스턴스 ID를 사용하여AWS-RunShellScript
orAWS-RunPowerShellScript
명령을 실행합니다.SfnRunCommandByTargets
대상을 사용하여AWS-RunShellScript
orAWS-RunPowerShellScript
명령을 실행합니다.
각 런북은 Step Functions의 .waitForTaskToken
옵션을 사용할 때 동기 호출을 달성하기 위한 네 단계를 구현합니다.
단계 | 작업 | 설명 |
1 |
|
|
2 |
| 여러 입력을 받아 |
3 |
| 2단계가 중단되거나 취소될 때 실행됩니다. Step Functions send_task_failure |
4 |
| 2단계가 성공하면 실행됩니다. 상태 머신이 전달한 토큰을 입력으로 받아들이는 Step Functions send_task_success |
런북 파라미터
SfnRunCommandByInstanceIds
런북:
파라미터 이름 | Type | 선택 또는 필수 | 설명 |
| String | 필수 |
|
| Integer | 선택 사항 | 명령이 인스턴스의 SSM 에이전트에 전달될 때까지 기다리는 시간 (초) 입니다. 이 파라미터의 최소값은 30 (0.5분) 이고 최대값은 2592000 (720시간) 입니다. |
| String | 선택 사항 | 명령이 실패로 간주되기 전에 완료해야 할 시간(초). 기본값은 3600 (1시간) 입니다. 최댓값은 172,800(48시간)입니다. |
| String | 선택 사항 | 인스턴스 상의 작업 디렉터리에 대한 경로. |
| StringList | 필수 | 실행할 쉘 스크립트 또는 명령. |
| StringList | 필수 | 명령을 실행하려고 하는 인스턴스의 ID. |
| String | 필수 | 콜백 응답에 사용할 작업 토토큰. |
SfnRunCommandByTargets
런북:
이름 | Type | 선택 또는 필수 | 설명 |
| String | 필수 |
|
| Integer | 선택 사항 | 명령이 인스턴스의 SSM 에이전트에 전달될 때까지 기다리는 시간 (초) 입니다. 이 파라미터의 최소값은 30 (0.5분) 이고 최대값은 2592000 (720시간) 입니다. |
| Integer | 선택 사항 | 명령이 실패로 간주되기 전에 완료해야 할 시간(초). 기본값은 3600 (1시간) 입니다. 최댓값은 172,800(48시간)입니다. |
| String | 선택 사항 | 인스턴스 상의 작업 디렉터리에 대한 경로. |
| StringList | 필수 | 실행할 쉘 스크립트 또는 명령. |
| MapList | 필수 | 지정한 키,값 쌍을 사용하여 인스턴스를 식별하는 검색 기준 배열. 예: |
| String | 필수 | 콜백 응답에 사용할 작업 토토큰. |
샘플 출력
다음 테이블에는 step 함수의 샘플 출력이 나와 있습니다. 이는 5단계(TaskSubmitted
)와 6단계(TaskSucceeded
) 사이의 총 실행 시간이 100초 이상임을 보여줍니다. 이는 step 함수가 워크플로의 다음 작업으로 이동하기 전에 sleep 100
명령이 완료될 때까지 기다렸음을 보여줍니다.
ID | Type | 단계 | 리소스 | 경과 시간(밀리 초) | 타임스탬프 |
1 |
| - | 0 | 2022년 3월 11일 오후 02:50:34. 303 | |
2 |
|
| - | 40 | 2022년 3월 11일 오후 02:50:34. 343 |
3 |
|
| - | 40 | 2022년 3월 11일 오후 02:50:34. 343 |
4 |
|
| - | 15.4 | 2022년 3월 11일 오후 02:50:34. 457 |
5 |
|
| - | 657 | 2022년 3월 11일 오후 02:50:34. 960 |
6 |
|
| - | 103835 | 2022년 3월 11일 오후 02:52:18. 138 |
7 |
|
| - | 103860 | 2022년 3월 11일 오후 02:52:18. 163 |
8 |
| - | 103897 | 2022년 3월 11일 오후 02:52:18. 200 |