Snowpark Container Services에서 Snowpipe Streaming SDK 실행

Snowpark Container Services에서 Snowpipe Streaming SDK 실행

SDK 버전 1.5.0부터 Snowpark Container Services (SPCS) 안에서 Snowpipe Streaming SDK를 실행할 수 있습니다. SDK는 SPCS 런타임이 컨테이너에 마운트하는 workload-identity 토큰으로 인증하므로, 컨테이너 이미지에 개인 키, OAuth 클라이언트 시크릿, PAT를 저장할 필요가 없습니다.

이 지원은 Java, Python, Node.js SDK에 적용됩니다.

출처: Snowflake 문서

본문

사전 요구 사항

  • Snowpark Container Services를 사용할 수 있는 Snowflake 계정. 설정 세부 사항은 Common setup 을 참고하세요.
  • Snowflake 계정의 대상 테이블, 역할, PIPE 객체. 설정 세부 사항은 튜토리얼: SDK로 Named Channel 시작하기 를 참고하세요.
  • 사용하는 언어에 대한 Snowpipe Streaming SDK 버전 1.5.0 이상.

SPCS workload-identity 토큰으로 인증

SDK가 SPCS 서비스 내부에서 실행되면 SPCS 런타임은 /snowflake/session/token에서 수명이 짧은 workload-identity bearer 토큰을 제공합니다. 플랫폼이 이 토큰을 자동으로 회전합니다. SDK는 파일에서 토큰을 읽고, Snowflake와 표준 scoped token 교환을 수행하며, 백그라운드에서 토큰을 갱신합니다.

SPCS 인증을 사용하려면 다음 클라이언트 측 속성을 설정하세요.

속성 설명
authorization_type workload-identity 인증을 활성화하려면 SPCS로 설정합니다. SDK 버전 1.5.0 이상이 필요합니다.
spcs_token_path SPCS workload-identity bearer 토큰의 파일 경로. 기본값은 /snowflake/session/token. 표준이 아닌 SPCS 배포가 있을 때만 재정의하세요.

표준 url, account, role 속성은 여전히 필요합니다. authorization_type이 SPCS로 설정되면 user, private_key, OAuth 속성은 사용되지 않습니다.

표준이 아닌 배포를 위해 SNOWFLAKE_SPCS_TOKEN_PATH 환경 변수로 토큰 경로를 재정의할 수 있습니다. 환경 변수가 spcs_token_path 속성보다 우선합니다.

예시: 클라이언트 측 구성

다음 예시는 SPCS에서 SDK를 실행하는 profile.json 파일을 보여줍니다.

{
  "authorization_type": "SPCS",
  "url": "https://.snowflakecomputing.com",
  "account": "XY12345",
  "role": "MY_INGEST_ROLE",
  "spcs_token_path": "/snowflake/session/token"
}

컨테이너 이미지 빌드

SDK를 애플리케이션 코드와 함께 컨테이너 이미지에 번들로 포함하세요. 다음 예시는 각 언어에 대한 최소 Dockerfile 스니펫을 보여줍니다. 기존 이미지와 기본 레이어에 맞게 조정하세요.

FROM eclipse-temurin:17-jdk

WORKDIR /app

# Copy your application JAR (built with the Snowpipe Streaming Java SDK on the classpath)
COPY target/my-streaming-app.jar /app/

# profile.json with authorization_type=SPCS
COPY profile.json /app/

ENTRYPOINT ["java", "-jar", "/app/my-streaming-app.jar"]
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt   # includes snowpipe-streaming>=1.5.0

COPY app.py /app/
COPY profile.json /app/

ENTRYPOINT ["python", "/app/app.py"]
FROM node:20-slim

WORKDIR /app

COPY package*.json /app/
RUN npm ci   # package.json declares snowpipe-streaming@^1.5.0

COPY index.js /app/
COPY profile.json /app/

ENTRYPOINT ["node", "/app/index.js"]

이미지를 Snowflake 이미지 저장소로 푸시하세요. 지침은 이미지 레지스트리 및 저장소 작업 을 참고하세요.

SPCS 서비스 정의

컨테이너를 실행하고 서비스 역할에 대상 파이프로 데이터를 수집할 수 있는 권한을 부여하는 SPCS 서비스를 정의하세요. SDK가 SPCS workload-identity 토큰을 사용할 수 있도록 서비스 명세에서 capabilities.securityContext.enableCustomCredentials를 true로 설정하세요.

spec:
  containers:
    - name: streaming-app
      image: /<db>/<repo>/streaming-app:latest
  endpoints:
    - name: app
      port: 8080
      public: false
capabilities:
  securityContext:
    enableCustomCredentials: true

서비스 생성, 역할 부여, 라이프사이클 관리의 전체 워크스루는 Snowpark Container Services: 서비스 작업 을 참고하세요.

토큰 회전

SPCS 플랫폼은 workload-identity 토큰을 주기적으로 회전합니다. SDK는 백그라운드에서 토큰 파일을 다시 읽으므로 애플리케이션 코드가 회전을 명시적으로 처리할 필요가 없습니다. SDK는 토큰이 갱신될 때 내부 HTTP 연결을 무효화합니다.

SDK 실행 중에 토큰 파일이 제거되거나 읽을 수 없게 되면 SDK는 다음 수집 호출에서 인증 오류를 표시합니다. 이 오류를 재시도 불가한 오류로 취급하고 클라이언트를 다시 만드세요.

제한 사항

  • SDK는 SPCS 컨테이너 내부의 로컬 파일시스템에서 workload-identity 토큰을 읽습니다. 코드에서 bearer 토큰을 전달하는 인증은 지원되지 않습니다. 파일 기반 경로를 사용하세요.
  • SPCS 서비스에서 Snowflake로의 네트워크 이그레스(egress)는 SPCS 구성에서 허용되어야 합니다. 자세한 내용은 네트워크 이그레스 를 참고하세요.

더 알아보기 (Learn more)