자습서 3: 컨테이너로 앱 업그레이드하기

소개

공급자는 Snowflake Native App Framework 를 사용해 Snowflake 데이터 클라우드 내에서 앱을 빌드, 판매 및 배포할 수 있습니다. 공급자는 핵심 Snowflake 기능을 활용하여 데이터 및 애플리케이션 로직을 컨슈머와 공유하는 앱을 만들 수 있습니다. 또한 앱은 Snowpark Container Services를 구현하여 Snowflake 생태계 내에서 컨테이너화된 앱의 배포, 관리 및 확장을 용이하게 할 수 있습니다.

공급자는 Snowflake Native App Framework 에서 앱을 업데이트하고 새 버전 또는 패치를 컨슈머에게 게시할 수 있습니다. 이 자습서에서는 다음 작업을 수행하는 방법을 설명합니다.

  • 앱에 버전 이니셜라이저를 추가합니다.

  • 앱의 변경 사항에 대한 버전 및 패치를 만듭니다.

  • 컨슈머 계정에서 앱을 업그레이드합니다.

필수 자습서

이 자습서에서는 기본 Snowflake Native App 을 개발하는 방법을 알고 있고 Snowflake Native App with Snowpark Container Services 를 만들 수 있다고 가정합니다. 이 자습서는 다음 자습서를 완료하여 얻은 지식을 기반으로 합니다.

이 자습서를 따라 컨테이너를 사용하여 앱을 업그레이드하기 전에 이 두 자습서를 모두 완료했는지 확인하십시오.

조심

이 자습서는 자습서 2: 컨테이너로 앱 만들기 에서 만든 앱을 기반으로 합니다. 계정에 애플리케이션 파일과 Snowflake 오브젝트가 없는 경우 이 자습서를 시작하기 전에 해당 자습서를 다시 진행해야 합니다. 자세한 내용은 이전 자습서의 앱이 계정에 있는지 확인하기 섹션을 참조하십시오.

이 자습서에서 배우는 내용

이 자습서는 자습서 2: 컨테이너로 앱 만들기 에서 생성한 컨테이너로 앱을 확장합니다. 이 자습서에서는 다음을 수행하는 방법을 배웁니다.

  • 버전 이니셜라이저 콜백 함수를 사용하여 서비스 업그레이드 및 장애를 처리하는 방법.

  • 앱의 버전 정의를 만드는 방법.

  • 앱을 업그레이드하는 방법.

  • 앱의 업그레이드 실패를 시뮬레이션하는 방법.

  • 앱에 대한 패치를 만들어 오류를 수정하는 방법.

이전 자습서의 앱이 계정에 있는지 확인하기

자습서 2: 컨테이너로 앱 만들기 에서 만든 컨테이너가 포함된 앱이 계정에서 여전히 가용성 있는지 확인하려면 다음 작업을 수행합니다.

조심

