레지스트리(Registries)
레지스트리(Registries)
콜라보레이션에서 템플릿이나 데이터 오퍼링 같은 리소스를 사용하려면 먼저 레지스트리(registry)에 등록해야 해요. 레지스트리는 이러한 리소스를 저장하는 계정 수준의 컨테이너예요.
출처: Registries
본문
기능 — 일반 공개(Generally Available)
현재 지원 리전: 이 리전들에서 사용할 수 있어요.
정부 및 VPS 배포에서는 사용할 수 없어요.
개요
콜라보레이션에서 템플릿이나 데이터 오퍼링 같은 리소스를 사용하려면 먼저 레지스트리에 등록해야 해요. 레지스트리는 이러한 리소스를 저장하도록 설계된 계정 수준의 컨테이너예요. 등록되면 레지스트리의 어떤 리소스든 레지스트리에 접근 권한이 있고 해당 콜라보레이션에 필요한 링크 권한이 있는 계정의 모든 사용자가 콜라보레이션에 링크할 수 있어요. 레지스트리는 특정 콜라보레이션과 독립적이라는 점이 중요해요. 등록된 리소스는 그 계정 안에서 원하는 만큼의 콜라보레이션에 링크할 수도 있고, 아무 데도 링크하지 않을 수도 있어요.
각 Snowflake 계정은 기본 레지스트리(default registry)를 지원해요. 계정에 커스텀 레지스트리를 추가로 만들 수도 있어요. 커스텀 레지스트리는 리소스를 그룹화하고 접근을 관리하는 좋은 방법이에요. 예를 들어 영업(sales) 데이터용 커스텀 레지스트리와 지출(expenditure) 데이터용 레지스트리를 따로 만든 뒤, DCR 권한 및 커스텀 RBAC 역할을 통해 적절한 사용자에게 이 레지스트리 접근 권한을 부여할 수 있어요.
레지스트리 규칙
레지스트리에 관한 주요 규칙은 다음과 같아요:
- 레지스트리는 계정 수준의 객체예요. 사용자는 자신의 계정에 있는 레지스트리만 보고 접근할 수 있어요. 하지만 레지스트리의 리소스가 콜라보레이션에 링크되면, 그 리소스는 스펙에 따라 접근할 수 있는 사람이라면 누구에게나 보여요. 포함된 레지스트리에 대한 접근 권한은 필요 없어요.
- 각 커스텀 레지스트리는 단일 리소스 유형(템플릿, 데이터 오퍼링 등)을 지원해요. 리소스 유형은 레지스트리를 만들 때 지정해요. 기본 레지스트리는 모든 리소스 유형을 지원해요.
- 계정에 만들 수 있는 커스텀 레지스트리 수에는 제한이 없어요.
- 리소스를 등록할 때 선택적 registry name 파라미터로 커스텀 레지스트리를 지정할 수 있어요. 커스텀 레지스트리를 지정하지 않으면 리소스는 계정의 기본 레지스트리에 등록돼요.
- 등록한 템플릿이나 데이터 오퍼링은 리소스가 현재 콜라보레이션에 링크되어 있지 않는 한 UNREGISTER_TEMPLATE 또는 UNREGISTER_DATA_OFFERING을 호출해 제거할 수 있어요. 코드 스펙은 등록 취소할 수 없어요. 코드를 업데이트하려면 대신 새 버전을 등록하세요.
- 모든 사용자는 계정의 기본 레지스트리에 접근할 수 있어요. 하지만 커스텀 레지스트리는 처음에는 생성자에게만 비공개이며,
GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE을 호출해 다른 사용자에게 명시적으로 접근 권한을 부여해야 해요. - 계정에는 같은 리소스 유형을 저장하는 레지스트리가 여러 개 있을 수 있어요.
- 레지스트리의 리소스 수에는 최대치가 없어요.
- 리소스는 해당 계정의 해당 유형 리소스에 대해 모든 레지스트리에서 고유한 이름을 가져야 해요. 예를 들어 같은 계정에
sales라는 템플릿과sales라는 데이터 오퍼링은 가질 수 있지만, 같은 계정의 같은 레지스트리든 다른 레지스트리든sales라는 템플릿 두 개는 가질 수 없어요. 리소스 이름은 스펙에서 최상위name값으로 정의돼요. - 서로 다른 두 계정이 같은 이름과 유형의 리소스를 콜라보레이션에 링크하는 것은 허용돼요. 콜라보레이션 스펙에는 동일한 이름의 리소스가 표시되지만, 시스템은 어떤 리소스가 의도된 것인지 — 즉 그 이름을 가진 리소스가 콜라보레이션에 링크한 계정에서 사용된다는 것 — 알 수 있어요.
예시
이 예시는 커스텀 레지스트리를 만들고, 그 안에 템플릿을 등록하고, 새 역할에 그 레지스트리에 대한 읽기 접근 권한을 부여해요. 그 역할을 가진 사용자는 레지스트리의 템플릿을 콜라보레이션에 링크할 수 있어요.
-- Create a custom registry that can hold templates.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.CREATE_REGISTRY(
'SALES',
'TEMPLATE'
);
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE(
'SALES',
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: v1
type: sql_analysis
description: Joins two tables on hashed email and counts matches grouped by status.
template:
SELECT t1.status, COUNT(*)
FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
GROUP BY t1.status;
$$
);
-- Create a role and grant it access to the registry.
CREATE ROLE MARKETING_USERS;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.ADMIN.GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE(
'READ',
'REGISTRY',
'SALES',
'MARKETING_USERS'
);
-- Grant access to the registry for a user by assigning the role.
GRANT ROLE MARKETING_USERS to USER willy_loman;