본문 바로가기

AWS/System Manager

Run Command를 사용하여 스크립트를 실행하고 결과를 S3로 Export

안녕하세요. 오늘은 System Manager의 Run Command라는 서비스를 사용하여 Linux 내부에서 보안 스크립트를

실행하고, 실행한 결과 파일을 S3로 Export 해보도록 하겠습니다.

 

Run Command라는 녀석은.. 저도 아직 파악 중입니다만, 약간 앤서블 비슷한 녀석인 것 같아요.

'AWS Instance를 중앙에서 관리할 수 있고 중앙에서 모든 Instance에 동일한 명령을 실행해주는 녀석!'

이라고 제 나름대로 정의를 내려놓고 사용해보고 있습니다.

 

우선 이 Run Command라는 녀석을 쓰기 위해서는 사전 준비가 몇 가지 필요한데요. 바로 진행해보겠습니다.

Test 환경은 Amazon Linux 2를 사용하며, 결과를 저장할 S3 Bucket을 생성했다고 가정합니다.


먼저 Instance에 System Manager를 사용할 수 있는 권한과 S3에 Export 할 수 있도록 적절한 권한을 주어야 합니다.

  • AWS Web Console - IAM - Roles - Create role - Choose use case == EC2

EC2가 사용할 수 있는 Role 생성

 

  • S3FullAccess, AmazonSSMManagedInstanceCore Policy 선택

Create role

 


다음은 위에서 생성한 Role을 EC2 Instance에 Attach(부착) 하도록 하겠습니다.

 

  • AWS Web Console - EC2 - Instances - Select - Actions - Instance settings - Attach/Replace IAM Role

Attach Role

 

이렇게 하면 AWS에서의 사전 준비는 완성입니다.


저는 이후 Instance 내부에 /SecureCheck라는 디렉터리에 스크립트를 위치시켰습니다.
위 스크립트는 실행하게 되면 다음과 같이 스크립트가 실행이 되고, Result Files를 생성합니다.

/SecureCheck/Secure.sh

이러한 과정을 OS 내부에서가 아닌 Run Command를 사용하여 진행하겠습니다.


먼저 System Manager의 Run Command로 이동합니다.

  • AWS Web Console - System Manager - Run Command - Run Command

우측 상단 Run Command 클릭!

 

클릭하게 되면 AWS에서 제공하는 많은 Document가 있는데요 이중에는 앤서블 플레이북, PowerShell 등..
아주 다양하게 있지만 저희는 RunShellScrip를 사용해서 Linux 환경에 명령어를 보내겠습니다.

 

  1. RunShellScript

  2. Command

./Secure.sh
aws s3 cp "/SecureCheck/" s3://BUCKET_NAME/ --recursive --exclude "*" --include "Result*" --storage-class STANDARD

  3. Targets = Choose Instances manChoose instances manually 로도 수동으로 선택하셔도 되지만,
  저는 Instance에 Tag를 Key == SeureShell, Value == Run으로 지정하여 Tag 기반으로 Targeting 했습니다.

  4. Working Derectory == /SecureCheck

 

Run Command



위 s3 명령어에서 궁금증이 있으실 것 같은데요.

--recursive : 이 옵션을 사용하면 지정된 디렉터리 또는 접두사 아래의 모든 파일 또는 객체에 대해 명령이 수행됩니다.
--exclude : 이 옵션을 사용하면 명령에서 지정된 문자열을 제외합니다.
--include : 이 옵션을 사용하면 명령에서 지정된 문자열을 포함합니다.

 

주의할 점은 --exclude와 –include 옵션은 지정된 순서대로 적용됩니다.
즉, --include 옵션 뒤에 --exclude 옵션을 사용하며 Wildcard(*)를 사용하면 모든 문자열이 제외됩니다.


이렇게 설정하시고 실행을 하시면!!!

아래와 같이 Command 성공 여부가 나타나게 됩니다.

 

Run Command Success!!

 

또한, S3 Bucket을 확인해보면 아래와 같이 Result Files가 Export 된 것을 확인하실 수 있습니다.

 

S3에도 Export 성공!

 

 

 

물론 위에서 Test 환경이기에 EC2 Instance의 Role에 불필요하게 많은 권한을 허용해주었는데요,

환경에 따라 특정 Bucket에만 Upload를 할 수 있게 정책을 짜시면 좋을 것 같습니다 ^^


또한, 위에서는 예제로 간단하게 스크립트를 실행하고, 결과 파일을 S3로 Export 했지만,

활용법은 굉장히 무궁무진할 것 같습니다.
예를 들면, 트랜잭션이 적은 야간시간대에 Mysql Dump를 뜨고, Dump파일을 S3로 Export 하여
Local(EBS)에 보관하는 것이 아닌 내구성이 높은 S3에 보관하는 등 많은 활용법이 존재할 것 같습니다.

더더욱 좋은 것은! 이러한 Run Command는 CloudWatch Event를 설정하여 Cron 형식으로도 실행 가능합니다!!

 

그럼 Run Command를 잘 활용하여 인프라 관리자들이 좀 더 편하게 근무하시길 바라며,

이만 글 마치겠습니다.

 

질문은 언제나 환영합니다!!

'AWS > System Manager' 카테고리의 다른 글

Session Manager를 사용하여 OS 내부로 접속하기  (0) 2021.02.17