다음 작업 중 하나라도 성공적으로 완료되지 않으면 자습서 2: 컨테이너로 앱 만들기 단계를 다시 수행해야 합니다.

  1. Snow CLI 가 올바르게 구성되었는지 확인하려면 다음 명령을 실행합니다.

    snow connection test -c tut-connection
    
    Copy

    이 명령의 출력은 다음과 비슷해야 합니다.

    +----------------------------------------------------------------------------------+
    | key             | value                                                          |
    |-----------------+----------------------------------------------------------------|
    | Connection name | tut-connection                                                 |
    | Status          | OK                                                             |
    | Host            | USER_ACCOUNT.snowflakecomputing.com                            |
    | Account         | USER_ACCOUNT                                                   |
    | User            | tutorial_user                                                  |
    | Role            | TUTORIAL_ROLE                                                  |
    | Database        | TUTORIAL_IMAGE_DATABASE                                        |
    | Warehouse       | TUTORIAL_WAREHOUSE                                             |
    +----------------------------------------------------------------------------------+
    
    Copy

    이 명령은 다음 요구 사항을 확인합니다.

    • Snow CLI 연결이 작동 중입니다.

    • TUTORIAL_ROLE 이 존재합니다.

    • TUTORIAL_WAREHOUSE 가 존재합니다.

  2. 다른 요구 사항인 Snowflake 오브젝트가 존재하는지 확인하려면 워크시트에서 다음 명령을 실행합니다.

    USE ROLE tutorial_role;
    
    Copy
    SHOW DATABASES LIKE 'tutorial_image_database';
    
    Copy
    SHOW SCHEMAS LIKE 'tutorial_image_schema';
    
    Copy
    SHOW IMAGE REPOSITORIES LIKE 'tutorial_image_repo';
    
    Copy

    이러한 각 명령은 각 Snowflake 오브젝트의 이름을 반환해야 합니다.

  3. 서비스가 아직 실행 중인지 확인하려면 워크시트에서 다음 명령을 실행합니다.

    CALL na_spcs_tutorial_app.app_public.service_status();
    
    Copy
  4. 로컬 디렉터리 구조가 다음 예시와 같은지 확인하십시오.

    ├── app
        └── manifest.yml
        └── README.md
        └── setup_script.sql
    ├── README.md
    ├── service
        └── echo_service.py
        ├── echo_spec.yaml
        ├── Dockerfile
        └── templates
            └── basic_ui.html
    ├── snowflake.yml
    
    Copy

    snow app run 명령으로 생성된 앱 파일이 포함된 output 폴더가 표시될 수도 있습니다.

애플리케이션 오브젝트 삭제하기

자습서 2: 컨테이너로 앱 만들기 섹션을 통해 작업할 때 만든 애플리케이션이 계정에 여전히 존재하는 경우 이 자습서를 계속 진행하기 전에 애플리케이션 오브젝트를 삭제해야 합니다.

참고

개발 모드에서 스테이징된 파일로 직접 만든 앱은 업그레이드할 수 없으므로 기존 앱을 삭제해야 합니다.

  1. 이전 자습서(na_spcs_tutorial_app)의 앱이 계정에 있는지 확인하려면 워크시트에서 다음 명령을 실행합니다.

    SHOW APPLICATIONS LIKE 'na_spcs_tutorial_app';
    
    Copy
  2. 이 명령의 출력에 na_spcs_tutorial_app 앱이 나타나면 워크시트에서 다음 명령을 실행하여 앱을 삭제합니다.

    USE ROLE tutorial_role;
    DROP APPLICATION IF EXISTS na_spcs_tutorial_app CASCADE;
    
    Copy

이 섹션에서 완료한 내용

이 섹션에서는 이전 자습서의 애플리케이션 파일과 Snowflake 오브젝트가 계정에서 여전히 작동하는지 확인했습니다.

다음 섹션에서는 Snowflake Native App Framework 에서 버전 및 업그레이드에 대해 자세히 알아볼 수 있습니다.

버전, 패치 및 업그레이드 이해하기

이 섹션에서는 이 자습서에서 다루는 개념에 대해 소개합니다.

  • 버전 및 패치

  • 업그레이드

  • 버전 이니셜라이저

버전 및 패치 정보

Snowflake Native App Framework 의 버전은 버전과 패치 번호의 조합입니다. 이는 애플리케이션 패키지에 정의되어 있습니다.

. rst-class:: bulleted-definition-list

버전

일반적으로 Snowflake Native App 에 대한 주요 업데이트가 포함되어 있습니다. 버전은 애플리케이션 패키지에 정의됩니다.

패치

일반적으로 Snowflake Native App 에 대해 더 작은 업데이트가 포함됩니다. 버전과 마찬가지로, 패치도 애플리케이션 패키지에 정의됩니다.

참고

애플리케이션 패키지에는 한 번에 두 개의 활성 버전만 있을 수 있습니다. 앱의 한 버전에 최대 130개의 패치가 있을 수 있습니다.

업그레이드 정보

Snowflake Native App Framework 컨텍스트 내에서 업그레이드는 컨슈머 계정에 설치된 Snowflake Native App 의 버전 또는 패치에 대한 업데이트입니다. Snowflake Native App Framework 는 다음 두 가지 유형의 업그레이드를 지원합니다.

자동 업그레이드

