AWS

[AWS Run Command]Run Command로 원격으로 명령어 실행하기

hanrabong 2021. 8. 20. 19:27

 

 

안녕하세요!! 이번 글에서는 System manager에서 Run Command 기능을 사용하여 원격으로 EC2 instance에 접근하여 명령어를 실행 시키려고 합니다.

 

 

˙ 실습을 위한 필요한 조건

  • EC2 instance
  • EC2 instance에 ssmmanagedInstanceCore IAM 역할 부여

 

EC2는 public subnet에 생성해주고 Session manager를 통하여 접근할려고 합니다. Session Manager로 접근하는 방법을 알고 싶으면 밑에 글을 참고해주시면 됩니다.

2021.08.18 - [AWS] - [AWS Session Manager] SSH 없이 Session manager로 EC2 instance에 접속 하기

 

 

 

 

[실습] Run Command를 사용하여 원격으로 nginx 설치하기

EC2 instance에 Run Command로 nginx를 설치하기에 앞서 해당 EC2에 nginx에 안 깔렸다는 사실을 확인해 줍니다. SSH나 Session manger로 해당 EC2 instance에 접속하여 확인을 해줍니다. 

 

 

 

Nginx에 안깔린 것을 확인 한 후 System Manager 서비스에 들어옵니다. 그리고 옆에 바에 있는 메뉴 중 Run Command를 클릭해 줍니다.

 

 

 

 

Run Command를 보면 위와 같이 실행하고 있는 명령과 명령 기록등을 볼 수 있습니다. 여기서 명령 실행을 클릭하여 새로운 명령을 실행할 것입니다. 

 

 

 

명령실행을 클릭면 명령 문서가 나옵니다. 여러가지 명령어들이 많지만 저는 EC2 instance에 명령어를 실행시킬 것이기에 script 키워드로 검색을 했습니다. script 키워드를 검색하면 다음과 같이 명령 유형들이 보여지는데 instance의 OS가 amazon linux2이기에 AWS-RunShellScript를 선택해주었습니다. 자신의 instance 플랫폼 유형과 맞는 명령 유형을 선택하주면 됩니다. 

 

 

 

원하는 명령 유형을 선택하고 명령 파라미터에 실행하고 싶은 Commands를 입력해 줍니다. 명령어를 입력할 때 중요하게 생각했던 것을 -y option입니다. 직접 package를 설치 할 때는 [Y/N]이 나올 때 직접 입력을 해주면 되지만, cli 창도 못보고 원격으로 명령어를 전달할 때에는 timeoue이 나기에 package 설치나 update시에는 -y를 꼭 해주어야 합니다. 밑에 보면 Working directory와 Execution Timeout이 있습니다. Working directory의 경우는 명령어를 실행할 directory를 말하며 Exectuion Timeout은 명령이 실패한 것으로 간주되기 전에 완료하는데 걸리는 시간으로 default는 1시간이고 최대 48시간까지 설정할 수 있습니다.

 

 

 

 

실행할 명령어를 입력했으면 이제 이 명령어를 실행할 EC2 instance를 선택해주면 됩니다. 수동으로 인스턴스 선택을 누르고 명령어를 실행할 인스턴스를 선택해 줍니다. 만약에 EC2 instance는 만들었지만 목록에 나오지 않으면 EC2 IAM 역할을 확인해주면 됩니다.

 

 

 

인스턴스를 선택해주고 밑에 설정을 자신이 원하는 대로 설정을 한 후 명령어를 실행하고 시간이 지나면 명령 상태를 볼 수 있습니다. 명령 상태가 실패일 경우에는 대상 및 출력에 인스턴스 ID를 클릭하여 인스턴스에서 왜 실패가 일어났는지를 확인 할 수 있습니다. 

 

 

 

 

성공 명령어를 확인 한 후 해당 EC2 instance에 들어가서 처음에 쳤던 명령어를 실행시키면 nginx에 해당 서버에 다운이 되어 상태를 확인할 수 있습니다.

 

 

 

오늘은 위와 같이 EC2 instance에 직접 명령어를 입력하지 않고 Run Command를 사용하여  원격으로 명령어를 실행시켜 보았습니다. 보통 설치보다는 원격으로 패키지를 업데이트 시키거나 다수의 인스턴스에 한 번에 명령어를 실행하기 위해 많이 사용한다고 합니다. 

 

 

※잘못된 내용이 있거나 궁금한 내용이 있으면 언제든 댓글 달아주세요!!