Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 8개 있습니다.)
개발 환경 구성: 395. Azure Web App의 이벤트 로그를 확인하는 방법
; https://www.sysnet.pe.kr/2/0/11683

디버깅 기술: 124. .NET Core 웹 앱을 호스팅하는 Azure App Services의 프로세스 메모리 덤프 및 windbg 분석 개요
; https://www.sysnet.pe.kr/2/0/11839

Java: 21. Azure Web App Service에 배포된 Java 프로세스의 메모리 및 힙(Heap) 덤프 뜨는 방법
; https://www.sysnet.pe.kr/2/0/12685

디버깅 기술: 180. Azure - Web App의 비정상 종료 시 남겨지는 로그 확인
; https://www.sysnet.pe.kr/2/0/12692

개발 환경 구성: 647. Azure - scale-out 상태의 App Service에서 특정 인스턴스에 요청을 보내는 방법
; https://www.sysnet.pe.kr/2/0/13098

개발 환경 구성: 649. Azure - 비주얼 스튜디오를 이용한 AppService 원격 디버그 방법
; https://www.sysnet.pe.kr/2/0/13164

개발 환경 구성: 650. Azure - "scm" 프로세스와 엮인 서비스 모음
; https://www.sysnet.pe.kr/2/0/13165

개발 환경 구성: 737. Azure Web App에서 Scale-out으로 늘어난 리눅스 인스턴스에 SSH 접속하는 방법
; https://www.sysnet.pe.kr/2/0/13833




Azure Web App에서 Scale-out으로 늘어난 리눅스 인스턴스에 SSH 접속하는 방법

이상하군요, Windows 운영체제의 Web App에서는 Kudu 콘솔 화면에 인스턴스를 선택하는 기능이 있는데요,

azure_app_service_instance_2.png

리눅스 운영체제의 Web App에서는 저 화면의 우측 상단에 있는 Instance 선택 기능이 없습니다. 게다가 Settings / "Development Tools" / "SSH" 메뉴에서도 도대체 어떤 인스턴스로 접속이 된 것인지 아무런 표시가 없는데요, 음... ^^; 왜 이걸 UI에 두지 않았는지 이유를 알 수가 없군요.

재미있는 건, 이에 대해 검색해 봐도 질문 자체가 없습니다. 대부분의 경우 Linux VM인 경우에 대한 질문이고, 공식 문서도 scale-out으로 늘어난 인스턴스의 개별 접속은 없고 단일 인스턴스에 대한 설명만 있습니다.

Open an SSH session to a container in Azure App Service
; https://learn.microsoft.com/en-us/azure/app-service/configure-linux-open-ssh-session?pivots=container-linux

비록 관련은 없지만, 그나마 방법을 아래의 글을 통해 알 수는 있었습니다.

Azure App Service: How to connect to the Kudu site of a specific instance
; https://learn.microsoft.com/ko-kr/archive/blogs/kaushal/azure-app-service-how-to-connect-to-the-kudu-site-of-a-specific-instance

위의 글을 Web App에 적용해 볼까요? ^^ 이를 위해 우선 Azure Resource Explorer를 방문해야 합니다.

Azure Resource Explorer (Preview) 
; https://resources.azure.com/

이후, 왼쪽의 subscriptions 루트 노드에서 대상이 되는 WebApp을 찾아 들어가면 되는데, 그 과정이 복잡하므로 "Search"에서 해당 웹 앱의 이름을 입력하는 것이 좋습니다.

ssh_multiple_web_app_in_azure_1.png

위의 화면에도 나오듯이 이름에 해당하는 하위 노드로 2개 정도의 검색 결과가 나오는데요,

  • ASP-pywebappgroup-be88(Microsoft.Web/serverFarms)
  • pywebapp(Microsoft.Web/sites)

둘 중에서 "Microsoft.Web/sites"로 나오는 것을 선택하면 아래의 트리로 쭉 펼쳐질 것입니다.

"subscriptions" 
    + [subscription_name] 
        + "resourceGroups" 
            + [webapp_resource_group_name]
                + "providers" 
                    + "Microsoft.Web" 
                        + "sites" 
                            + [webapp_name]

그럼 저 "[webapp_name]"의 하위에 있는 "instances"를 펼치면, (예를 들어 2개의 scale-out 인스턴스를 설정한 경우) 아래와 같이 2개의 항목이 나오게 됩니다.

ssh_multiple_web_app_in_azure_2.png

우측 패널에 보면 id로 구분된 2개의 항목이 나오는데요, 그 각각의 "consoleUrl"이 바로 SSH 접속 주소입니다. URL 형식을 보면 대충 아래와 같은데요,

https://[webapp_default_domain_name]/webssh/host?instance=2a8f...[생략]...49f1

Settings / "Development Tools" / "SSH" 접속으로 들어간 것은 저 주소에서 "instance"만 없는 형식에 해당합니다.

