자습서 5: 서비스 엔드포인트 권한 구성 및 테스트

소개

자습서 1에서는 동일한 역할을 사용하여 서비스를 만들고 테스트합니다. 서비스를 생성하는 역할은 서비스의 소유자 역할이므로, 해당 역할을 사용하여 서비스와 통신할 수 있습니다.

이 자습서에서는 다양한 역할을 사용하여 서비스와 통신하는 방법을 알아봅니다.

서비스 사양에서 정의하는 서비스 역할 을 사용하여 이 역할에 USAGE 권한을 부여합니다.

이 자습서에서는 자습서 1 을 다음과 같이 수정합니다.

  1. 서비스와 통신하는 데 사용할 새로운 역할을 만듭니다.

  2. 서비스 사양을 다음과 같이 수정합니다.

    • 하나의 엔드포인트 대신 두 개의 엔드포인트을 정의합니다. 두 번째 엔드포인트는 엔드포인트 권한이 어떻게 동작하는지 보여주기 위한 용도로만 추가되었습니다.

    • 두 개의 엔드포인트 중 하나에만 액세스할 수 있는 서비스 역할을 정의합니다.

  3. 서비스 엔드포인트 중 하나에 액세스할 수 있도록 새로 만든 역할에 서비스 역할을 부여합니다.

  4. 새로운 역할을 사용하여 서비스 엔드포인트와 통신합니다.

준비

다음과 같이 수정하여 공통 설정 을 따릅니다.

  1. 공통 설정 단계를 완료합니다.

  2. ACCOUNTADMIN 역할을 사용하여 다음 스크립트를 실행하여 다른 역할(service_function_user_role)을 만들고, user_name 을 Snowflake 사용자의 이름으로 바꿉니다. Echo 서비스를 생성한 후에는 이 역할을 사용하여 서비스와 통신합니다.

    USE ROLE ACCOUNTADMIN;
    CREATE ROLE service_function_user_role;
    GRANT ROLE service_function_user_role TO USER <user-name>;
    GRANT USAGE ON WAREHOUSE tutorial_warehouse TO ROLE service_function_user_role;
    
    Copy
  3. 자습서 1 의 1단계와 2단계에 따라 이미지를 만들고 계정의 리포지토리에 업로드합니다. 이 자습서의 일부로 서비스를 생성하게 되므로 3단계는 진행하지 마십시오.

서비스를 만듭니다.

  1. 이 단계에서 SQL 문의 올바른 컨텍스트에 있는지 확인하려면 다음을 실행합니다.

    USE ROLE test_role;
    USE DATABASE tutorial_db;
    USE SCHEMA data_schema;
    USE WAREHOUSE tutorial_warehouse;
    
    Copy
  2. 서비스를 생성하려면 test_role (서비스의 소유자 역할)을 사용하여 다음 명령을 실행합니다.

    CREATE SERVICE echo_service
      IN COMPUTE POOL tutorial_compute_pool
      FROM SPECIFICATION $$
        spec:
          containers:
          - name: echo
            image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:latest
            env:
              SERVER_PORT: 8000
              CHARACTER_NAME: Bob
            readinessProbe:
              port: 8000
              path: /healthcheck
          endpoints:
          - name: echoendpoint
            port: 8000
            public: true
          - name: echoendpoint2
            port: 8002
            public: true
        serviceRoles:
        - name: echoendpoint_role
          endpoints:
          - echoendpoint
          $$;
    
    Copy

    인라인 사양에 따라 echo_service 는 2개의 공개 엔드포인트를 노출하지만 서비스 역할(echoendpoint_role)은 엔드포인트 중 하나에 대해서만 USAGE 권한을 부여합니다.

  3. 서비스가 실행 중인지 확인합니다.

    SHOW SERVICES;
    SELECT SYSTEM$GET_SERVICE_STATUS('echo_service');
    DESCRIBE SERVICE echo_service;
    
    Copy
  4. test_role (서비스의 소유자 역할)을 사용하여 사양에 정의된 서비스 역할을 공통 설정의 일부로 생성한 새 역할(service_function_user_role)에 부여합니다. 또한 데이터베이스와 스키마에 대한 USAGE 권한도 부여합니다.

    USE ROLE test_role;
    USE DATABASE tutorial_db;
    USE SCHEMA data_schema;
    
    GRANT USAGE ON DATABASE tutorial_db TO ROLE service_function_user_role;
    GRANT USAGE ON SCHEMA data_schema TO ROLE service_function_user_role;
    GRANT SERVICE ROLE echo_service!echoendpoint_Role TO ROLE service_function_user_role;
    
    Copy

    이 서비스 역할은 echoendpoint 엔드포인트에 대한 service_function_user_role USAGE 권한을 부여합니다.

    서비스 역할 이름이 대소문자를 구분한다는 것을 보여주기 위해 예제에서는 echoendpoint_Role 역할 이름을 사용합니다.

서비스 사용

서비스와 통신하기 위한 서비스 함수를 만듭니다. (서비스의 소유자 역할이 아닌) service_function_user_role 을 사용하여 서비스 함수를 만들고 서비스를 사용합니다.

  1. 서비스 함수를 만듭니다.

    USE ROLE service_function_user_role;
    CREATE OR REPLACE FUNCTION my_echo_udf_try1 (InputText VARCHAR)
      RETURNS varchar
      SERVICE=echo_service
      ENDPOINT=echoendpoint
      AS '/echo';
    
    Copy
  2. 해당 역할에 액세스 권한이 없는 echoservice2 엔드포인트를 참조하는 다른 서비스 함수를 만듭니다. 따라서 이 명령은 실패 해야 합니다.

    CREATE OR REPLACE FUNCTION my_echo_udf_try2 (InputText varchar)
      RETURNS varchar
      SERVICE=echo_service
      ENDPOINT=echoendpoint2
      AS '/echo';
    
    Copy
  3. 서비스 함수를 사용합니다.

    SELECT my_echo_udf_try1('Hello');
    
    Copy

정리

생성한 리소스를 제거하려면 자습서 1 에서 만든 다른 리소스를 정리하는 단계의 단계를 따릅니다.

다음에는 무엇을 해야 합니까?

이제 이 자습서를 마쳤으므로 서비스 사용하기 로 돌아가서 다른 항목을 살펴볼 수 있습니다.