Private Service Connect 엔드포인트를 통해 Python SDK로 Vertex AI에서 Anthropic Claude에 액세스

1. 개요

Vertex AI API는 인터넷을 통해 액세스할 수 있지만, 엔터프라이즈에서는 인터넷을 통하지 않고 비공개로 Vertex AI API에 액세스하는 것이 좋습니다. 이 실습에서는 먼저 공개 인터넷을 통해 VM 인스턴스에서 실행되는 Python SDK를 통해 Vertex의 Anthropic Claude에 액세스합니다.

그런 다음 Googleapis에 대한 Private Service Connect 엔드포인트를 만들고 비공개 엔드포인트를 사용하여 Vertex API에 연결하도록 트래픽 흐름을 변경합니다.

이 실습에서는 다음 패턴을 만듭니다.

그림 1.

103967918b096e97.png

2. 목표

이 실습에서는 다음 작업을 실행하는 방법을 알아봅니다.

  • python sdk를 사용하도록 VM 인스턴스 설정
  • Python 스크립트를 통해 Anthropic Claude 채팅에 연결
  • Googleapis에 연결하도록 PSC 엔드포인트 구성
  • 수동 DNS 항목 구성
  • Googleais에 대한 연결 경로 확인

실습 설정

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

3. 작업 1. 환경 설정

방화벽 규칙이 있는 맞춤 VPC를 만듭니다. VPC와 프로젝트가 이미 있는 경우 이 부분을 건너뛰어도 됩니다.

콘솔 오른쪽 상단에 있는 Cloud Shell을 엽니다. 다음과 같이 구성합니다. 4261e776f64ea978.png

  1. 이 실습에서 사용할 일부 API 사용 설정
gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable servicedirectory.googleapis.com
  1. 몇 가지 변수를 설정합니다. 이 변수는 맞춤 VPC의 프로젝트 ID 및 네트워크 ID입니다 (4단계에서 VPC를 만듭니다).
projectid=$(gcloud config get-value project)
networkid=anthropic-net 
echo $projectid
echo $networkid
clear
  1. 이제 anthropic-net이라는 커스텀 VPC를 만듭니다.
gcloud compute networks create $networkid \
--project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. 새 VPC에서 vm1-subnet 만들기
gcloud compute networks subnets create vm-subnet \
--project=$projectid --range=10.0.88.0/24 \
--stack-type=IPV4_ONLY --network=$networkid \
--region=us-east1
  1. VPC에 ICMP 방화벽 규칙 추가
gcloud compute firewall-rules create $networkid-allow-icmp --project=$projectid \
--network=$networkid \
--description="Allows ICMP connections from any source to any instance on the network." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=icmp
  1. VPC에 SSH 방화벽 규칙 추가
gcloud compute firewall-rules create $networkid-allow-ssh \
--project=$projectid \
--network=$networkid \
--description="Allows TCP connections from any source to any instance on the network using port 22." \
--direction=INGRESS --priority=65534 \
--source-ranges=0.0.0.0/0 --action=ALLOW \
--rules=tcp:22

4. 작업 2. Vertex Model Garden에서 Anthropic 사용 설정

인터넷에 대한 아웃바운드 외부 액세스 권한을 부여해야 하므로 Cloud NAT 게이트웨이를 만들고 연결하겠습니다.

  1. Vertex AI로 이동하여 Model Garden을 선택합니다.
  2. Anthropic을 검색하고 Claude 3.5 Sonnet을 선택합니다.

4fd4338c598983d8.png

  1. 사용 설정을 선택합니다. 일부 정보를 입력해야 합니다. 양식을 작성하고 다음을 선택합니다.
  2. 마지막 페이지에서 동의를 선택하여 Claude 3.5 Sonnet b3961312feb6c383.png을 사용 설정합니다.

5. 작업 3. NAT 게이트웨이 및 VM 만들기

인터넷에 대한 아웃바운드 외부 액세스 권한을 부여해야 하므로 Cloud NAT 게이트웨이를 만들고 연결하겠습니다.

Cloud Shell에서 다음 명령어를 사용합니다.

  1. Cloud NAT를 만듭니다.
