2단계: Console에서 프록시 서비스(Google Cloud API Gateway) 만들기

Snowflake는 원격 서비스에 직접 데이터(HTTP POST 요청)를 보내지 않습니다. 대신, Snowflake는 Snowflake의 데이터를 원격 서비스(즉, GCP Cloud Function)로 릴레이하고 다시 되돌려 보내는 프록시 서비스로 데이터를 보냅니다.

이 항목에서는 외부 함수에 대한 프록시 서비스로 사용할 Google Cloud API Gateway를 만들고 구성하기 위한 지침을 제공합니다.

이 항목의 내용:

API 정의 만들기

로컬 파일 시스템에서 만들려는 API를 지정하는 YAML 형식의 구성 파일을 만들고 사용자 지정합니다. 이 파일의 확장명은 .yaml 또는 .yml 이어야 합니다.

구성 파일 템플릿:

swagger: '2.0'
info:
  title: API Gateway config for Snowflake external function.
  description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /<PATH>:
    post:
      summary: Echo the input.
      operationId: echo
      x-google-backend:
        address: <HTTP ENDPOINT TO ROUTE REQUEST TO>
        protocol: h2
      responses:
        '200':
          description: <DESCRIPTION>
          schema:
            type: string
Copy

다음 필드를 채우거나 업데이트합니다.

  1. <PATH> 를 고유한 이름으로 바꿉니다. 이것은 URLs에 포함될 것이므로, URLs에 유효한 문자만 사용하십시오. 예를 들어, demo-func-resource 를 입력합니다.

    이 구성 파일의 다른 필드와 달리, 콜론 뒤가 아니라 콜론 앞에 <PATH> 값을 입력합니다. 예를 들어, 다음이 알맞습니다.

    paths:
      /demo-func-resource:
    
    Copy

    경로 이름에는 어떤 경로 매개 변수 도 포함되면 안 됩니다. Google은 경로를 URL 로 설정할 때 경로 매개 변수를 지원합니다. 하지만 Snowflake는 CREATE EXTERNAL FUNCTION 문에 지정된 해당 URL에서 경로 매개 변수를 지원하지 않습니다.

  2. 바로 이전 단계의 경로(예: demo-func-resource)를 추적 워크시트의 Path Suffix 필드에 복사합니다.

  3. x-google-backend 필드 아래에서 address 필드를 찾아 <HTTP ENDPOINT TO ROUTE REQUEST TO> 를 추적 워크시트에 있는 Cloud Function Trigger URL 필드의 값으로 바꿉니다. 결과는 다음과 비슷한 형태여야 합니다.

    x-google-backend:
      address: https:// ...
    
    Copy

    URL을 따옴표로 묶으면 안 됩니다.

    URL은 Google에서 호스트하는 엔드포인트일 필요는 없으며, 어떤 HTTP 엔드포인트에 대한 경로라도 될 수 있습니다.

    1단계: Console에서 원격 서비스(Google Cloud Function) 만들기 에서 Require HTTPS 를 선택한 경우에는 address 필드에 입력하는 URL이 https 로 시작하도록 하십시오.

  4. 선택적으로, 다음 값을 업데이트할 수 있습니다.

    • info 섹션의 title.

    • info 섹션의 description.

    • paths 섹션의 post 하위 섹션에 있는 operationId.

    • paths 섹션의 post 하위 섹션에 있는 summary.

  5. 샘플 구성 파일을 검토합니다. 다음과 비슷한 형태여야 합니다.

    swagger: '2.0'
    info:
      title: "API Gateway config for Snowflake external function"
      description: "This configuration file connects the API Gateway resource to the remote service (Cloud Function)."
      version: 1.0.0
    schemes:
      - https
    produces:
      - application/json
    paths:
      /demo-func-resource:
        post:
          summary: "echo the input"
          operationId: echo
          x-google-backend:
            address: https://my_dev.cloudfunctions.net/demo-cloud-function-01
            protocol: h2
          responses:
            '200':
              description: echo result
              schema:
                type: string
    
    Copy

    참고

    이 구성에서는 이 자습서의 5단계: Console에서 프록시 서비스에 대한 GCP 보안 정책 만들기 에서 보안 설정을 할 때까지 게이트웨이가 공개된 상태로 남습니다.

  6. 선택적으로, 그 사이에 아무도 게이트웨이를 사용할 수 없도록 하려면 이 선택적 단계에 설명되어 있는 대로 잘못된 임시 서비스 계정 이름(google_service_account)을 사용하는 구성 파일에 보안 정의를 추가하십시오. 이 단계에서 이 보안 정의를 추가하는 것은 5단계: Console에서 프록시 서비스에 대한 GCP 보안 정책 만들기 에서 보안 구성을 마칠 때까지 외부 함수를 테스트할 수 없다는 뜻입니다. 특히, 4단계: Snowflake에서 GCP를 위한 외부 함수 만들기 에서 외부 함수를 테스트하는 명령은 아직 작동하지 않습니다.

    1. 구성 파일의 schemes 섹션 바로 위에 똑같은 들여쓰기 수준에서 다음 securityDefinitions 섹션을 추가합니다.

      securityDefinitions:
        <security-def-name>:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          x-google-issuer: "google_service_account"
          x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/google_service_account"
      
      Copy
      • <보안-정의-이름> 을 고유한 보안 정의 이름(예: snowflakeAccess01)으로 바꿉니다.

      • 추적 워크시트의 Security Definition Name 필드에 이 이름을 기록합니다.

    2. 위에서 만든 보안 정의를 참조하도록 구성 파일의 post: 섹션을 업데이트합니다. operationId 필드 아래에 다음을 추가합니다.

      security:
        - <security-def-name>: []
      
      Copy
      • operationId 필드와 같은 수준으로 들여쓰기가 되어 있는지 확인합니다.

      • <보안-정의-이름> 을 추적 워크시트에 있는 Security Definition Name 필드의 값으로 바꿉니다.

      • 위에 나타낸 것처럼, 보안 정의 이름 앞에 하이픈과 공백을 포함해야 합니다.

      • 콜론 뒤에 빈 대괄호([])를 포함해야 합니다.

      예:

      paths:
        /demo-func-resource:
          post:
            summary: "echo the input"
            operationId: echo
            security:
              - snowflakeAccess01: []
            x-google-backend:
              address: https://my_dev.cloudfunctions.net/demo-cloud-function-01
              protocol: h2
      
      Copy
  7. 구성 파일을 저장합니다.

  8. 추적 워크시트의 Configuration File Name 필드에 파일 경로와 이름을 기록합니다.