자동 업그레이드는 공급자가 시작하는 업그레이드입니다. 새 버전이나 패치가 나올 경우 공급자는 애플리케이션 패키지의 릴리스 지시문을 수정합니다. 그러면 릴리스 지시문에 지정된 앱의 설치된 모든 인스턴스가 자동으로 업그레이드됩니다.

수동 업그레이드

수동 업그레이드는 공급자의 커뮤니케이션에 대한 응답으로 컨슈머가 시작하는 업그레이드입니다. 수동 업그레이드는 공급자가 버그 수정과 같은 업데이트를 컨슈머에게 신속히 릴리스해야 할 때 유용합니다.

참고

이 자습서에서는 컨테이너가 있는 앱의 수동 업그레이드를 수행하는 방법에 대해 설명합니다.

새 버전이나 패치가 나올 경우 공급자는 애플리케이션 패키지의 릴리스 지시문을 수정한 다음 컨슈머에게 새 버전을 사용할 수 있음을 알립니다.

그러면 컨슈머는 계정에서 ALTER APPLICATION 명령을 실행하는 방법으로 업그레이드를 수행합니다. 일반적으로 컨슈머는 수동 업그레이드를 통해 자동 업그레이드보다 더 빠르게 설치된 앱을 업그레이드할 수 있습니다.

버전 이니셜라이저 정보

버전 이니셜라이저는 서비스 또는 기타 관련 프로세스를 시작하거나 업그레이드하는 데 사용됩니다. 버전 이니셜라이저는 매니페스트 파일에 정의되고 설정 스크립트에서 구현되는 콜백 저장 프로시저입니다. 버전 이니셜라이저 콜백 함수는 다음과 같은 상황에서 호출됩니다.

  • 설치하는 동안 앱의 설치 스크립트가 오류 없이 완료되면 버전 이니셜라이저가 호출됩니다.

  • 업그레이드하는 동안 버전 이니셜라이저가 호출되는 두 가지 시나리오가 있습니다.

    • 새 버전의 설치 스크립트가 성공하면 새 버전의 버전 이니셜라이저가 호출됩니다.

    • 새 버전의 설치 스크립트나 버전 이니셜라이저이 실패하면 이전 버전의 버전 이니셜라이저가 호출됩니다. 이렇게 하면 이전 버전의 버전 이니셜라이저에서 ALTER SERVICE 명령을 사용하여 서비스를 이전 버전으로 되돌릴 수 있습니다.

앱에 버전 이니셜라이저 추가하기

이전 자습서에서는 컨테이너를 사용하여 기본 앱을 만들었습니다. 이 섹션에서는 이 앱을 업데이트하여 앱에 버전 이니셜라이저를 추가합니다. 애플리케이션 패키지에 버전을 추가할 수도 있습니다.

매니페스트 파일에 버전 이니셜라이저를 추가합니다

버전 이니셜라이저는 앱의 매니페스트 파일에 정의되어 있습니다. 버전 이니셜라이저를 정의하려면 manifest.yml 파일 끝에 다음 코드를 추가합니다.

lifecycle_callbacks:
  version_initializer: app_public.version_init
Copy

버전 이니셜라이저로 사용되는 저장 프로시저의 스키마와 이름을 지정합니다. 다음 섹션에서는 version_init 저장 프로시저를 구현합니다.

버전 이니셜라이저를 설정 스크립트에 저장 프로시저로 추가하기

이전 섹션에서는 매니페스트 파일에 버전 이니셜라이저의 이름을 추가했습니다. 이 섹션에서는 저장 프로시저에 대한 코드를 설정 스크립트에 추가합니다.

  1. setup_script.sql 파일 끝에 다음 코드를 추가합니다.