gcloud compute routers create anthro-out-nat \
    --network $networkid \
    --region us-east1 
  1. Cloud NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create anthro-out-nat-gw \
    --router-region us-east1 \
    --router anthro-out-nat \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

이제 Python SDK를 통해 Vertex AI의 Anthropic에 액세스할 VM을 하나 만듭니다.

다음 패키지가 설치된 VM을 만들어 테스트할 것입니다.

  1. 동일한 Cloud Shell 세션에서 다음을 사용하여 anthro-vm을 만듭니다.
gcloud compute instances create anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--network-interface=stack-type=IPV4_ONLY,subnet=vm-subnet,no-address,network=$networkid \
--metadata startup-script="#! /bin/bash    
      sudo apt-get update
      sudo apt-get install python3 python3-dev python3-venv -y
      sudo apt-get install tcpdump dnsutils -y
      sudo -i
      sudo mkdir -p ~/py-anthro-env
      cd ~/py-anthro-env
      python3 -m venv env
      source env/bin/activate
      pip install -U ipython google-cloud-aiplatform 'anthropic[vertex]'"

공개 IP 주소가 없는 VM이 생성된 것을 확인할 수 있습니다. 이제 VM의

6. 작업 4. VM 구성 및 테스트

  1. VM 인스턴스로 이동합니다. anthro-vm으로 시작하는 VM을 선택합니다. SSH를 선택합니다.
  2. anthro-vm에 SSH로 연결되면 sudo -i를 입력하여 루트를 사용 설정합니다.
  3. venv 환경을 활성화합니다.
cd py-anthro-env
source env/bin/activate
  1. 이제 인증을 진행하여 나중에 테스트를 진행해 보겠습니다. VM에서 다음 명령어를 실행하고 메시지가 표시되면 y를 누릅니다.
gcloud auth application-default login
  1. 그런 다음 https://로 시작하는 URL을 복사하고 실험실 브라우저 창에서 새 탭을 열어 URL을 붙여넣습니다. 프롬프트를 수락합니다.
  2. 다음과 같은 선택 복사 메시지가 표시되면 vm anthro-vm 세션으로 다시 전환하고 Enter authorization code:(승인 코드 입력:)에 복사한 코드를 붙여넣은 다음 Enter 키를 눌러 인증합니다.

c29615cdf9324209.png

  1. 이제 Vertex Gemini API에 연결할 수 있는지 빠르게 테스트해 보겠습니다. 이 API는 us-east5-aiplatform.googleapis.com을 사용하므로 이 주소에 dig을 실행하여 트래픽이 어떻게 라우팅되는지 확인합니다.
dig us-east5-aiplatform.googleapis.com
  1. 다음과 비슷한 화면이 표시됩니다 (주소는 다름). API가 공개 API이므로 경로는 공개 IP 주소를 통해 전달됩니다.
; <<>> DiG 9.16.48-Debian <<>> us-east5-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-east5-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-east5-aiplatform.googleapis.com. 300 IN A 74.125.26.95
  1. 이제 Python을 사용해 보겠습니다. ipython를 입력하여 ipython 인터페이스를 활성화합니다.
ipython

4685b31f13df54e1.png

  1. 이제 다음을 복사하여 붙여넣습니다. 클라우드에게 '2024년 올림픽이 어디에서 열리나요?'라고 묻습니다. . 추신: YOUR-Project-ID-Here프로젝트 ID 이름으로 바꿉니다.
from anthropic import AnthropicVertex

project_id = "YOUR-Project-ID-Here"
region = "us-east5"

client = AnthropicVertex(project_id=project_id, region=region)

message = client.messages.create(
    model="claude-3-5-sonnet@20240620",
    max_tokens=100,
    messages=[
        {
            "role": "user",
            "content": "Where is the olympics being held in 2024!",
        }
    ],
)
print(message)
  1. Enter 키를 눌러 실행하고 결과를 확인합니다.
  2. 이 요청은 Vertex 공개 API를 통해 Anthropic에 액세스했습니다.
  3. SSH 세션을 닫고 계속 진행하겠습니다.

7. 작업 5. googleapis에 대한 PSC 엔드포인트 만들기

