주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI 이벤트 서비스 및 OCI 함수를 사용하여 OCI 프라이빗 스트림에 이벤트 작성
소개
Oracle Cloud Infrastructure(OCI) Events Service 규칙은 Cloud Native Computing Foundation(CNCF) CloudEvents 표준을 준수하는 이벤트를 사용하여 OCI의 리소스 변경을 추적합니다. 이를 통해 개발자는 OCI Functions로 코드를 트리거하거나, OCI Streaming에 데이터를 작성하거나, OCI Notifications를 사용하여 경고를 전송하여 실시간 변경 사항에 대응할 수 있습니다.
퍼블릭 스트림으로 이벤트를 전송하는 기능은 기본적으로 지원되지만, 프라이빗 스트림에 작성하려면 OCI Functions 또는 커스텀 코드를 사용하는 커스텀 접근 방식이 필요합니다. 이 사용지침서에서는 OCI 함수를 사용하여 OCI 이벤트 서비스 규칙에서 이벤트 페이로드를 캡처하여 프라이빗 스트림에 기록하는 방법을 보여줍니다.
목표
- OCI 이벤트 처리를 위한 설정을 자동화하고, 안전하고 커스터마이징된 처리를 위해 확장 가능한 방식으로 OCI 프라이빗 스트림으로 전송할 수 있습니다.
필요 조건
-
OCI 테넌시에 액세스합니다.
-
OCI 이벤트 서비스 규칙, Oracle Applications 및 OCI Streaming 서비스를 관리할 수 있는 권한입니다.
작업 1: 필요한 정책 및 Oracle Cloud Infrastructure Identity and Access Management(OCI IAM) 권한 설정
이 솔루션의 각 구성 요소에는 상호 작용하는 OCI 리소스에 대한 액세스 권한이 있어야 합니다. 이 자습서를 따르려면 개발자가 다음 권한을 가지고 있어야 합니다.
-
사용자 정책: OCI 이벤트 서비스 규칙, OCI 통지, OCI 함수, OCI 스트림 및 OCI Vault(선택사항) 및 네트워크 제품군 사용을 관리합니다.
-
서비스 정책: OCI 프라이빗 스트림에 메시지를 쓸 수 있는 권한을 함수에 부여합니다.
자세한 정책은 여기에서 확인할 수 있습니다.
작업 2: 전용 스트림 생성
OCI Streaming은 미사용 및 전송 중에 데이터가 암호화되어 메시지의 무결성과 보안을 보장하는 완전 관리형 OCI 서비스입니다. 향상된 보안을 위해 OCI Vault 서비스를 사용하여 고유의 암호화 키를 저장 및 관리하고 특정 준수 또는 보안 요구 사항을 충족할 수 있습니다. 프라이빗 끝점은 VCN(가상 클라우드 네트워크) 내에서 구성하여 스트림 보안을 강화하고 프라이빗 IP 주소를 스트림 풀에 연관시킬 수 있습니다. 따라서 OCI Streaming 트래픽이 VCN 내에 유지되므로 인터넷을 완전히 피할 수 있습니다. 그러나 전용 엔드포인트를 사용하는 스트림은 인터넷에서 액세스할 수 없으므로 콘솔을 통해 최신 메시지를 볼 수 있는 기능도 제한됩니다. 개인 스트림에서 메시지를 소비하려면 소비자가 개인 스트림이 호스팅되는 네트워크에 대한 경로 및 액세스 권한을 모두 가져야 합니다.
스트림 및 스트림 풀을 생성합니다. 스트림 이름을 입력하고 새 스트림 풀 생성을 선택하여 스트림 풀을 생성합니다. 스트림 풀 구성 섹션에서 스트림 풀 이름을 입력하고 프라이빗 끝점을 선택한 다음 VCN 및 서브넷과 그에 따라 네트워크 세부정보를 입력합니다. 선택 사항이지만 네트워크 보안 그룹에 해당 NSG 내의 모든 트래픽에 대한 수신 규칙을 제공하는 것이 좋습니다. 자세한 내용은 스트림 생성 및 스트림 풀 생성을 참조하십시오.
자체 암호화 키를 사용하여 키의 수명 주기를 보다 효과적으로 제어할 수 있습니다. 스트림 내의 메시지 보존을 조정할 수 있는 옵션이 있습니다. 기본값은 1일이고 최대값은 7일입니다.
스트림 OCID 및 메시지 끝점을 적어 둡니다. 이 정보를 함수에 전달해야 합니다.
작업 3: OCI 통지 토픽 및 OCI 이벤트 서비스 규칙 생성
새로 고침으로, 여기 이벤트가 작동하는 방법입니다. OCI 서비스는 리소스 또는 데이터에 대한 이벤트를 내보냅니다. 원하는 이벤트를 지정하는 필터가 포함된 규칙을 생성합니다. 필터가 일치하는 이벤트를 찾으면 규칙이 작업을 트리거해야 합니다. 이 작업은 OCI Notifications 토픽, OCI Streaming 서비스 또는 OCI Functions일 수 있습니다.
-
접근 방법 1: 이벤트 페이로드를 퍼블릭 스트림으로 전송해야 하는 경우 플로우를 기본적으로 구성할 수 있으므로 함수가 필요하지 않습니다.
-
접근 방법 2: 특정 이벤트 페이로드만 프라이빗 스트림으로 전송해야 하는 경우 함수를 직접 작업으로 제공할 수 있습니다.
-
접근 방법 3: 여러 이벤트 페이로드를 프라이빗 스트림으로 전송해야 하는 경우 이상적인 방법은 이벤트 페이로드를 OCI 통지 토픽으로 전송하고 OCI 함수를 OCI 통지 토픽에 구독하는 것입니다.
이 튜토리얼에서는 가장 복잡한 Approach 3을 살펴봅니다.
-
OCI 통지 토픽을 생성합니다. 자세한 내용은 항목 생성을 참조하십시오.
-
이벤트 규칙을 생성합니다. 접근법을 정당화하기 위해 두 가지 이벤트 규칙을 만듭니다. 자세한 내용은 이벤트 규칙 생성을 참조하십시오.
작업 4: 함수 개발 및 배치
이 함수는 이벤트 페이로드를 인코딩하여 제공된 메시지 끝점 및 스트림에 게시합니다. 자세한 내용은 함수 생성을 참조하십시오.
-
func.py
:import json import logging import oci from base64 import b64encode def handler(ctx, data): try: # Parse the incoming event payload body = json.loads(data.getvalue()) cfg = ctx.Config() stream_ocid = cfg["stream_ocid"] stream_endpoint = cfg["stream_endpoint"] logging.getLogger().info(f'Function invoked for event: {body}') # Publish the event to the stream publish_to_stream(stream_ocid, stream_endpoint, body) return {"status": 200, "message": "Successfully processed event"} except (Exception, ValueError) as ex: logging.getLogger().error(f'Error processing event payload: {str(ex)}') return {"status": 500, "message": "Internal Server Error"} def publish_to_stream(stream_ocid, stream_endpoint, event_data): signer = oci.auth.signers.get_resource_principals_signer() stream_client = oci.streaming.StreamClient(config={}, signer=signer, service_endpoint=stream_endpoint) # Convert event data to JSON string and encode event_payload = json.dumps(event_data).encode('utf-8') # Build the message list message_list = [ oci.streaming.models.PutMessagesDetailsEntry( key=b64encode("partition-key-1".encode()).decode(), value=b64encode(event_payload).decode() ), ] try: logging.getLogger().info(f"Publishing {len(message_list)} messages to stream {stream_ocid}") put_message_details = oci.streaming.models.PutMessagesDetails(messages=message_list) put_message_result = stream_client.put_messages(stream_ocid, put_message_details) # Log publishing results for entry in put_message_result.data.entries: if entry.error: logging.getLogger().error(f"Error publishing message: {entry.error_message}") else: logging.getLogger().info(f"Published message to partition {entry.partition}, offset {entry.offset}") except Exception as ex: logging.getLogger().error(f"Failed to publish messages to stream: {str(ex)}") raise
-
func.yaml
:schema_version: 20180708 name: events-to-pvt-stream version: 0.0.1 runtime: python build_image: fnproject/python:3.9-dev run_image: fnproject/python:3.9 entrypoint: /python/bin/fdk /function/func.py handler memory: 256 config: stream_ocid: ocid1.stream.123445 stream_endpoint: https://xyz.us-ashburn-1.oci.oraclecloud.com
-
requirements.txt
:fdk oci
마지막 단계는 개인 스트림이 어디에 있는지 함수에 알리는 것입니다. 이 함수는 구성 매개변수를 사용하므로 다른 테넌시에 배치하려는 경우 재사용할 수 있습니다.
작업 5: 통지 항목에 함수 가입
이 연습에서는 배치된 함수를 OCI Notifications 항목에 가입합니다. OCI Notifications 주제는 메시지를 수신할 때마다 함수를 트리거하고, 함수는 전용 스트림에 대한 이벤트 페이로드를 기록합니다.
요구 사항에 맞게 함수 코드를 변경하여 특정 필드를 제거하거나 향상시킬 수 있습니다. 함수 구독에는 확인이 필요하지 않습니다. 자세한 내용은 함수 가입 생성을 참조하십시오.
확인
데이터 플로우를 확인할 수 있는 위치가 여러 개 있습니다.
-
이벤트 측정항목 페이지를 확인하여 제공된 규칙과 일치하는 이벤트가 있는지 확인하십시오. 실패 그래프는 비어 있어야 합니다.
-
OCI 통지 토픽 측정항목을 확인하십시오. 모든 메시지가 전달되었는지 확인합니다. 실패한 메시지 차트에 데이터가 없습니다.
-
함수 호출 측정항목을 확인하십시오. 오류가 없고 함수가 조절되지 않는지 확인합니다.
-
데이터가 프라이빗 스트림으로 수집되고 있는지 확인하십시오.
다음 차트에 데이터가 없으면 해당 차트에서 중지하고 해당 서비스에 대한 로그를 사용으로 설정합니다. 로그는 특정 리소스가 작업을 수행하지 못하는 이유를 설명합니다.
다음 단계
이 사용지침서에서는 OCI 이벤트 서비스, OCI 통지, OCI 함수 및 OCI 스트리밍을 통합하여 안전하게 이벤트 페이로드를 처리하고 프라이빗 스트림에 게시하는 방법을 배웠습니다. 보안 엔드포인트 설정, 암호화 키 관리, 세분화된 액세스 제어를 위해 OCI IAM을 사용하여 권한이 부여된 사용자 및 서비스만 스트리밍 데이터와 상호 작용할 수 있도록 하는 방법에 대해 알아봅니다.
이 솔루션을 통해 팀은 강력한 보안 표준을 유지하면서 리소스 변경 사항을 실시간으로 캡처할 수 있습니다. 조직은 개인 스트림을 사용하여 중요한 데이터를 보호하고 업계 규정을 준수하며 운영 워크플로우가 조직의 보안 및 규정 준수 목표에 부합하도록 보장할 수 있습니다. 이 접근 방식은 보안 태세를 강화하고 팀이 원활하고 안전한 이벤트 기반 자동화를 달성할 수 있도록 지원합니다.
OCI 함수 및 OCI 프라이빗 스트림 기능 사용에 대한 자세한 내용은 Oracle 담당자에게 문의하거나 클라우드 보안 솔루션을 참조하십시오.
확인
- 작성자 - Aneel Kanuri(Distinguished Cloud Architect)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Write Events to an OCI Private Stream using OCI Events Service and OCI Functions
G23235-01
December 2024