검색결과 리스트
SSM에 해당되는 글 1건
- 2020.10.14 AWS System Manager / SSM을 이용한, 머신 컨트롤링 스크립트
글
AWS System Manager / SSM을 이용한, 머신 컨트롤링 스크립트
AWS 이용 시, 아마존 리눅스 이미지로 머신을 기동시키면, 몇몇개의 AWS 관련 데몬 및 에이전트가 실행됩니다.
이 때, 가만히 보면 SSM, 즉 simple system manager 라는 에이전트 또한 기동되는데
이 SSM을 이용해, AWS Systems Manager를 통한 일괄제어 방법 중 하나를 소개해드릴까 합니다.
(근데 항상 아마존은 Simple하다, 단순하다, 쉽다 하는데, 막상 까보면 하나도 쉬운거 없던디... 앙몬드만의 생각...)
머신들이 Systems Manager에 관리형 인스턴스로 들어오기 위해서는 몇가지 조건이 있는데,
자세한 페이지는 AWS 백서를 참조해주시면 됩니다. (밑에 밑에..)
docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/setup-instance-profile.html
그 중 코어는 2가지입니다.
(1) (회피불가) 아마존 리눅스로..
(2) 아마존 리눅스 머신의, SSM IAM
- IAM : AmazonSSMManagedInstanceCore
특히 2번이 되어야, EC2 머신이, Systems Manager 관리대상 인스턴스에 등록이 되기 떄문에, Systems Manager에서 머신이 보이지 않는다면, 99.99999% 확률로 IAM 이슈일 가능성이 높습니다. (AWS는 IAM으로 시작해서 IAM으로 끝난다는 말이 있죠..)
그러면, Systems Manager에 등록된 머신들을 컨트롤링 할 때, 람다 혹은 기타 어플리케이션들은, 이 시스템 매니저와의 통신으로, 수많은 머신들을 한꺼번에 제어할 수 있습니다.
이런면에서 보면, Ansible 의 AWS버전 같기도 하네요 :)
밑에는 boto3를 이용한, 파이썬3 -> SystemsManager -> EC2_머신_프로세스 확인을 하는 코드입니다.
현재 상황은, Systems Manager에 Batch 어플리케이션 머신들을 등록하고, 이 어플리케이션이 죽었는지 살았는지를 검사하는 코드와 초간단 아키텍처 입니다. :)
ssm = boto3.client('ssm', region_name="ap-northeast-2",)
command = "ps -ef | grep java | grep -v 'grep'"
instance_id = "AWS의 머신 id가 들어가야합니다!"
# 커맨드로는, 자바 프로세스를 긁어오는 커맨드를 넣어봤습니다.
for 기준정보 in 배치머신_기준정보:
instance_id = 기준정보["머신_id"]
command_response = ssm.send_command(
InstanceIds = [ instance_id ],
DocumentName = "AWS-RunShellScript",
Parameters = {
'commands':[command],
'executionTimeout': ['3600'], },
TimeoutSeconds = 30, )
command_id = command_response['Command']['CommandId']
command_result = ''
for sec in range(10):
time.sleep(1)
command_real_time_status = ssm.get_command_invocation(
CommandId=command_id,
InstanceId = instance_id, )
if (command_real_time_status['Status'] == 'Pending') or (command_real_time_status['Status'] == 'In Progress'):
continue
else:
command_result = command_real_time_status
#print('아웃풋 컨텐츠 : ', command_result['StandardOutputContent'])
break
list_command_result_output = command_result['StandardOutputContent'].split('\n')
list_command_result_output.remove('')
# print("****결과물 정제****")
# print(list_command_result_output)
# print("****************\n\n\n")
'IT > AWS Lambda & Resources Trouble Shooting' 카테고리의 다른 글
boto3 를 이용하여, AWS 로컬스택 아키텍처 구성해보기 (0) | 2020.10.16 |
---|---|
키네시스 샤드 input event driven 인/디코딩 데이터 정제 람다함수 (0) | 2020.10.16 |
AWS Lambda 에서의 웹크롤링 고찰 (0) | 2020.06.07 |
AWS 람다 SAM 배포 75GB 용량 이슈 (0) | 2020.05.21 |
AWS Fan-out 람다를 이용한 Security Group 제어 (0) | 2020.05.21 |