참고:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 마치면 이 값을 클라우드 환경에 고유한 값으로 대체하십시오.
Oracle Functions를 사용하여 자율운영 데이터베이스로 파일 로드
소개
이 사용지침서에서는 오브젝트 스토리지 버킷, Oracle Function, Oracle Autonomous Data Warehouse를 생성하고, 파일이 오브젝트 스토리지에 업로드될 때마다 기능을 트리거합니다. 함수가 파일을 가져와서 데이터베이스에 씁니다.
목표
- 애플리케이션 생성
- 동적 그룹 생성
- 오브젝트 스토리지 버킷 생성
- 독립 데이터베이스 생성
- 함수 배치
- 이벤트 규칙 생성
- 생성된 함수를 테스트합니다.
함수 필요 조건
구획 생성
Oracle에서 제공하는 무료 테넌시를 사용 중인 경우 이 단계를 무시하십시오.
기존 구획을 사용하려면 다음 단계로 건너뜁니다. 그렇지 않으면 구획, 구획 생성을 차례로 눌러 새 구획을 생성하십시오.
VCN 및 서브넷 생성
네트워크 리소스를 생성할 적합한 VCN이 아직 존재하지 않는 경우 테넌시 관리자 및 코어 인프라로 콘솔에 로그인한 후 네트워킹으로 이동하여 다음을 수행합니다.
- 가상 클라우드 네트워크를 누르고 이전 단계에서 구획을 선택합니다.
- VCN 마법사 시작, 인터넷 접속을 통한 VCN, VCN 마법사 시작을 차례로 누릅니다.
- 새 VCN의 이름(예:
fn-VCN
)을 입력하고 다음을 누른 후 생성을 눌러 관련 네트워크 리소스와 함께 VCN을 생성합니다.
Oracle Functions에 대한 정책 생성
콘솔에 테넌시 관리자로 로그인한 후 거버넌스 및 관리 아래에서 ID로 이동하고 정책을 누른 후 다음을 수행합니다.
-
테넌시의 루트 구획을 선택합니다.
-
정책 생성을 누릅니다.
-
이름에
faas-policy
를 입력합니다. -
설명에
Policy for Functions
를 입력합니다. -
사용자 정의(고급) 링크를 눌러 정책 문을 [정책 작성기] 필드에 붙여 넣습니다.
Allow group <group-name> to read metrics in tenancy Allow group <group-name> to read objectstorage-namespaces in tenancy Allow group <group-name> to use virtual-network-family in tenancy Allow group <group-name> to manage functions-family in tenancy Allow group <group-name> to use cloud-shell in tenancy
-
Create를 누릅니다.
사용자가 위의 정책 문에서 참조된 그룹에 속하는지 확인하십시오. 그룹을 만들고 그룹에 사용자를 추가하려면 그룹 만들기를 참조하십시오.
애플리케이션 생성
이 단계에서는 애플리케이션을 생성하고 Cloud Shell에서 Fn CLI를 설정합니다.
-
[솔루션 및 플랫폼]에서 개발자 서비스를 선택하고 함수를 누릅니다.
-
구획 목록에서 개발 구획을 선택합니다.
-
애플리케이션 생성을 누릅니다.
-
이름에
etl-app
를 입력합니다. -
이전에 생성한 VNC(e.g.
fn-vcn
)를 선택합니다. -
공용 서브넷을 선택합니다.
-
Create를 누릅니다.
-
생성된 애플리케이션을 눌러 애플리케이션 세부정보를 엽니다.
-
Getting Started 링크를 누르고 Cloud Shell Setup의 Begin your Cloud Shell session 및 Setup fn CLI on Cloud Shell 섹션을 따르십시오.
여기에는 Cloud Shell 실행, Fn 컨텍스트 업데이트, 레지스트리에 대한 인증 토큰 생성, Oracle Cloud Infrastructure Registry에 로그인이 포함됩니다.
동적 그룹 생성
다른 OCI 서비스를 사용하려면 함수가 동적 그룹에 포함되어 있어야 합니다. 동적 그룹 생성에 대한 자세한 내용은 문서를 참조하십시오.
동적 그룹을 생성하기 전에 개발 구획 OCID를 가져와야 합니다. 구획 OCID는 동적 그룹 일치 규칙에 사용됩니다.
- 탐색 메뉴를 열고 ID, 구획 순으로 선택합니다.
- 목록에서 개발 구획을 찾고 OCID 열의 셀을 가리키고 복사를 눌러 구획 OCID를 클립보드에 복사합니다.
- 구획 OCID를 곧 사용할 수 있도록 저장합니다.
이제 동적 그룹을 생성할 준비가 되었습니다.
-
동적 그룹을 생성하려면 탐색 메뉴를 열고 ID, 동적 그룹을 차례로 선택합니다.
-
동적 그룹 생성을 누릅니다.
-
이름에
functions-dynamic-group
를 입력합니다. -
설명에
Group with all functions in a compartment
를 입력합니다. -
동적 그룹에 속하는 함수를 선택하려면 [일치 규칙 작성](https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/managingdynamicgroups.htm#Writing). 애플리케이션을 생성한 구획 내의 모든 함수를 포함하는 다음 일치 규칙을 작성합니다.
All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..example'}
주: 위의 값을 이전에 저장한 구획 OCID로 바꾸십시오.
오브젝트 스토리지 버킷 생성
오브젝트 스토리지에 input-bucket
버킷이 필요합니다. input-bucket
를 사용하여 CSV 파일을 놓습니다. 함수가 파일을 처리하고 Oracle Autonomous Data Warehouse로 임포트합니다.
먼저 input-bucket
를 생성하겠습니다.
-
탐색 메뉴를 열고 Object Storage를 선택한 다음 Object Storage를 선택합니다.
-
구획 목록에서 개발 구획을 선택합니다.
-
버킷 생성을 누릅니다.
-
버킷 이름을 input-bucket으로 지정합니다.
-
표준 스토리지 계층을 선택합니다.
-
Emit Object Events(객체 이벤트 내보내기) 확인란을 선택합니다.
-
버킷 생성을 누릅니다.
IAM 정책 생성
동적 그룹(functions-dynamic-group
)이 버킷의 객체를 관리할 수 있도록 허용하는 새 정책을 생성합니다.
-
탐색 메뉴를 열고 ID를 선택한 다음 정책을 선택합니다.
-
정책 생성을 누릅니다.
-
이름에
functions-buckets-policy
를 입력합니다. -
설명에
Policy that allows functions dynamic group to manage objects in the bucket
를 입력합니다. -
사용자 정의(고급) 링크를 누르고 정책 문을 Policy Builder 필드에 붙여 넣습니다.
Allow dynamic-group functions-dynamic-group to manage objects in compartment [compartment-name] where target.bucket.name='input-bucket'
참고:
compartment-name
을 개발 구획(VCN 및 함수 애플리케이션을 생성한 곳)의 이름으로 바꾸십시오. -
Create를 누릅니다.
Autonomous Database 생성
이 기능은 단순성을 위해 SODA(Simple Oracle Document Access)를 사용하여 자율운영 데이터베이스에 접근합니다. 함수를 수정하여 다른 유형의 액세스를 사용할 수 있습니다.
-
탐색 메뉴를 열고 Autonomous Data Warehouse를 선택합니다.
-
Autonomous Database 생성을 누릅니다.
-
목록에서 개발 구획을 선택합니다.
-
표시 이름 및 데이터베이스 이름에
funcdb
을 입력합니다. -
작업 로드 유형에 대해 트랜잭션 처리를 선택합니다.
-
배치 유형의 경우 공유 기반 구조를 선택합니다.
-
관리자 비밀번호를 입력합니다.
-
Autonomous Database 생성을 누릅니다.
OCI가 자율운영 데이터베이스를 프로비전할 때까지 기다린 후 서비스 콘솔 단추를 누릅니다.
-
사이드바에서 Development를 누릅니다.
-
RESTful 서비스 및 SODA에서 URL 복사를 누릅니다.
-
터미널(또는 Cloud Shell)에서 아래 명령을 실행하여
regionsnumbers
라는 모음을 생성합니다.<ORDS_BASE_URL>
는 이전 단계에서 복사한 값으로 바꾸고,<DB-PASSWORD>
는 자율운영 데이터베이스를 생성할 때 설정한 관리 비밀번호로 바꿔야 합니다.export ORDS_BASE_URL=<ORDS_BASE_URL> curl -X PUT -u 'ADMIN:<DB-PASSWORD>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/regionsnumbers
-
수집이 생성되었는지 다시 확인하기 위해 모든 수집을 나열할 수 있습니다. 출력은 다음과 유사해야 합니다.
bash $ curl -u 'ADMIN:<DB-password>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/ {"items":[{"name":"regionsnumbers","properties":{"schemaName":"ADMIN","tableName":"REGIONSNUMBERS","keyColumn":{"name":"ID","sqlType":"VARCHAR2","maxLength":255,"assignmentMethod":"UUID"},"contentColumn":{"name":"JSON_DOCUMENT","sqlType":"BLOB","jsonFormat":"OSON"},"versionColumn":{"name":"VERSION","type":"String","method":"UUID"},"lastModifiedColumn":{"name":"LAST_MODIFIED"},"creationTimeColumn":{"name":"CREATED_ON"},"readOnly":false},"links":[{"rel":"canonical","href":"https://.../ords/admin/soda/latest/regionsnumbers"}]}],"hasMore":false}
함수 배치
이 단계에서는 함수 소스 코드 저장소를 복제하고 fn deploy
명령을 사용하여 Docker 이미지를 빌드하고, 이미지를 OCIR로 푸시하고, 함수를 애플리케이션의 Oracle Functions에 배치합니다.
-
콘솔 UI에서 Cloud Shell을 엽니다.
-
Functions 소스 코드 저장소를 복제합니다.
git clone https://github.com/oracle/oracle-functions-samples.git
-
samples/oci-load-file-into-adw-python
폴더로 이동합니다.cd oracle-functions-samples/samples/oci-load-file-into-adw-python
-
함수를
etl-app
에 배치합니다.fn -v deploy --app etl-app
함수를 배치한 후 함수가 Autonomous Database에 접속하는 방법을 알 수 있도록 함수 구성 값을 설정해야 합니다.
-
Fn CLI를 사용하여 다음 구성 값을 설정합니다.
[ORDS_BASE_URL]
및[DB_PASSWORD]
를 값으로 바꿔야 합니다.fn config function etl-app oci-load-file-into-adw-python ords-base-url [ORDS_BASE_URL] fn config function etl-app oci-load-file-into-adw-python db-schema admin fn config function etl-app oci-load-file-into-adw-python db-user admin fn config function etl-app oci-load-file-into-adw-python dbpwd-cipher [DB-PASSWORD] fn config function etl-app oci-load-file-into-adw-python input-bucket input-bucket fn config function etl-app oci-load-file-into-adw-python processed-bucket processed-bucket
이벤트 규칙 생성
이 단계에서는 파일을 input-bucket
에 놓을 때 함수를 트리거하도록 클라우드 이벤트를 구성합니다.
-
콘솔 UI에서 탐색을 열고 애플리케이션 통합을 선택한 다음 이벤트 서비스를 누릅니다.
-
구획 목록에서 개발 구획을 선택합니다.
-
규칙 생성을 누릅니다.
-
표시 이름에
load_CSV_into_ADW
를 입력합니다. -
설명에
Load CSV file into ADW
를 입력합니다. -
세 개의 규칙을 생성합니다. 다른 조건을 눌러 조건을 더 추가할 수 있습니다.
조건 서비스/속성 이름 이벤트 유형/속성값 이벤트 유형 오브젝트 스토리지 객체 - 생성 속성 compartmentName 속성 bucketName 입력-버킷 -
작업 아래에서 함수를 선택합니다.
- 함수 구획의 경우 개발 구획을 선택합니다.
- 함수 애플리케이션의 경우
etl-app
을 선택합니다. - 함수의 경우
oci-load-file-into-adw-python
를 선택합니다.
-
규칙 생성을 누릅니다.
함수 테스트
함수를 테스트하려면 .csv
파일을 input-bucket
에 업로드할 수 있습니다. OCI CLI를 사용하여 콘솔 UI 또는 Cloud Shell에서 이 작업을 수행할 수 있습니다.
-
Cloud Shell을 엽니다.
-
함수 폴더로 이동합니다.
cd ~/oracle-functions-samples/samples/oci-load-file-into-adw-python
-
OCI CLI를 사용하여
file1.csv
를input-bucket
로 업로드합니다.$ oci os object put --bucket-name input-bucket --file file1.csv Uploading object [####################################] 100% { "etag": "607fd72d-a041-484c-9ee0-93b9f5488084", "last-modified": "Tue, 20 Oct 2020 18:03:50 GMT", "opc-content-md5": "O8mZv0X2gLagQGT5CutWsQ==" }
데이터베이스의 데이터를 확인하려면 다음 단계를 수행하십시오.
-
OCI 콘솔에서 Autonomous Data Warehouse로 이동합니다.
-
구획 목록에서 개발 구획을 선택합니다.
-
작업 로드 유형 목록에서 트랜잭션 처리를 선택합니다.
-
데이터베이스 이름(
funcdb
)을 누릅니다. -
서비스 콘솔을 누릅니다.
-
사이드바에서 개발 링크를 누릅니다.
-
SQL Developer Web을 누릅니다.
-
ADMIN 및 관리 암호를 사용하여 인증합니다.
-
워크시트에서 다음 질의를 입력합니다.
select UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( JSON_DOCUMENT, 4000, 1 )) AS json from regionsnumbers
-
녹색 재생 단추를 클릭하여 조회를 실행합니다.
-
CSV 파일의 데이터는 질의 결과 탭에 있습니다.
-
축하합니다! 자습서를 성공적으로 완료했습니다.
감사의 글
- 작성자 - Greg Verstraeten
- 기여자 - Peter Jausovec, Prasenjit Sarkar, Adao Junior
추가 학습 자원
docs.oracle.com/learn의 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 전환할 수 있습니다.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use Oracle Functions to load files into autonomous database
F40586-03
October 2022
Copyright © 2022, Oracle and/or its affiliates.