이제 애플리케이션에서 gRPC를 보다 쉽게 사용할 수 있도록 Application Load Balancer(ALB)는 HTTP/2 엔드 투 엔드를 지원하므로 단일 로드 밸런서를 통해 gRPC 서비스는 물론, gRPC 외 서비스도 함께 게시할 수 있습니다. 대상 그룹에 대한 gRPC 상태 검사 지원을 통해 Amazon Elastic Compute Cloud(EC2) 인스턴스 또는 IP 주소(예: AWS Fargate)를 gRPC 대상으로 사용할 수 있습니다. 이러한 방식으로 ALB를 사용하여 마이크로서비스 사이 또는 gRPC 지원 클라이언트와 서비스 사이에서 gRPC 트래픽을 종료 및 라우팅하고 로드 밸런싱할 수 있습니다.
ALB는 gRPC 호출을 검사하고 적절한 서비스로 라우팅하는 풍부한 콘텐츠 기반 라우팅 기능을 제공합니다. 특히, ALB는 gRPC 상태 코드, gRPC 요청 수에 대한 지표, gRPC 요청을 구분하는 액세스 로그 및 gRPC 특정 응답 헤더를 검사할 수 있는 상태 검사를 제공합니다. 또한 고정성, 다양한 로드 밸런싱 알고리즘 및 TLS 종료와 같은 기본 기능을 활용할 수도 있습니다.
Application Load Balancer에서 gRPC를 사용하는 방법 이 새로운 기능을 테스트하기 위해 먼저 gRPC 서버 애플리케이션을 준비합니다. Python 프로그래밍 언어와 route_guide 데모(grpc 리포지토리에 포함됨)를 사용하려고 합니다. 이 애플리케이션을 사용하는 이유는 클라이언트와 서버가 gRPC를 통해 상호 작용할 수 있는 여러 방법 중 일부를 신속하게 도입하기 때문입니다. 예를 들어, 다음과 같습니다.
간단한 단향 원격 프로시저 호출(RPC) – 함수 호출 작동 방식과 비슷하게, 클라이언트가 서버로 요청을 보내고 응답을 기다립니다.
서버 측 스트리밍 RPC – 클라이언트가 서버로 요청을 보내고 메시지 스트림을 다시 가져오며 더 이상 메시지가 없을 때까지 스트림에서 읽습니다.
클라이언트 측 스트리밍 RPC – 클라이언트는 일련의 메시지를 쓰고 서버로 보낸 다음, 서버가 메시지를 모두 읽고 응답을 반환할 때까지 기다립니다.
양방향 스트리밍 RPC – 클라이언트와 서버 모두 순서를 유지하며 메시지를 독립적으로 전송합니다.
먼저, 컨테이너에서 route_guide 애플리케이션을 실행하도록 Dockerfile을 준비합니다. 기술적으로 일반 EC2 인스턴스를 사용할 수 있기 때문에 반드시 필요한 단계는 아닙니다. 하지만 gRPC에서는 컨테이너를 사용하는 것이 더 일반적이어서, 예제의 관련성을 높이기 위해 컨테이너를 사용합니다.
FROM python:3.7
RUN pip install protobuf grpcio
COPY ./grpc/examples/python/route_guide .
CMD python route_guide_server.py
EXPOSE 50051
Amazon ECS콘솔에서 네트워킹 전용 템플릿을 사용하여 새 클러스터를 생성합니다. 클러스터 이름을 demo로 지정하고, 다른 모든 값은 기본값으로 두고 이 클러스터에 대한 새 VPC를 생성합니다. ECS 콘솔은 AWS CloudFormation을 사용하여 클러스터에 대한 리소스를 설정합니다. 몇 분 후 모든 리소스가 생성되고 클러스터가 준비됩니다.
gRPC 트래픽에 대한 액세스 권한을 부여하기 위해 클라이언트 랩톱에서 포트 50051의 인바운드 TCP 트래픽을 허용하는 보안 그룹을 생성합니다. 이 보안 그룹의 이름을 gRPC로 지정합니다.
이제 로드 밸런서를 생성합니다. EC2 콘솔의 왼쪽에서 [로드 밸런서(Load Balancers)]를 선택한 다음, [로드 밸런서 생성(Create Load Balancer)]을 선택합니다. 다음 단계에서, Application Load Balancer를 생성하고 이름을 route-guide로 지정합니다. 퍼블릭 인터넷을 통해 gRPC 서비스에 연결하려고 하기 때문에 기본 internet-facing 스키마는 그대로 둡니다. [리스너(Listeners)] 섹션에서 프로토콜로 HTTPS, 포트로 50051을 선택합니다. 바로 아래에서 새로 생성된 VPC와 ECS 콘솔에서 생성한 2개의 가용 영역을 선택합니다.
그리고 기본 보안 그룹과 위에서 생성한 gRPC 보안 그룹을 선택합니다. 각 VPC에는 동일한 보안 그룹을 사용하는 다른 리소스에 대한 네트워크 액세스를 제공하는 기본 보안 그룹이 자동으로 제공됩니다.
[라우팅(routing)] 섹션에서 route-guide라는 새 대상 그룹을 생성합니다. AWS Fargate를 사용하여 gRPC 서버를 실행할 계획이므로 IP 주소 대상 유형을 선택합니다. ALB는 gRPC 프로토콜을 사용하는 대상 그룹에 대한 보안 및 비보안 연결을 모두 지원합니다. 여기에서는 포트 50051에서 HTTP를 사용합니다. 로드 밸런서와 gRPC 서버를 실행하는 컨테이너 사이에 비보안 연결을 사용하기 때문입니다. 그런 다음, ECS 클러스터에서 사용하는 VPC를 선택합니다. [프로토콜 버전(Protocol Version)]의 경우 gRPC를 사용합니다.
[고급 상태 검사 설정(Advanced health check settings)]에서 올바른 응답인지 검사할 때 사용할 gRPC 성공 코드를 지정할 수 있습니다. 기본값인 12는 그대로 둡니다. 이는 구현되지 않았음을 의미합니다.
메서드를 찾을 수 없으면 gRPC 서버에서 코드 12를 반환합니다. route_guide 애플리케이션에서 구현하지 않은 경로를 사용하기 때문에 이 경우 이 코드가 반환되는 것입니다. 보다 일반적으로, 코드 12를 확인하면 gRPC 서버가 올바르게 실행되고 있는지 빠르게 확인할 수 있습니다. 상태 검사에서 구체적으로 확인하려면 구현에서 예상하는 내용에 따라 단일 코드, 목록 또는 범위를 사용할 수 있습니다.
다음 단계에서는, 대상을 등록하지 않고 대상 그룹 생성을 완료합니다.
ECS 콘솔로 돌아가서 Fargate 시작 유형과 호환되는 새 태스크 정의를 생성합니다. 이름을 route-guide로 지정하고, 최소 리소스(0.5GB의 메모리와 0.25 CPU 단위)를 제공합니다. ECR에 업로드한 컨테이너 이미지의 이미지 URI 및 위 Dockerfile에 공개된 네트워크 포트인 컨테이너 포트 50051/tcp를 사용하여 컨테이너 정의를 추가합니다.
route-guide 태스크 정의를 선택하고 [작업(Actions)] 메뉴에서 [서비스 생성(Create Service)]을 선택합니다. Fargate 시작 유형, 서비스 이름으로 route-guide, 태스크 개수로 2를 사용합니다. 다음 단계에서는, 로드 밸런서가 태스크에 도달할 수 있도록 VPC에 2개의 서브넷을 추가하고 기본 보안 그룹을 선택합니다. [로드 밸런싱(Load balancing)] 섹션에서 Application Load Balancer 및 route-guide 로드 밸런서를 선택합니다.
[로드 밸런싱할 컨테이너(Container to load balance)]에서 route-guide:50051:50051을 선택하고 [로드 밸런서에 추가(Add to load balancer)]를 선택합니다.
그런 다음, route-guide 대상 그룹을 선택합니다.
다음 단계에서는, 이 데모에 대해 Auto Scaling을 사용하지 않도록 [원하는 서비스 개수를 조정하지 마십시오(Do not adjust the service’s desired count)]를 선택합니다.
ECS 서비스 생성을 완료합니다. 몇 분 후 두 개의 태스크 상태는 [실행 중(RUNNING)]입니다. route-guide 대상 그룹의 [대상(Targets)] 탭을 보면 2개 대상의 상태가 [정상(healthy)]으로 나옵니다. 이제 로드 밸런서는 트래픽을 수락할 수 있습니다.
Amazon Route 53콘솔에서 로드 밸런서의 별칭으로 DNS A 레코드를 생성합니다. 사용하는 도메인은 로드 밸런서를 생성할 때 선택한 인증서의 도메인 이름과 일치합니다.
이제 클라이언트를 시작하여 일부 워크로드를 사용해 gRPC 채널을 테스트합니다. 출력에서 route_guide 애플리케이션은 요청 및 응답에서 단항, 서버 측 스트리밍, 클라이언트 측 스트리밍 및 양방향 스트리밍을 사용하고 있음을 알 수 있습니다.
$ python3 route_guide_client.py
-------------- GetFeature --------------
Feature called Berkshire Valley Management Area Trail, Jefferson, NJ, USA at latitude: 409146138
longitude: -746188906
Found no feature at
-------------- ListFeatures --------------
Looking for features between 40, -75 and 42, -73
Feature called Patriots Path, Mendham, NJ 07945, USA at latitude: 407838351
longitude: -746143763
Feature called 101 New Jersey 10, Whippany, NJ 07981, USA at latitude: 408122808
longitude: -743999179
Feature called U.S. 6, Shohola, PA 18458, USA at latitude: 413628156
longitude: -749015468
Feature called 5 Conners Road, Kingston, NY 12401, USA at latitude: 419999544
longitude: -740371136
Feature called Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA at latitude: 414008389
longitude: -743951297
Feature called 287 Flugertown Road, Livingston Manor, NY 12758, USA at latitude: 419611318
longitude: -746524769
Feature called 4001 Tremley Point Road, Linden, NJ 07036, USA at latitude: 406109563
longitude: -742186778
Feature called 352 South Mountain Road, Wallkill, NY 12589, USA at latitude: 416802456
longitude: -742370183
Feature called Bailey Turn Road, Harriman, NY 10926, USA at latitude: 412950425
longitude: -741077389
Feature called 193-199 Wawayanda Road, Hewitt, NJ 07421, USA at latitude: 412144655
longitude: -743949739
Feature called 406-496 Ward Avenue, Pine Bush, NY 12566, USA at latitude: 415736605
longitude: -742847522
Feature called 162 Merrill Road, Highland Mills, NY 10930, USA at latitude: 413843930
longitude: -740501726
Feature called Clinton Road, West Milford, NJ 07480, USA at latitude: 410873075
longitude: -744459023
Feature called 16 Old Brook Lane, Warwick, NY 10990, USA at latitude: 412346009
longitude: -744026814
Feature called 3 Drake Lane, Pennington, NJ 08534, USA at latitude: 402948455
longitude: -747903913
Feature called 6324 8th Avenue, Brooklyn, NY 11220, USA at latitude: 406337092
longitude: -740122226
Feature called 1 Merck Access Road, Whitehouse Station, NJ 08889, USA at latitude: 406421967
longitude: -747727624
Feature called 78-98 Schalck Road, Narrowsburg, NY 12764, USA at latitude: 416318082
longitude: -749677716
Feature called 282 Lakeview Drive Road, Highland Lake, NY 12743, USA at latitude: 415301720
longitude: -748416257
Feature called 330 Evelyn Avenue, Hamilton Township, NJ 08619, USA at latitude: 402647019
longitude: -747071791
Feature called New York State Reference Route 987E, Southfields, NY 10975, USA at latitude: 412567807
longitude: -741058078
Feature called 103-271 Tempaloni Road, Ellenville, NY 12428, USA at latitude: 416855156
longitude: -744420597
Feature called 1300 Airport Road, North Brunswick Township, NJ 08902, USA at latitude: 404663628
longitude: -744820157
Feature called at latitude: 407113723
longitude: -749746483
Feature called at latitude: 402133926
longitude: -743613249
Feature called at latitude: 400273442
longitude: -741220915
Feature called at latitude: 411236786
longitude: -744070769
Feature called 211-225 Plains Road, Augusta, NJ 07822, USA at latitude: 411633782
longitude: -746784970
Feature called at latitude: 415830701
longitude: -742952812
Feature called 165 Pedersen Ridge Road, Milford, PA 18337, USA at latitude: 413447164
longitude: -748712898
Feature called 100-122 Locktown Road, Frenchtown, NJ 08825, USA at latitude: 405047245
longitude: -749800722
Feature called at latitude: 418858923
longitude: -746156790
Feature called 650-652 Willi Hill Road, Swan Lake, NY 12783, USA at latitude: 417951888
longitude: -748484944
Feature called 26 East 3rd Street, New Providence, NJ 07974, USA at latitude: 407033786
longitude: -743977337
Feature called at latitude: 417548014
longitude: -740075041
Feature called at latitude: 410395868
longitude: -744972325
Feature called at latitude: 404615353
longitude: -745129803
Feature called 611 Lawrence Avenue, Westfield, NJ 07090, USA at latitude: 406589790
longitude: -743560121
Feature called 18 Lannis Avenue, New Windsor, NY 12553, USA at latitude: 414653148
longitude: -740477477
Feature called 82-104 Amherst Avenue, Colonia, NJ 07067, USA at latitude: 405957808
longitude: -743255336
Feature called 170 Seven Lakes Drive, Sloatsburg, NY 10974, USA at latitude: 411733589
longitude: -741648093
Feature called 1270 Lakes Road, Monroe, NY 10950, USA at latitude: 412676291
longitude: -742606606
Feature called 509-535 Alphano Road, Great Meadows, NJ 07838, USA at latitude: 409224445
longitude: -748286738
Feature called 652 Garden Street, Elizabeth, NJ 07202, USA at latitude: 406523420
longitude: -742135517
Feature called 349 Sea Spray Court, Neptune City, NJ 07753, USA at latitude: 401827388
longitude: -740294537
Feature called 13-17 Stanley Street, West Milford, NJ 07480, USA at latitude: 410564152
longitude: -743685054
Feature called 47 Industrial Avenue, Teterboro, NJ 07608, USA at latitude: 408472324
longitude: -740726046
Feature called 5 White Oak Lane, Stony Point, NY 10980, USA at latitude: 412452168
longitude: -740214052
Feature called Berkshire Valley Management Area Trail, Jefferson, NJ, USA at latitude: 409146138
longitude: -746188906
Feature called 1007 Jersey Avenue, New Brunswick, NJ 08901, USA at latitude: 404701380
longitude: -744781745
Feature called 6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA at latitude: 409642566
longitude: -746017679
Feature called 1358-1474 New Jersey 57, Port Murray, NJ 07865, USA at latitude: 408031728
longitude: -748645385
Feature called 367 Prospect Road, Chester, NY 10918, USA at latitude: 413700272
longitude: -742135189
Feature called 10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA at latitude: 404310607
longitude: -740282632
Feature called 11 Ward Street, Mount Arlington, NJ 07856, USA at latitude: 409319800
longitude: -746201391
Feature called 300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA at latitude: 406685311
longitude: -742108603
Feature called 43 Dreher Road, Roscoe, NY 12776, USA at latitude: 419018117
longitude: -749142781
Feature called Swan Street, Pine Island, NY 10969, USA at latitude: 412856162
longitude: -745148837
Feature called 66 Pleasantview Avenue, Monticello, NY 12701, USA at latitude: 416560744
longitude: -746721964
Feature called at latitude: 405314270
longitude: -749836354
Feature called at latitude: 414219548
longitude: -743327440
Feature called 565 Winding Hills Road, Montgomery, NY 12549, USA at latitude: 415534177
longitude: -742900616
Feature called 231 Rocky Run Road, Glen Gardner, NJ 08826, USA at latitude: 406898530
longitude: -749127080
Feature called 100 Mount Pleasant Avenue, Newark, NJ 07104, USA at latitude: 407586880
longitude: -741670168
Feature called 517-521 Huntington Drive, Manchester Township, NJ 08759, USA at latitude: 400106455
longitude: -742870190
Feature called at latitude: 400066188
longitude: -746793294
Feature called 40 Mountain Road, Napanoch, NY 12458, USA at latitude: 418803880
longitude: -744102673
Feature called at latitude: 414204288
longitude: -747895140
Feature called at latitude: 414777405
longitude: -740615601
Feature called 48 North Road, Forestburgh, NY 12777, USA at latitude: 415464475
longitude: -747175374
Feature called at latitude: 404062378
longitude: -746376177
Feature called at latitude: 405688272
longitude: -749285130
Feature called at latitude: 400342070
longitude: -748788996
Feature called at latitude: 401809022
longitude: -744157964
Feature called 9 Thompson Avenue, Leonardo, NJ 07737, USA at latitude: 404226644
longitude: -740517141
Feature called at latitude: 410322033
longitude: -747871659
Feature called at latitude: 407100674
longitude: -747742727
Feature called 213 Bush Road, Stone Ridge, NY 12484, USA at latitude: 418811433
longitude: -741718005
Feature called at latitude: 415034302
longitude: -743850945
Feature called at latitude: 411349992
longitude: -743694161
Feature called 1-17 Bergen Court, New Brunswick, NJ 08901, USA at latitude: 404839914
longitude: -744759616
Feature called 35 Oakland Valley Road, Cuddebackville, NY 12729, USA at latitude: 414638017
longitude: -745957854
Feature called at latitude: 412127800
longitude: -740173578
Feature called at latitude: 401263460
longitude: -747964303
Feature called at latitude: 412843391
longitude: -749086026
Feature called at latitude: 418512773
longitude: -743067823
Feature called 42-102 Main Street, Belford, NJ 07718, USA at latitude: 404318328
longitude: -740835638
Feature called at latitude: 419020746
longitude: -741172328
Feature called at latitude: 404080723
longitude: -746119569
Feature called at latitude: 401012643
longitude: -744035134
Feature called at latitude: 404306372
longitude: -741079661
Feature called at latitude: 403966326
longitude: -748519297
Feature called at latitude: 405002031
longitude: -748407866
Feature called at latitude: 409532885
longitude: -742200683
Feature called at latitude: 416851321
longitude: -742674555
Feature called 3387 Richmond Terrace, Staten Island, NY 10303, USA at latitude: 406411633
longitude: -741722051
Feature called 261 Van Sickle Road, Goshen, NY 10924, USA at latitude: 413069058
longitude: -744597778
Feature called at latitude: 418465462
longitude: -746859398
Feature called at latitude: 411733222
longitude: -744228360
Feature called 3 Hasta Way, Newton, NJ 07860, USA at latitude: 410248224
longitude: -747127767
-------------- RecordRoute --------------
Visiting point latitude: 400066188
longitude: -746793294
Visiting point latitude: 412452168
longitude: -740214052
Visiting point latitude: 401827388
longitude: -740294537
Visiting point latitude: 414777405
longitude: -740615601
Visiting point latitude: 409642566
longitude: -746017679
Visiting point latitude: 406685311
longitude: -742108603
Visiting point latitude: 406523420
longitude: -742135517
Visiting point latitude: 405047245
longitude: -749800722
Visiting point latitude: 418858923
longitude: -746156790
Visiting point latitude: 409532885
longitude: -742200683
Finished trip with 10 points
Passed 10 features
Travelled 863981 meters
It took 0 seconds
-------------- RouteChat --------------
Sending First message at
Sending Second message at longitude: 1
Sending Third message at latitude: 1
Sending Fourth message at
Sending Fifth message at latitude: 1
Received message First message at
Received message Third message at latitude: 1
출력이 꽤 길지만, 이 게시물의 시작 부분에서 말했듯이, route-guide 데모는 기본 RPC 호출을 뛰어넘어, gRPC를 사용하여 클라이언트와 서버가 상호 작용하는 수많은 여러 방식을 보여줍니다.
정식 출시 현재 모든 리전에서 신규 및 기존 Application Load Balancer에 대해 엔드 투 엔드 HTTP/2 및 gRPC 지원이 제공됩니다. 이 기능은 콘솔, AWS 명령줄 인터페이스(CLI), AWS SDK를 통해 사용할 수 있습니다. AWS CloudFormation 지원도 곧 추가할 계획입니다.
Leave a Reply