Vertex API 엔드포인트에 대한 비공개 연결을 사용 설정하기 위해 googleapis용 Private Service Connect 엔드포인트를 만듭니다. 이렇게 하면 필요한 googleapis(이 경우 Vertex Gemini)로 트래픽을 라우팅하는 데 할당된 비공개 IP 주소를 사용할 수 있습니다.

  1. Cloud Shell이 열려 있지 않으면 엽니다. PSC 엔드포인트의 IP를 만듭니다. 이 경우에는 192.168.255.230을 사용합니다.
gcloud compute addresses create anthro-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.230 \
    --network=$networkid
  1. 생성된 IP 확인
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
  1. 그런 다음 PSC 엔드포인트를 만듭니다.
gcloud compute forwarding-rules create pscanthrovertex \
    --global \
    --network=$networkid \
    --address=anthro-ip \
    --target-google-apis-bundle=all-apis
  1. 이렇게 하면 엔드포인트와 서비스 디렉터리 항목이 생성됩니다. 엔드포인트 존재 확인
gcloud compute forwarding-rules describe pscanthrovertex --global

8. 작업 6. 자동 서비스 디렉터리 영역을 통한 엔드포인트 연결 확인

비공개 엔드포인트를 사용하여 Gemini에 연결해 보겠습니다.

  1. VM 인스턴스 anthro-vm1로 이동합니다. SSH를 선택하고 VM에 SSH로 연결
  2. sudo -i를 입력하여 루트 액세스 권한을 얻습니다.
  3. dig 명령어를 사용하여 aiplatform-pscanthrovertex.p.googleapis.com의 연결 경로를 확인합니다. PSC 엔드포인트의 IP가 표시됩니다.
dig aiplatform-pscanthrovertex.p.googleapis.com

9. 작업 7. googleapis에 수동 DNS 항목 만들기 (선택사항)

비공개 DNS를 사용하여 PSC 엔드포인트를 가리키는 수동 DNS 항목을 만들 수 있습니다. 이렇게 하면 할당된 모든 네트워크에 영향을 미칩니다.

  1. 네트워크 서비스로 이동하여 Cloud DNS를 선택합니다.
  2. 영역에는 영역 유형 서비스 디렉터리와 함께 Google API용 Private Service Connect에 대해 자동으로 생성된 영역이 표시됩니다. 이 키는 **SERVICE-ENDPOINT.p.googleapis.com 형식으로 PSC 엔드포인트에 연결하는 데 사용할 수 있습니다. 예: aiplatform-pscvertexgemini.p.googleapis.com
  3. 이 경우 비공개 DNS 항목을 수동으로 만들어야 합니다. Cloud DNS로 이동하여 영역 만들기를 선택합니다.
  4. 다음과 같이 구성합니다.

구성

이름

영역 유형

비공개

영역 이름

googleapis-private

DNS 이름

googleapis.com

네트워크 추가 (추가한 후 완료 선택)

anthropic-net

선택을 완료하려면

만들기

  1. 영역 세부정보 영역에서 표준 추가를 선택하여 A 레코드를 추가합니다.

구성

이름

리소스 레코드 유형

A

IPv4 주소 (엔드포인트의 IP 주소 추가)

192.168.255.230

선택을 완료하려면

만들기

  1. 영역 세부정보 영역에서 표준 추가를 선택하여 CNAME 레코드를 추가합니다.

구성

이름

DNS 이름

*

레코드 리소스 유형

CNAME

표준 이름 1

googleapis.com

선택을 완료하려면

만들기

  1. A 레코드와 CNAME이 있는 설정이 표시됩니다(b7f122f0d1fd2850.png 참고).
  2. 그런 다음 anthro-vm에서 이러한 변경사항으로 연결을 확인합니다.

10. 작업 8. IP 주소를 통한 엔드포인트 연결 확인 (선택사항)