https://[webapp_default_domain_name]/webssh/host

다시 말해, 그냥 /webssh/host로 접속하면 둘 중의 하나에 특정 ARRAffinity가 적용돼 접속이 되는 걸로 예측이 됩니다.

반면, ?instance= 쿼리 스트링에 값을 주면 바로 그 인스턴스로 SSH 접속이 가능하게 됩니다. 실제로 아래는 제가 실습한 2개의 인스턴스로 SSH 화면을 들어가 실행해 본 것입니다.

# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
169.254.129.4   pywebapp_d93d716f65

# hostname
pywebapp_d93d716f65

# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
169.254.129.4   pywebapp_6f0cd84370

# hostname
pywebapp_6f0cd84370

비록 169.254.129.4로 2개 인스턴스의 IP가 같긴 하지만 저건 아마도... 가령 다른 머신에서 뜬 컨테이너의 내부 IP가 같은 식이라고 보면 될 것 같습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/29/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 121  122  123  124  125  126  127  128  129  130  131  [132]  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
1755정성태9/22/201434275오류 유형: 241. Unity Web Player를 설치해도 여전히 설치하라는 화면이 나오는 경우 [4]
1754정성태9/22/201424609VC++: 80. 내 컴퓨터에서 C++ AMP 코드가 실행이 될까요? [1]
1753정성태9/22/201420604오류 유형: 240. Lync로 세미나 참여 시 소리만 들리지 않는 경우 [1]
1752정성태9/21/201441067Windows: 100. 윈도우 8 - RDP 연결을 이용해 VNC처럼 사용자 로그온 화면을 공유하는 방법 [5]
1751정성태9/20/201438933.NET Framework: 464. 프로세스 간 통신 시 소켓 필요 없이 간단하게 Pipe를 열어 통신하는 방법 [1]파일 다운로드1
1750정성태9/20/201423828.NET Framework: 463. PInvoke 호출을 이용한 비동기 파일 작업파일 다운로드1
1749정성태9/20/201423730.NET Framework: 462. 커널 객체를 위한 null DACL 생성 방법파일 다운로드1
1748정성태9/19/201425379개발 환경 구성: 238. [Synergy] 여러 컴퓨터에서 키보드, 마우스 공유
1747정성태9/19/201428429오류 유형: 239. psexec 실행 오류 - The system cannot find the file specified.
1746정성태9/18/201426099.NET Framework: 461. .NET EXE 파일을 닷넷 프레임워크 버전에 상관없이 실행할 수 있을까요? - 두 번째 이야기 [6]파일 다운로드1
1745정성태9/17/201423034개발 환경 구성: 237. 리눅스 Integration Services 버전 업그레이드 하는 방법 [1]
1744정성태9/17/201431052.NET Framework: 460. GetTickCount / GetTickCount64와 0x7FFE0000 주솟값 [4]파일 다운로드1
1743정성태9/16/201420985오류 유형: 238. 설치 오류 - Failed to get size of pseudo bundle
1742정성태8/27/201426958개발 환경 구성: 236. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법 [2]
1741정성태8/26/201421332.NET Framework: 459. GetModuleHandleEx로 알아보는 .NET 메서드의 DLL 모듈 관계파일 다운로드1
1740정성태8/25/201432502.NET Framework: 458. 닷넷 GC가 순환 참조를 해제할 수 있을까요? [2]파일 다운로드1
1739정성태8/24/201426517.NET Framework: 457. 교착상태(Dead-lock) 해결 방법 - Lock Leveling [2]파일 다운로드1
1738정성태8/23/201422042.NET Framework: 456. C# - CAS를 이용한 Lock 래퍼 클래스파일 다운로드1
1737정성태8/20/201419755VS.NET IDE: 93. Visual Studio 2013 동기화 문제
1736정성태8/19/201425568VC++: 79. [부연] CAS Lock 알고리즘은 과연 빠른가? [2]파일 다운로드1
1735정성태8/19/201418162.NET Framework: 455. 닷넷 사용자 정의 예외 클래스의 최소 구현 코드 - 두 번째 이야기
1734정성태8/13/201419826오류 유형: 237. Windows Media Player cannot access the file. The file might be in use, you might not have access to the computer where the file is stored, or your proxy settings might not be correct.
1733정성태8/13/201426351.NET Framework: 454. EmptyWorkingSet Win32 API를 사용하는 C# 예제파일 다운로드1
1732정성태8/13/201434465Windows: 99. INetCache 폴더가 다르게 보이는 이유
1731정성태8/11/201427075개발 환경 구성: 235. 점(.)으로 시작하는 파일명을 탐색기에서 만드는 방법
1730정성태8/11/201422161개발 환경 구성: 234. Royal TS의 터미널(Terminal) 연결에서 한글이 깨지는 현상 해결 방법
... 121  122  123  124  125  126  127  128  129  130  131  [132]  133  134  135  ...