CREATE OR REPLACE PROCEDURE app_public.version_init()
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
can_create_compute_pool BOOLEAN;  -- Flag to check if 'CREATE COMPUTE POOL' privilege is held
BEGIN
-- Check if the account holds the 'CREATE COMPUTE POOL' privilege
   SELECT SYSTEM$HOLD_PRIVILEGE_ON_ACCOUNT('CREATE COMPUTE POOL')
      INTO can_create_compute_pool;

   ALTER SERVICE IF EXISTS core.echo_service
      FROM SPECIFICATION_FILE = 'service/echo_spec.yaml';
   IF (can_create_compute_pool) THEN
      -- When installing app, the app has no 'CREATE COMPUTE POOL' privilege at that time,
      -- so it will not execute the code below

      -- Since the ALTER SERVICE is an async process, wait for the service to be ready
      SELECT SYSTEM$WAIT_FOR_SERVICES(120, 'core.echo_service');
   END IF;
   RETURN 'DONE';
END;
$$;
Copy

변경된 파일 업로드 및 버전 생성하기

설정 스크립트를 수정한 후, 수정된 파일을 스테이지에 업로드하고 다음 절차를 수행하여 버전을 생성합니다.

  1. 다음 명령을 실행하여 파일을 업로드하고 버전을 만듭니다.

    snow app version create v1 -c tut-connection
    
    Copy

snow app version 명령은 업데이트된 파일을 스테이지에 업로드합니다. 애플리케이션 패키지와 파일이 이미 있는 경우 이 명령은 변경된 파일만 업로드합니다.

이 명령은 기본 패치가 0으로 설정된 v1이라는 새 버전의 앱을 만듭니다.

앱의 기본 릴리스 지시문 설정하기

이전 섹션에서는 변경된 파일을 업로드하고 앱의 버전 v1 을 만들었습니다. 이 섹션에서는 기본 릴리스 지시문을 v1 버전을 사용하도록 설정합니다.

기본 릴리스 지시문을 업데이트하려면 워크시트에서 다음 명령을 실행합니다.

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v1 PATCH=0;
Copy

앱의 기본 릴리스 지시문을 설정하면 컨슈머가 계정에 앱을 설치할 때 해당 버전이 자동으로 설치됩니다. 다음 섹션에서는 릴리스 지시문에 따라 로컬 계정에 앱을 만듭니다.

앱 만들기 및 테스트

이제 버전을 추가하고 기본 릴리스 지시문을 설정했으므로 앱을 만들고 요구 사항을 충족하는 권한을 부여할 수 있습니다.

  1. 다음 명령을 실행하여 릴리스 지시문에서 앱을 만듭니다.

    snow app run --from-release-directive -c tut-connection
    
    Copy

    이 명령은 이전 섹션에서 정의한 릴리스 지시문을 사용하여 앱을 만듭니다.

  2. 앱을 만든 후 워크시트에서 다음 명령을 실행하여 앱을 실행할 수 있도록 앱에 필요한 권한을 부여합니다.

    GRANT CREATE COMPUTE POOL ON ACCOUNT TO APPLICATION na_spcs_tutorial_app;
    GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO APPLICATION na_spcs_tutorial_app;
    
    Copy
  3. 워크시트에서 다음 명령을 실행하여 setup_script.sql 파일에서 정의한 app_public.start_app 프로시저를 호출합니다.

    CALL na_spcs_tutorial_app.app_public.start_app();
    
    Copy
  4. 워크시트에서 다음 명령을 실행하여 함수가 생성되었는지 확인합니다.

    SHOW FUNCTIONS LIKE '%my_echo_udf%' IN APPLICATION na_spcs_tutorial_app;
    
    Copy
  5. 서비스가 생성되었고 정상인지 확인하려면 워크시트에서 다음 명령을 실행합니다.

    CALL na_spcs_tutorial_app.app_public.service_status();
    
    Copy
  6. 서비스 함수를 호출하여 서비스에 요청을 보내고 응답을 확인하려면 워크시트에서 다음 명령을 실행합니다.

    SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
    
    Copy
  7. 앱에 대한 정보를 보려면 워크시트에서 다음 명령을 실행하십시오.

    DESC APPLICATION na_spcs_tutorial_app;
    
    Copy

이 섹션에서 학습한 내용 복습하기