API 구성 파일에 대한 자세한 내용은 다음 GCP 설명서를 참조하십시오.

API Gateway 만들기

API Gateway를 만드는 방법은 다음과 같습니다.

  1. GCP API를 만듭니다.

  2. API 구성을 만듭니다.

  3. API 구성을 사용하여 게이트웨이를 만듭니다.

GCP API 만들기

이 단계에서는 하나 이상의 API Gateway와 하나 이상의 구성 파일을 포함할 수 있는 컨테이너인 GCP API 를 만듭니다.

  1. 아직 Google Cloud API Gateway 화면으로 이동하지 않았다면 GCP 메뉴를 클릭하고 API Gateway 를 선택하여 이 화면으로 이동하십시오.

  2. CREATE GATEWAY 를 클릭합니다.

  3. Display NameAPI ID 를 입력합니다(예: demo-api-display-name-for-external-function1demo-api-id-for-external-function1).

    나중에 외부 함수를 만들기 위해 이러한 값을 입력할 필요가 없으므로, 추적 워크시트에 이들 값을 기록하지 않아도 됩니다. 하지만 작업이 끝나면 삭제할 수 있도록 API ID를 기록해둘 수 있습니다.

API 구성 만들기

구성 파일을 콘솔에 업로드하면 API 구성 이 생성됩니다.

  1. 화면의 API Config 섹션으로 스크롤합니다.

  2. Upload an API Spec 이 포함된 필드를 검색합니다.

    BROWSE 를 클릭하고 구성 파일을 선택합니다. 구성 파일의 이름은 추적 워크시트의 Configuration File Name 필드에 기록되었습니다.

  3. Display Name 이 포함된 필드에 표시 이름을 입력합니다.

  4. 서비스 계정을 선택합니다.

    샘플 함수를 만든 경우 Select a Service Account 가 포함된 필드에서 App Engine default service account 를 선택합니다.

    (샘플로 사용할 것이 아니라) 프로덕션 환경에서 사용할 함수를 만들 경우 다른 서비스 계정을 선택할 수 있습니다.

    선택한 서비스 계정은 Cloud Function을 호출할 권한을 포함한 알맞은 권한이 있어야 합니다.

API 구성을 사용하여 게이트웨이 만들기

  1. 화면의 Gateway details 섹션으로 스크롤합니다.

  2. 새 API Gateway의 Display Name 을 입력합니다.

  3. Location 필드를 클릭하고 알맞은 리전(예: us-central1)을 선택합니다.

  4. CREATE GATEWAY 를 클릭합니다.

    그러면 APIs 화면으로 이동하며 사용자에게 APIs 목록이 표시됩니다.

    새 API가 즉시 표시되지 않으면 몇 분 정도 기다린 다음 Refresh 버튼을 클릭합니다.

  5. API의 Managed Service 값을 추적 워크시트의 Managed Service Identifier 필드에 복사합니다.

  6. 이 시점 현재는 아직 APIs 목록이 보일 것입니다. API의 이름을 클릭합니다.

    4개의 탭 OVERVIEW, DETAILS, CONFIGS, GATEWAYS 가 표시됩니다.

  7. GATEWAYS 탭을 클릭합니다.

  8. Gateway URL 을 추적 워크시트의 Gateway Base URL 필드에 복사합니다.