Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Compute Module 외부 소스

Compute Module에는 기본 외부 네트워크 접근이 없습니다. 일반 공개 Foundry 호스트로 보내는 HTTPS 요청도 소스 네트워크 정책을 설정해야 합니다. Data Connection의 소스는 허용할 네트워크와 인증 비밀을 함께 구성합니다.

TypeScript SDK의 내부 서비스 검색으로 제공되는 주소는 플랫폼 ingress 소스 없이 사용할 수 있지만, 해당 API의 인증과 자원 권한은 필요합니다.

소스 만들기와 연결

  1. Data Connection에서 필요한 네트워크 정책과 비밀을 가진 소스를 만듭니다.
  2. Compute Module과 같은 프로젝트에 두거나, 모듈 프로젝트에 그 소스의 참조를 추가합니다.
  3. 소스의 Code import에서 Allow this source to be imported into compute modules를 선택합니다.

  1. 코드에서 사용할 API 이름을 지정합니다.

  1. 모듈의 Configure > Sources > Add Sources에서 소스를 추가합니다.

마운트한 JSON 읽기

SOURCE_CREDENTIALS 환경 변수는 JSON 파일의 경로입니다. 최상위 키가 소스 API 이름이며 그 안에 비밀 이름과 값이 있습니다. 아래 SOURCE_API_NAME과 SOURCE_SECRET_NAME에는 실제 구성 이름을 환경 변수로 제공합니다.

일부 REST 소스의 추가 비밀에는 additionalSecret 접두사가 붙습니다. 예를 들어 MySecretName으로 구성한 비밀을 additionalSecretMySecretName으로 조회해야 할 수 있으므로 마운트되는 이름을 맞춥니다.

import json
import os

with open(os.environ["SOURCE_CREDENTIALS"], encoding="utf-8") as file:
    credentials = json.load(file)
secret = credentials[os.environ["SOURCE_API_NAME"]][os.environ["SOURCE_SECRET_NAME"]]

Node.js에서도 같은 구조를 읽습니다.

const fs = require("node:fs");
const credentials = JSON.parse(
  fs.readFileSync(process.env.SOURCE_CREDENTIALS, "utf8")
);
const secret = credentials[process.env.SOURCE_API_NAME][process.env.SOURCE_SECRET_NAME];

SOURCE_CONFIGURATIONS_PATH도 소스 API 이름을 최상위 키로 가진 파일입니다. 각 소스 항목에 secrets와 선택 연결 설정 등이 들어갑니다. HTTPS 연결을 구성한 소스의 URL은 다음처럼 읽습니다.

import json
import os

with open(os.environ["SOURCE_CONFIGURATIONS_PATH"], encoding="utf-8") as file:
    configurations = json.load(file)
source_config = configurations[os.environ["SOURCE_API_NAME"]]
secrets = source_config["secrets"]
url = source_config["httpConnectionConfig"]["url"]
const fs = require("node:fs");
const configurations = JSON.parse(
  fs.readFileSync(process.env.SOURCE_CONFIGURATIONS_PATH, "utf8")
);
const sourceConfig = configurations[process.env.SOURCE_API_NAME];
const url = sourceConfig.httpConnectionConfig.url;

HTTP 연결을 제공하지 않는 소스에는 httpConnectionConfig가 없을 수 있습니다. 소스별 연결 유형에 맞는 SDK를 사용하며 비밀이나 전체 구성 JSON을 로그에 출력하지 않습니다.

Python Source 클라이언트

python -m pip install 'foundry-compute-modules[sources]'

sources extra와 함께 설치하면 get_source()로 구성된 Source를 가져올 수 있습니다.

import os
from compute_modules.sources_v2 import get_source
from external_systems.sources import Source

source: Source = get_source(os.environ["SOURCE_API_NAME"])
secret = source.get_secret(os.environ["SOURCE_SECRET_NAME"])

https_connection = source.get_https_connection()
client = https_connection.get_client()
response = client.get(https_connection.url, timeout=30)
response.raise_for_status()
text = response.text

get_secret()은 지정한 비밀을, get_https_connection()은 소스에 구성된 연결을 반환합니다. 연결의 get_client()와 url을 사용하므로 연결 정책과 인증 설정을 직접 다시 작성하지 않아도 됩니다. HTTP 오류는 본문 문자열의 정상 결과로 처리하지 않습니다.

소스 API 이름이 마운트된 구성에 없으면 오류가 발생하며 sources extra가 없으면 설치가 필요하다는 ImportError가 발생합니다. 온프레미스 외부 시스템은 별도 연결 설정이 필요할 수 있습니다.

변경 반영

소스를 추가하거나 제거하기 전에 Compute Module을 중지해야 합니다. 실행 중에는 추가/제거할 수 없습니다.

변경반영 방법
소스의 네트워크 정책모듈 전체 재시작
자격 증명Compute Module의 rolling upgrade에 반영

소스의 네트워크 허용은 데이터 접근 권한과 별개입니다. Foundry API를 호출한다면 실행 모드에 맞는 애플리케이션 또는 빌드 토큰도 사용해야 합니다.