이 섹션에서는 다음 작업을 완료했습니다.

  • 버전 이니셜라이저와 이를 매니페스트 파일 및 설정 스크립트에 추가하는 방법에 대해 알아보았습니다.

  • Snowflake Native App Framework 에서 버전 및 패치에 대한 기본 사항을 알아보았습니다.

  • 앱의 특정 버전을 가리키도록 기본 릴리스 지시문을 설정했습니다.

  • 릴리스 지시문에 따라 앱을 설치했습니다.

  • 저장 프로시저를 호출하여 앱을 테스트하고 DESCRIBE APPLICATION 명령을 사용하여 앱의 상태를 확인했습니다.

참고

이 자습서에서는 로컬 계정에 애플리케이션 오브젝트를 만들고 DESCRIBE APPLICATION 명령을 사용했습니다. 이는 컨슈머 계정에서 앱의 동작을 모방합니다.

앱을 업데이트하고 새 버전으로 업그레이드하기

이전 섹션에서는 버전 이니셜라이저를 저장 프로시저로 추가하여 원래 앱을 수정했습니다. 또한 기본 릴리스 지시문을 기반으로 앱의 새 버전인 버전 v1을 만들었습니다.

이 섹션에서는 앱을 다시 변경하고, 버전 v2를 만들고, 기본 릴리스 지시문을 업데이트하고, 설치된 앱을 버전 v1에서 버전 v2로 업그레이드합니다.

앱에 새 테이블 추가하기

앱에 새 함수를 추가하는 시뮬레이션을 하려면 설정 스크립트에 새 테이블을 추가합니다.

  1. setup_script.yml 끝에 다음 명령을 추가합니다.

    CREATE TABLE IF NOT EXISTS core.setup_script_run(run_at TIMESTAMP);
    GRANT SELECT ON TABLE core.setup_script_run to APPLICATION ROLE app_user;
    INSERT INTO core.setup_script_run(run_at) values(current_timestamp());
    
    Copy

앱 버전 만들기

수정된 설정 스크립트를 스테이지에 업로드하고 앱의 버전 v2를 만듭니다.

  1. na-spcs-tutorial 폴더에서 다음 명령을 실행합니다.

snow app version create v2 -c tut-connection
Copy

이 명령은 기본 패치가 0으로 설정된 v2라는 새 버전의 앱을 만듭니다.

snow app version 명령은 업데이트된 파일을 스테이지에 업로드합니다. 애플리케이션 패키지와 파일이 이미 있는 경우 이 명령은 변경된 파일만 업로드합니다.

앱의 기본 릴리스 지시문 설정하기

앱의 버전 v2 를 만든 후 워크시트에서 다음 명령을 실행하여 애플리케이션 패키지에 대한 릴리스 지시문을 설정합니다.

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=0;
Copy

이 명령은 릴리스 지시문을 버전 v2 와 패치 0 으로 설정합니다.

앱을 v1에서 v2로 업그레이드하기

이제 릴리스 지시문이 새 버전을 가리키도록 업데이트했으므로 워크시트에서 다음 명령을 실행하여 앱을 업그레이드합니다.

snow app run --from-release-directive -c tut-connection
Copy

업그레이드된 앱 테스트하기

앱을 업그레이드한 후 워크시트에서 다음 명령을 실행하여 앱을 테스트합니다.

SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
Copy

이 섹션에서 학습한 내용 복습하기

축하합니다! 앱을 버전 v1 에서 버전 v2 로 성공적으로 업그레이드했습니다.

이 섹션에서는 다음 작업을 완료했습니다.

  • 테이블을 포함하도록 앱을 업데이트했습니다.

  • 이 업데이트를 기반으로 앱의 새 버전을 만들었습니다.

  • 기본 릴리스 지시문이 새 버전을 가리키도록 업데이트했습니다.

  • 앱을 수동으로 업그레이드했습니다.

다음 섹션에서는 앱의 서비스를 업그레이드하고 설정 스크립트에 의도적으로 오류를 추가하여 업그레이드 프로세스의 오류를 시뮬레이션합니다.

업그레이드 오류 시뮬레이션하기

이전 섹션에서는 앱에 새 테이블을 추가하고, 새 버전을 만들고, 앱을 업그레이드했습니다.

