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

비밀번호

댓글 작성자
 




... 136  137  138  139  140  141  142  143  144  145  146  147  148  149  [150]  ...
NoWriterDateCnt.TitleFile(s)
1303정성태6/26/201227398개발 환경 구성: 152. sysnet DB를 SQL Azure 데이터베이스로 마이그레이션
1302정성태6/25/201229416개발 환경 구성: 151. Azure 웹 사이트에 사용자 도메인 네임 연결하는 방법
1301정성태6/20/201225764오류 유형: 156. KB2667402 윈도우 업데이트 실패 및 마이크로소프트 Answers 웹 사이트 대응
1300정성태6/20/201231769.NET Framework: 329. C# - Rabin-Miller 소수 생성방법을 이용하여 RSACryptoServiceProvider의 개인키를 직접 채워보자 [1]파일 다운로드2
1299정성태6/18/201232884제니퍼 .NET: 21. 제니퍼 닷넷 - Ninject DI 프레임워크의 성능 분석 [2]파일 다운로드2
1298정성태6/14/201234405VS.NET IDE: 72. Visual Studio에서 pfx 파일로 서명한 경우, 암호는 어디에 저장될까? [2]
1297정성태6/12/201231051VC++: 63. 다른 프로세스에 환경 변수 설정하는 방법파일 다운로드1
1296정성태6/5/201227678.NET Framework: 328. 해당 DLL이 Managed인지 / Unmanaged인지 확인하는 방법 - 두 번째 이야기 [4]파일 다운로드1
1295정성태6/5/201225081.NET Framework: 327. RSAParameters와 System.Numerics.BigInteger 이야기파일 다운로드1
1294정성태5/27/201248525.NET Framework: 326. 유니코드와 한글 - 유니코드와 닷넷을 이용한 한글 처리 [7]파일 다운로드2
1293정성태5/24/201229773.NET Framework: 325. System.Drawing.Bitmap 데이터를 Parallel.For로 처리하는 방법 [2]파일 다운로드1
1292정성태5/24/201223754.NET Framework: 324. First-chance exception에 대해 조건에 따라 디버거가 멈추게 할 수는 없을까? [1]파일 다운로드1
1291정성태5/23/201230274VC++: 62. 배열 초기화를 위한 기계어 코드 확인 [2]
1290정성태5/18/201235079.NET Framework: 323. 관리자 권한이 필요한 작업을 COM+에 대행 [7]파일 다운로드1
1289정성태5/17/201239239.NET Framework: 322. regsvcs.exe로 어셈블리 등록 시 시스템 변경 사항 [5]파일 다운로드2
1288정성태5/17/201226462.NET Framework: 321. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (3) - Type Library파일 다운로드1
1287정성태5/17/201229298.NET Framework: 320. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (2) - .NET 4.0 + .NET 2.0 [2]
1286정성태5/17/201238219.NET Framework: 319. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (1) - .NET 2.0 + x86/x64/AnyCPU [5]
1285정성태5/16/201233264.NET Framework: 318. gacutil.exe로 어셈블리 등록 시 시스템 변경 사항파일 다운로드1
1284정성태5/15/201225694오류 유형: 155. Windows Phone 연결 상태에서 DRIVER POWER STATE FAILURE 블루 스크린 뜨는 현상
1283정성태5/12/201233307.NET Framework: 317. C# 관점에서의 Observer 패턴 구현 [1]파일 다운로드1
1282정성태5/12/201226105Phone: 6. Windows Phone 7 Silverlight에서 Google Map 사용하는 방법 [3]파일 다운로드1
1281정성태5/9/201233187.NET Framework: 316. WPF/Silverlight의 그래픽 단위와 Anti-aliasing 처리를 이해하자 [1]파일 다운로드1
1280정성태5/9/201226155오류 유형: 154. Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, ...'.
1279정성태5/9/201224918.NET Framework: 315. 해당 DLL이 Managed인지 / Unmanaged인지 확인하는 방법 [1]파일 다운로드1
1278정성태5/8/201226146오류 유형: 153. Visual Studio 디버깅 - Unable to break execution. This process is not currently executing the type of code that you selected to debug.
... 136  137  138  139  140  141  142  143  144  145  146  147  148  149  [150]  ...