비공개 엔드포인트를 사용하여 Gemini에 연결해 보겠습니다.

  1. VM 인스턴스 anthro-vm으로 이동합니다. SSH를 선택하고 VM에 SSH로 연결
  2. sudo -i를 입력하여 루트 액세스 권한을 얻습니다.
  3. ping 명령어를 사용하여 us-east5-aiplatform.googleapis.com의 연결 경로를 확인합니다. 이렇게 하면 비공개 DNS의 IP 주소, googleapis의 A 레코드가 핑됩니다. 이 IP는 PSC 엔드포인트이므로 핑이 실패합니다.
ping -c 2 us-east5-aiplatform.googleapis.com
  1. aiplatform-pscanthrovertex.p.googleapis.com를 사용하여 PSC Google API에 대해 자동으로 생성된 DNS 항목을 사용하여 ping로 연결 경로를 확인합니다. 이 주소는 PSC 엔드포인트의 IP 주소를 가리키므로 핑이 실패합니다.
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
  1. dig 명령어를 사용하여 us-east5-aiplatform.googleapis.com의 연결 경로를 확인합니다. PSC 엔드포인트의 IP 주소여야 합니다.
dig us-east5-aiplatform.googleapis.com
  1. 콘솔로 돌아가 VM 인스턴스 anthro-vm의 다른 인스턴스를 엽니다. SSH를 선택하고 VM에 SSH로 연결합니다.
  2. sudo -i를 입력하여 루트 액세스 권한을 얻습니다.
  3. 다음 명령어를 실행하여 TCP 덤프에서 연결을 확인합니다.
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
  1. 이제 VM 인스턴스 anthro-vm의 첫 번째 SSH 인스턴스로 다시 전환합니다.
  2. 다음을 사용하여 env 활성화
cd py-gem-env
source env/bin/activate
  1. 이제 Python을 테스트해 보겠습니다. ipython를 입력하여 ipython 인터페이스를 활성화합니다.
ipython
  1. 이제 다음을 복사하여 붙여넣습니다. 그러면 클라우드에게 '로티가 뭐야?'라고 묻습니다. 추신: YOUR-Project-ID-Here프로젝트 ID 이름으로 바꿉니다.
from anthropic import AnthropicVertex

project_id = "YOUR-Project-ID-Here"
region = "us-east5"

client = AnthropicVertex(project_id=project_id, region=region)

message = client.messages.create(
    model="claude-3-5-sonnet@20240620",
    max_tokens=100,
    messages=[
        {
            "role": "user",
            "content": "What is a roti?",
        }
    ],
)
print(message)
  1. Enter 키를 눌러 실행하고 결과를 확인합니다.
  2. VM 인스턴스 anthro-vm의 두 번째 인스턴스로 다시 전환합니다. TCPDUMP의 결과가 표시됩니다. 입력과 출력이 표시되고 VM의 IP 주소가 PSC 엔드포인트 IP 주소를 사용하여 us-east5-aiplatform.googleapis.com에 연결합니다.

VM 인스턴스 anthro-vm의 모든 SSH 세션을 종료합니다.

11. 축하합니다

축하합니다. 공개 API 주소와 Googleapis용 Private Service Connect 엔드포인트를 비공개로 모두 사용하여 Vertex의 Anthropic에 연결했습니다. 이 기능을 사용하면 (Interconnect, Cross-Cloud Interconnect, VPC)를 통해 연결된 온프레미스/기타 클라우드 환경으로 비공개 API 연결을 확장할 수 있습니다.

삭제

gcloud compute instances delete anthro-vm --zone=us-east1-b --quiet

gcloud compute routers nats delete anthro-out-nat-gw --router=anthro-out-nat --region=us-east1 --quiet

gcloud compute routers delete anthro-out-nat --region=us-east1 --quiet

gcloud compute firewall-rules delete anthropic-net-allow-icmp anthropic-net-allow-ssh --quiet

gcloud compute forwarding-rules delete pscanthrovertex --global

gcloud dns record-sets delete googleapis.com. --zone googleapis-private --type A

gcloud dns record-sets delete *.googleapis.com --zone googleapis-private --type CNAME

gcloud dns managed-zones delete googleapis-private

gcloud compute addresses delete anthro-ip --global


gcloud compute networks subnets delete vm-subnet --region=us-east1 --quiet

gcloud compute networks delete anthropic-net --quiet

Vertex AI 네트워킹에 대해 자세히 알아보세요.