이 섹션에서는 서비스 사양을 업데이트하여 서비스 업데이트를 시뮬레이션합니다. 또한 업그레이드 실패를 시뮬레이션하기 위해 설정 스크립트에 의도적인 오류를 추가하여 업그레이드 실패 시 버전 이니셜라이저가 서비스 업그레이드를 처리하는 방법을 보여줍니다.

서비스 사양 파일 업데이트하기

이 섹션에서는 앱의 서비스 사양을 업데이트하여 서비스 변경을 시뮬레이션합니다.

  1. service/echo_spec.yaml 파일에서 CHARACTER_NAME 값을 Bob 에서 Tom 으로 변경합니다.

    이 변경으로 인해 서비스는 다음 메시지를 반환합니다.

    `Tom said hello.`
    
    Copy

이 변경의 목적은 다음 섹션에서 업그레이드를 시도한 후 실행 중인 서비스 버전을 확인할 수 있도록 하기 위한 것입니다.

의도적인 오류를 포함하도록 설정 스크립트 업데이트하기

업그레이드 프로세스 중 오류를 시뮬레이션하려면 존재하지 않는 테이블에 대해 SELECT 문자를 추가하여 설정 스크립트에 의도적인 오류를 도입합니다.

setup_script.sqlapp_public.version_init() 프로시저 끝에 다음 문을 추가합니다.

SELECT * FROM table_does_not_exist;
Copy

이 문은 구문상으로는 올바르지만 존재하지 않는 테이블을 참조합니다. 업그레이드 중에 설정 스크립트가 실행될 때 오류가 발생합니다.

이렇게 변경한 후 app_public.version_init() 함수는 다음 예시와 같은 형태여야 합니다.

GRANT USAGE ON PROCEDURE app_public.service_status() TO APPLICATION ROLE app_user;

CREATE OR REPLACE PROCEDURE app_public.version_init()
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
  -- Flag to check if 'CREATE COMPUTE POOL' privilege is held
  can_create_compute_pool BOOLEAN;
BEGIN
   -- Check if the account holds the 'CREATE COMPUTE POOL' privilege
   SELECT SYSTEM$HOLD_PRIVILEGE_ON_ACCOUNT('CREATE COMPUTE POOL')
     INTO can_create_compute_pool;

   ALTER SERVICE IF EXISTS core.echo_service
     FROM SPECIFICATION_FILE = 'service/echo_spec.yaml';
   IF (can_create_compute_pool) THEN
     -- When installing app, the app has no 'CREATE COMPUTE POOL' privilege at that time,
     -- so it will not execute the code below

     -- Since the ALTER SERVICE is an async process, wait for the service to be ready
     SELECT SYSTEM$WAIT_FOR_SERVICES(120, 'core.echo_service');
   END IF;

   -- trigger an error. The upgrade fails
   SELECT * FROM non_exist_table;

   RETURN 'DONE';
END;
$$;
Copy

수정된 파일을 업로드하고 새 패치 만들기

이전 섹션에서는 앱의 서비스 사양 및 설정 스크립트를 업데이트했습니다.

파일을 업로드하고 앱에 대한 새 패치를 만들려면 다음 작업을 수행하십시오.

  1. 다음 명령을 실행하여 애플리케이션 패키지에 패치를 추가합니다.

snow app version create v2 --patch 1 -c tut-connection
Copy
  1. 메시지가 표시되면 y 를 입력하여 애플리케이션 패키지에 새 패치를 추가합니다.

앱의 기본 릴리스 지시문 설정하기

이전 섹션에서는 파일을 업로드하고 업데이트를 위한 패치를 만들었습니다. 패치에 대한 기본 릴리스 지시문을 설정하려면 워크시트에서 다음 명령을 실행합니다.

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=1;
Copy

이 명령은 앱이 1 을 패치하도록 해당 패치를 설정합니다.

앱 업그레이드하기

이전 섹션에서는 앱을 업데이트하고 새 패치를 만들었습니다. 이 섹션에서는 이전 섹션에서 소개한 오류로 인해 앱이 실패할 것으로 예상하여 앱을 업그레이드합니다.

앱을 업그레이드하려면 다음 명령을 실행하십시오.

