본문 바로가기
DevOps

서로 다른 EC2 인스턴스간에 연결하기 (feat. Ping)

by 향로 (기억보단 기록을) 2019. 7. 21.
반응형

서로 다른 EC2 인스턴스간에 통신이 필요할때가 있습니다.

  • 앤서블을 통한 전체 명령어 수행
  • 쉘 스크립트 혹은 젠킨스를 통한 명령어 수행

등등 외부에서 ssh 혹은 scp 명령어 수행 등이 필요한 상황입니다.

기본적으로는 해당 EC2의 IP를 보안 그룹에 추가하는 걸로 해결이 됩니다.

다만 이 방식은 IP가 변경 되면 무용지물이 됩니다.

  • 오토 스케일링 그룹 (ASG) 으로 신규 추가된 서버들
  • 빈스톡 (Beanstalk) 으로 신규 추가된 서버들
  • EIP (탄력적 IP) 를 사용하지 않는 서버의 재부팅

이런 경우 매번 보안 그룹에 신규 IP를 추가해야만 합니다.

이 과정이 너무 귀찮으니 다른 해결책을 진행해보겠습니다.

1. 환경

먼저 2개의 EC2 인스턴스가 있다고 가정합니다.

둘은 서로 다른 보안 그룹을 가지고 있습니다.
스펙은 아래와 같습니다.

  • test1 인스턴스
    • 인스턴스명: dwlee-test1
    • private IP: 172.31.26.160
    • 보안그룹 이름: dwlee-test1
    • 보안그룹 코드: sg-03d3595350edf8a5b
  • test2 인스턴스
    • 인스턴스명: dwlee-test2
    • private IP: 172.31.25.54
    • 보안그룹 이름: dwlee-test2
    • 보안그룹 코드: sg-06d8d90d12a832c45

현재는 둘 사이에 ping을 날려보면 서로 응답이 오지 않습니다.

1->2

1

2->1

2

이제 이걸 해결해보겠습니다.

2. 해결

방법은 간단합니다.
나의 보안 그룹이 상대의 보안 그룹을 인바운드로 가지고 있으면 됩니다.

먼저 1번 인스턴스의 보안 그룹으로 이동합니다.

3

보안 그룹 인바운드에 아래와 같이 2번 인스턴스의 보안 그룹 코드를 등록합니다.

4

그리고 2번 인스턴스에는 1번 인스턴스의 보안 그룹 코드를 등록합니다.

5

자 그리고 다시 테스트를 해보면!

1->2

6

2->1

7

정상적으로 서로 통신이 되는 것을 확인할 수 있습니다.

이제는 새로운 인스턴스가 추가되어도 같은 보안 그룹만 가지고 있으면 서로 통신할 수 있습니다.

저는 테스트를 위해 전체 포트를 열었지만, 실제로 사용하실때는 22 (ssh 포트), 3306 (RDS 포트) 등 필요한 포트만 열어서 사용하시면 됩니다.

3. 같은 보안그룹으로 통신하려면?

서로 다른 보안 그룹을 갖고 있을때는 위 처럼 사용하면 되는데, 만약 EC2들이 서로 같은 보안 그룹을 갖고 있다면 어떻게 해야할까요?

위와 비슷하게 Self 참조를 하면 됩니다.

이를테면 A 보안 그룹을 사용하는 EC2들간에 통신이 되어야 한다면 A 보안그룹의 ID를

self1

A 보안그룹의 인바운드에 등록 하면 됩니다.

self2

그럼 해당 보안 그룹을 갖고 있는 EC2들 간에는 서로 통신이 되는 것을 확인할 수 있습니다.

반응형