Quack 배포하기

Quack 배포하기 (Deploying Quack)

공개용 Quack 서버를 운영하기 위한 배포 방법을 모아 둔 페이지예요. 지금은 AWS EC2 레시피 하나가 준비되어 있고, 앞으로 더 추가될 예정이에요. 하나로 충분하다고요? 시작해 볼까요.

출처: 문서

본문

AWS EC2에서

공개용 Quack 서버를 띄우는 가장 빠른 방법은 익스텐션과 함께 관리되는 원클릭 AWS CloudFormation 템플릿을 쓰는 거예요. 이 템플릿은 DuckDB와 quack 익스텐션을 nginx와 Let's Encrypt TLS 뒤에서 실행하는 작은 EC2 인스턴스를 만들어 줘요. 그리고 출력으로 인스턴스별 토큰과 연결 URI(connection URI)를 보여줘요.

원클릭 실행 (One-Click Launch)

  1. Launch Stack URL을 엽니다.
  2. 오른쪽 아래의 Create stack을 클릭합니다.
  3. CREATE_COMPLETE가 뜰 때까지 약 2분 정도 기다립니다.
  4. 스택의 Outputs 탭을 엽니다.
  5. ConnectURL 값을 클릭하면 새 인스턴스에 미리 연결된 shell.duckdb.org 세션이 열리고, QuackURIToken을 복사해서 로컬 DuckDB 세션에서 연결할 수도 있어요(아래 참고).

스택은 기본으로 t3.micro 인스턴스를 사용하며, 실행 시 Parameters 페이지에서 다른 크기를 선택할 수 있어요. 지원 리전: us-east-1, us-east-2, us-west-1, us-west-2, eu-west-1, eu-central-1, ap-northeast-1, ap-southeast-1.

로컬 DuckDB에서 연결하기

스택의 Outputs 탭에서 QuackURIToken을 복사해서 아래처럼 넣어 보세요:

-- 세션당 한 번 자격 증명을 등록합니다.
CREATE SECRET quack_credentials (
    TYPE quack,
    SCOPE '⟨uri⟩',                  -- 예: 'quack:54.1.2.3.nip.io:443'
    TOKEN '⟨token⟩'
);

-- 방금 뭘 실행했는지 확인해 볼까요?
FROM quack_query('⟨uri⟩', 'FROM whoami()');

-- 평소 실행하던 다른 어떤 것이든 원격으로 그대로 전달돼요.
FROM quack_query('⟨uri⟩', 'SELECT 1 + 1');

ATTACH로 sticky session 만들기

ATTACH는 호출 사이에 서버 쪽 상태(임시 테이블, SET 변수)를 유지해 줘요. quack_query 단독으로는 이게 안 돼요.

ATTACH '⟨uri⟩' AS remote (TYPE quack);

-- 임시 테이블은 원격에 존재해요.
FROM quack_query_by_name('remote', 'CREATE TEMP TABLE t AS SELECT range AS x FROM range(10)');
FROM quack_query_by_name('remote', 'SELECT sum(x) FROM t');

-- 세션 설정도 유지돼요.
FROM quack_query_by_name('remote', 'SET threads = 8');
FROM quack_query_by_name('remote', 'SELECT current_setting(''threads'')');

해체하기 (Tearing Down)

인스턴스 사용이 끝나면 스택을 삭제하면 돼요:

aws cloudformation delete-stack --stack-name quack-demo --region us-east-1

아니면 CloudFormation 콘솔의 Delete 버튼을 눌러도 돼요.

스택이 만드는 것들

  • DuckDB와 quack 익스텐션을 nginx와 Let's Encrypt TLS 뒤에서 실행하는 공개 AMI(템플릿에 리전별 매핑이 내장됨) 기반의 AWS::EC2::Instance.
  • 포트 80(ACME challenge)과 443(HTTPS)을 여는 AWS::EC2::SecurityGroup.
  • RPC 서버가 준비되면 시그널을 보내는 AWS::CloudFormation::WaitCondition.
  • 준비된 URI, 인스턴스별 토큰, 그리고 공유 가능한 두 개의 shell.duckdb.org URL(QueryURL, ConnectURL)을 담은 CFN Outputs.

관리자를 위한 참고 (For Maintainers)

CloudFormation 템플릿, AMI 빌드 과정, 리전별 AMI 배포는 duckdblabs/duckdb-quack-infra에 있어요. AMI를 업데이트하거나 지원 리전 목록을 늘리는 작업은 거기서 이루어져요.

더 알아보기 (Learn more)

  • Quack 관련 문서에서 서버 구축과 연결 전반을 더 살펴볼 수 있어요.