snow app run --from-release-directive -c tut-connection
Copy

앱의 업그레이드 상태를 보려면 워크시트에서 다음 명령을 실행합니다.

DESC APPLICATION na_spcs_tutorial_app;
Copy

이 명령은 업그레이드 상태, 업그레이드 시도 횟수, 업그레이드 실패 사유 등 앱에 대한 정보를 표시합니다.

업그레이드가 실패하면 Snowflake CLI 에 다음 메시지가 반환됩니다.

Object 'TABLE_DOES_NOT_EXIST' does not exist or not authorized.'
Copy

또한 업그레이드가 실패한 후 DESC APPLICATION 명령을 실행하면 업그레이드와 관련된 다음 속성이 표시됩니다.

속성

upgrade_state

FAILED

upgrade_failure_reason

upgrade_failure_reason[ErrorCode 2003] Uncaught exception of type ‘STATEMENT_ERROR’ on line 89 at position 0 : Uncaught exception of type ‘STATEMENT_ERROR’ on line 19 at position 3 : SQL compilation error: Object ‘TABLE_DOES_NOT_EXIST’ does not exist or not authorized.

앱 서비스를 실행하여 실행 중인 서비스 버전 확인하기

이전 섹션에서는 버전 v2, 패치 0에서 버전 v2, 패치 1로 업그레이드할 때 발생하는 장애를 시뮬레이션했습니다.

현재 실행 중인 서비스의 버전을 확인하려면 워크시트에서 다음 명령을 실행하십시오.

SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
Copy

이 명령은 다음 문자열을 반환합니다.

Bob said hello
Copy

여기에서는 업그레이드에 실패했기 때문에 앱이 v2, 패치 0에서 서비스를 계속 실행하는 것을 볼 수 있습니다.

그러나 앱에 버전 이니셜라이저을 포함하지 않았다면 앱 업그레이드가 실패하더라도 업그레이드 프로세스를 통해 서비스가 v2, 패치 1로 업그레이드되었을 것입니다. 앱 업그레이드에 실패하면 버전 이니셜라이저는 서비스 버전이 업그레이드되지 않고 앱과 계속 동기화되도록 합니다.

이 섹션에서 학습한 내용 복습하기

이 섹션에서는 다음 작업을 완료했습니다.

  • 업그레이드 프로세스의 오류를 시뮬레이션하기 위해 설정 스크립트에 오류를 도입했습니다.

  • 장애 발생 후 앱과 서비스의 버전을 모두 확인했습니다.

  • 업그레이드에 실패했을 때 버전 이니셜라이저가 서비스 버전이 앱 버전과 동기화되도록 하는 방법을 알아보았습니다.

업그레이드 오류를 수정하는 패치 만들기

이전 섹션에서는 앱의 설정 스크립트에서 오류가 발생했다고 소개했습니다. 앱을 업그레이드하면 앱과 서비스가 모두 버전 v2 패치 0을 사용하여 계속 실행되는 것을 확인할 수 있습니다.

이 섹션에서는 앱의 설정 스크립트를 수정하여 오류를 수정하고, 업데이트를 위한 패치를 만들고, 앱을 업그레이드합니다.

설정 스크립트 수정하기

이전 섹션에서 소개한 의도적인 오류를 수정하려면 setup_script.yaml 파일에서 다음 문을 제거합니다.

SELECT * FROM table_does_not_exist;
Copy

업데이트된 파일을 업로드하고 새 패치 만들기

수정된 설정 스크립트를 스테이지에 업로드하고 새 패치를 만들려면 다음 작업을 수행합니다.

  1. 다음 명령을 실행하여 앱에 대한 새 패치를 만듭니다.

  2. 메시지가 표시되면 y 를 입력하여 애플리케이션 패키지에 새 패치를 추가합니다.

기본 릴리스 지시문 업데이트하기

이전 섹션에서 앱용 패치 2 를 만들었습니다. 패치에 대한 기본 릴리스 지시문을 설정하려면 워크시트에서 다음 명령을 실행합니다.

