보통 AWS를 사용하면 같은 vpc 내에 같은 region, 다른 subnet에서 작업 하는 경우에는
인스턴스 간의 통신에 제약이 크게 없는 편이다.
vpc가 같으면, 서로 다른 subnet이라 할지라도
예를들면 인스턴스 A는 Private, 인스턴스 B는 Public subnet을 사용한다는 가정에서
A <-> B끼리 통신이나 커맨드를 주고받는 방법은 NAT를 이용하던 proxy server를 이용하던,
여러가지 방법이 있다.
문제는 vpc가 다르고, 리전도 다르고, 당연하게 subnet도 다른 경우인데
이런 경우에는 A 리전의 A vpc의 인스턴스와 B 리전의 B vpc의 인스턴스가
통신하기 위해선 여러가지 방법이 필요하게 된다.
간단하게 나열해보자면,
1. vpc 간 통신을 위한 vpc peering 설정과 routing table 수정
2. 보안그룹 수정
등의 설정을 해주면 위와 같은 상황에서도 통신이 가능하게 된다.
내가 운영하는 서비스의 경우 위의 상황에서 몇가지 제약이 더 걸려 있다.
예를 들면 22번 port를 사용할 수 없다, 모든 inbound가 차단된다. 등이 있었기에
ssh나 scp 같은 정말 좋은 기능들을 사용할 수 없었다.
이는 곧 인스턴스간 파일이나 커맨드를 실행함에 있어 엄청난 제약이 됐다.
예를 들면, A 인스턴스에서 B 인스턴스로 cat 명령을 보내야하는데,
ssh가 안되기 때문에 명령을 보낼 수가 없었다.
그래서 AWS에 이런 흔한 기능이 없지는 않을 것 같아 찾아보게 되었고
run command 기능을 찾게 되었다.
사용법에 대해 간단하게 알아보자.
1. 사용법
먼저 콘솔내에 메뉴는 다음에 위치하고 있다.
AWS Systems Manager -> 노드 도구 -> 명령 실행
그리고 명령 문서에 검색을 통해 여러가지 동작을 수행할 수 있는데,
나 같은 경우 커맨드를 전송하고 싶었기 때문에 RunShellScript를 사용했다.
좀 더 밑으로 내리면 '대상' 항목이 있고 여기서 커맨드를 전송할 인스턴스를 선택할 수 있다.
지금은 실행해둔 인스턴스가 없는 테스트 계정이라 안나오긴 하는데,
여기서 원하는 인스턴스를 선택해서 커맨드를 보낼 대상을 설정할 수 있다.
마지막으로 명령 파라미터 항목에서
원하는 커맨드를 작성하면 된다.
그 외 밑으로 내리면 여러 메뉴들이 더 있는데,
잘 확인해서 필요한 부분을 편집해 사용하면 된다.
2. 스크립트로 사용하기
글을 쓰다보니깐, 이미 예전에 SSM에 대한 설명을 해둔게 있었다.
해당 글에는 그냥 이런 서비스가 있다 정도만 설명을 해둔거 같아서,
글을 지울까 하다가, 그냥 추가적인 내용을 더 적어서 다시 올리기로 했다.
1번에 사용법에 대한 부분을 스크립트로 만들면 다음과 같다.
AWS_CMD_ID=$(aws ssm send-command \ --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" \ --comment "$cmdType" \ --parameters commands="$RUN_CMD",executionTimeout="172800" \ --query "Command.CommandId" --output text \ --output text) |
$instance_id : 대상의 인스턴스 ID
$cmdType : 명령에 대한 구분을 주기 위한 주석정도라고 보면 된다. 임의로 설정하면 된다.
$RUN_CMD : 실제 나갈 커맨드를 넣어두면 된다. 위를 예시로 하면 cat /etc/passwd
이런식으로 스크립트를 작성하고 실행하면,
cli를 통해 run command를 서비스를 사용할 수 있다.
물론 사용하다보면 ', " 과 같은 따옴표에 굉장히 민감해서 사용하는데 불편함이 많다.
이런 경우에는 또 json 파일을 만들어서 보내면되는데,
이건 해보길 바란다.
run command 서비스의 장점은
같은 계정이라면 어떤 인프라이던 인스턴스간 명령 실행이 가능해지는 큰 장점이 있지만,
리전간 통신의 경우 느린 속도, output에 대한 최대 출력 값 제한, 장기 커맨드의 경우 3일 정도까지만 유지가 되는 단점도 존재한다.
'Cloud > AWS' 카테고리의 다른 글
S3 간 파일 업로드 시 옵션값 설정에 따른 속도차이 계산(S3 SYNC 성능 개선) (0) | 2024.09.26 |
---|---|
인스턴스에 S3 Mount 하여 사용하기 (0) | 2024.07.02 |
AWS SNS 만들고, 구독 하기(CLI 사용) (0) | 2024.05.27 |
CloudWatch 사용하기 (0) | 2024.04.17 |
Application Load Balancer에 대한 고정 세션(Sticky) (0) | 2024.04.02 |