예제 - 앱 사양을 사용하여 외부 엔드포인트에 액세스¶
이 항목에서는 Snowflake 외부 엔드포인트에 연결하도록 |native-app|을 구성하는 방법을 설명합니다. 이 예제는 앱의 매니페스트 파일과 설정 스크립트를 구성하여 다음을 수행하는 방법을 보여줍니다.
자동 권한 부여 를 사용하여 외부 액세스 통합을 생성할 수 있는 권한을 컨슈머에게 요청합니다.
앱에 외부 액세스 통합을 추가합니다.
애플리케이션 사양 을 사용하여 외부 엔드포인트에 연결하기 위한 권한을 컨슈머에게 요청합니다.
매니페스트 파일의 버전 설정¶
앱에 대한 권한을 자동으로 부여하려면 다음 예제와 같이 매니페스트 파일 시작 부분에 버전을 설정합니다.
manifest_version: 2
매니페스트 파일에서 CREATE EXTERNAL ACCESS INTEGRATION 권한 요청¶
CREATE EXTERNAL ACCESS INTEGRATION 권한은 앱이 설치 또는 업그레이드 중에 외부 액세스 통합을 생성할 수 있도록 허용합니다. 이 권한을 사용자에게 요청하려면 매니페스트 파일에 다음 항목을 추가합니다.
privileges:
- CREATE EXTERNAL ACCESS INTEGRATION:
description: "Required to create eai integrations so we can simplify your life"
앱 설치 또는 업그레이드 전에 CREATE EXTERNAL ACCESS INTEGRATION 권한이 자동으로 부여되며 다음과 같은 이점이 있습니다.
컨슈머는 앱에서 요구하는 외부 액세스 통합을 수동으로 생성하거나 참조를 통해 액세스를 승인할 필요가 없습니다.
공급자는 설치 또는 업그레이드 중에 오브젝트를 생성하기 전에 CREATE EXTERNAL ACCESS INTEGRATION 권한의 존재 여부를 확인하는 코드를 작성할 필요가 없습니다.
외부 액세스 통합을 위한 네트워크 규칙 만들기¶
외부 액세스 통합에는 외부 엔드포인트를 정의하는 네트워크 규칙이 필요합니다. 예를 들어, 네트워크 규칙을 생성하려면 앱의 설정 스크립트에 다음 CREATE NETWORK RULE 명령을 추가합니다.
CREATE OR REPLACE NETWORK RULE setup.my_network_rule
TYPE = HOST_PORT
VALUE_LIST = ( 'example.com' )
MODE = EGRESS;
이 명령은 호스트 포트 example.com
로의 아웃바운드 요청(송신)을 정의하는 네트워크 규칙을 만듭니다.
외부 액세스 통합 만들기¶
설정 스크립트에서 네트워크 규칙을 생성한 후, 다음 예제와 같이 CREATE EXTERNAL ACCESS INTEGRATION 명령을 사용하여 외부 액세스 통합을 만듭니다.
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_app_prefix_eai_rule
ALLOWED_NETWORK_RULES = (setup.my_network_rule)
ENABLED = TRUE;
참고
이 명령은 컨슈머 계정에 외부 액세스 통합을 만듭니다. 그러나 외부 액세스 통합은 컨슈머가 요청된 호스트 포트에 대한 외부 액세스를 허용하는 앱 사양을 승인할 때까지 사용할 수 없습니다. 자세한 내용은 앱 사양을 사용하여 외부 리소스 연결 승인 섹션을 참조하십시오.
외부 엔드포인트에 액세스하기 위한 사용자 정의 함수 만들기¶
외부 액세스 통합을 생성한 후, 설정 스크립트는 이를 사용하여 네트워크 규칙에 정의된 엔드포인트에 연결하는 사용자 정의 함수 및 저장 프로시저를 만들 수 있습니다.
다음 예제는 my_app_prefix_eai_rule
외부 액세스 통합을 사용하는 사용자 정의 함수를 보여줍니다.
CREATE OR REPLACE FUNCTION setup.EXTERNAL_ACCESS_UDF(hostname STRING)
RETURNS STRING
LANGUAGE JAVA
HANDLER='TestHostNameLookup.compute'
EXTERNAL_ACCESS_INTEGRATIONS = (my_app_prefix_eai_rule)
AS
'
import java.net.InetAddress;
import java.net.UnknownHostException;
class TestHostNameLookup {{
public static String compute(String hostname) throws Exception {{
InetAddress addr = null;
try {
addr = InetAddress.getByName(hostname);
} catch(UnknownHostException ex) {
return "Hostname lookup failed";
}
return "Hostname lookup successful";
}
}
';
GRANT USAGE ON FUNCTION setup.EXTERNAL_ACCESS_UDF(STRING)
TO APPLICATION ROLE app_public;
이 함수는 EXTERNAL_ACCESS_INTEGRATIONS 값을 이전에 만든 외부 액세스 통합으로 설정합니다.
이 함수는 InetAddress
Java 패키지를 사용하여 프로시저에 전달된 호스트명을 조회합니다. 제공된 호스트명은 외부 액세스 통합에서 사용되는 네트워크 규칙의 VALUE_LIST
속성에 지정된 값 중 하나와 일치해야 합니다.
앱 사양 만들기¶
앱은 설치 또는 업그레이드 시 또는 저장 프로시저를 통해 실행 중에 앱 사양을 만들 수 있습니다. 다음 예제는 ALTER APPLICATION SET SPECIFICATIONS 명령을 사용하여 앱 사양을 만드는 방법을 보여줍니다.
ALTER APPLICATION SET SPECIFICATION my_app_specification
TYPE = EXTERNAL_ACCESS
LABEL = 'An external api'
DESCRIPTION = 'Used to connect to an external API'
HOST_PORTS = 'example.com';