ALTER APPLICATION PACKAGE na_spcs_tutorial_pkg
  SET DEFAULT RELEASE DIRECTIVE VERSION=v2 PATCH=2;
Copy

앱을 업그레이드하고 서비스 버전 확인하기

새 버전을 만들고 기본 릴리스 지시문을 설정한 후 다음 작업을 수행하여 앱을 업그레이드하고 서비스를 테스트합니다.

  1. 앱을 버전 v2 패치 0 에서 버전 v2 패치 2 로 업그레이드하려면 다음 명령을 실행하십시오.

    snow app run --from-release-directive -c tut-connection
    
    Copy
  2. 현재 실행 중인 서비스의 버전을 확인하려면 워크시트에서 다음 명령을 실행합니다.

    SELECT na_spcs_tutorial_app.core.my_echo_udf('hello');
    
    Copy
  3. 현재 설치된 버전을 포함하여 앱의 상태를 보려면 다음 명령을 실행합니다.

    DESC APPLICATION na_spcs_tutorial_app;
    
    Copy

    출력에서 version 속성은 v2 이고 패치 속성은 2 입니다.

이 섹션에서 학습한 내용 복습하기

축하합니다! 업그레이드 실패 후 앱을 성공적으로 업그레이드했습니다.

이 섹션에서는 다음 작업을 완료했습니다.

  • 설정 스크립트의 오류를 수정했습니다.

  • 새 패치(p2)를 생성하여 앱을 업데이트했습니다.

  • 앱을 새 패치로 업그레이드했습니다.

자습서에서 만든 앱과 오브젝트 분해하기

이 앱은 컴퓨팅 풀을 사용하기 때문에 계정의 크레딧을 사용하며 실행하는 데 비용이 듭니다. 앱이 컴퓨팅 리소스를 소비하는 것을 중지하려면 애플리케이션 오브젝트와 애플리케이션이 생성한 계정 수준 오브젝트(예: 컴퓨팅 풀)를 모두 제거해야 합니다.

  1. 컴퓨팅 풀이 현재 실행 중인지 확인하려면 다음 명령을 실행합니다.

    snow object list compute-pool -l "na_spcs_tutorial_app_%"
    
    Copy

    컴퓨팅 풀이 실행 중인 경우 애플리케이션 오브젝트에 의해 생성된 ACTIVE 컴퓨팅 풀이 있는 행이 표시됩니다.

  2. 다음 Snowflake CLI 명령을 실행하여 앱을 삭제합니다.

    snow app teardown --cascade --force -c tut-connection
    
    Copy

    이 명령은 앱에서 생성한 모든 Snowflake 오브젝트를 제거합니다. --force 옵션이 없으면 이 명령은 버전이 포함되어 있으므로 애플리케이션 패키지를 삭제하지 않습니다.

  3. 컴퓨팅 풀이 삭제되었는지 확인하려면 다음 명령을 다시 실행합니다.

    snow object list compute-pool -l "na_spcs_tutorial_app_%"
    
    Copy

    이 명령은 컴퓨팅 풀이 성공적으로 삭제된 경우 no data 를 반환합니다.

참고

snow app teardown 명령은 애플리케이션 패키지와 애플리케이션 오브젝트를 모두 삭제합니다. 따라서 모든 상태 저장 데이터가 손실됩니다.

자세히 알아보기

축하합니다! 이 자습서에서는 컨테이너를 사용하여 앱을 수동으로 업그레이드하는 방법을 알아보았습니다.

요약

이 자습서에서는 다음 작업을 완료했습니다.

  • 업그레이드 및 장애 시 서비스를 처리하는 버전 이니셜라이저 저장 프로시저를 추가했습니다.

  • 애플리케이션 패키지에서 앱의 새 버전 정의를 만들었습니다. 버전 정의는 앱의 버전 번호와 패치를 지정합니다.

  • 앱의 기본 릴리스 지시문을 설정했습니다. 릴리스 지시문은 컨슈머가 앱을 설치하거나 업그레이드할 때 설치되는 버전과 패치를 결정합니다.

  • 앱을 업그레이드하고 업그레이드 실패 시 어떤 일이 발생하는지 확인했습니다.