참고:

OCI 함수를 사용하여 Amazon S3에 Oracle Cloud Infrastructure 로그 푸시

소개

OCI(Oracle Cloud Infrastructure) 로깅 서비스는 OCI 서비스 및 리소스에서 생성된 모든 로그와 사용자가 생성한 사용자정의 로그에 대한 통합 보기를 제공합니다.

OCI Functions는 개발자가 클라우드에서 경량 이벤트 기반 애플리케이션을 구축하고 배포할 수 있도록 지원하는 서버리스 컴퓨트 플랫폼입니다.

Amazon S3은 Amazon에서 제공하는 확장성이 뛰어나고 안정적인 클라우드 스토리지 서비스로, 사용자가 전 세계 어디에서나 모든 양의 데이터를 저장하고 검색할 수 있도록 지원합니다.

고급 프로세스에는 서비스 커넥터를 사용하여 OCI 로깅 서비스에서 로그를 수집하고 대상 함수로 전송하여 데이터를 Amazon S3로 푸시하는 작업이 포함됩니다.

구조 다이어그램

목표

OCI Functions를 사용하여 OCI 로그를 Amazon S3로 푸시하는 방법에 대한 단계별 가이드를 제공합니다.

필요 조건

  1. AWS(Amazon Web Services) 사용자의 경우 버킷을 생성하고 버킷에서 객체를 읽고 쓸 수 있는 데 필요한 정책이 있어야 합니다. 버킷 정책에 대한 자세한 내용은 이 페이지를 참조하십시오.

  2. 리소스를 관리하려면 OCI의 사용자에게 함수, 서비스 커넥터 허브 및 로깅 서비스에 필요한 정책이 있어야 합니다. 모든 서비스에 대한 정책 참조는 여기에서 확인할 수 있습니다.

작업 1: AWS 설정 구성

  1. Amazon S3 버킷을 생성합니다.

    AWS 버킷 생성

  2. IAM에서 사용자에 대한 AWS 액세스 키 및 보안 키를 생성합니다.

    1. IAM, 사용자, 보안 인증서, 액세스 키 생성, 타사 서비스로 이동합니다.

    2. 생성된 AWS 액세스 키 및 암호 키를 메모장 파일에 복사합니다.

      AWS 액세스 및 보안 키 생성

작업 2: Oracle Cloud Infrastructure 설정 구성

OCI 저장소에 AWS 액세스 키 및 보안 키 저장

동적 그룹 생성

동적 그룹에 대한 정책 생성

OCI 함수를 Python 또는 지원되는 언어로 생성하여 OCI 로그를 Amazon S3으로 전송

  1. Oracle Cloud 콘솔 메뉴에서 개발자 서비스로 이동하고 함수를 선택합니다.

  2. 기존 애플리케이션을 선택하거나 애플리케이션 생성을 누릅니다. 응용 프로그램 내에 함수를 생성합니다.

  3. 이 사용지침서에서는 OCI Cloud Shell을 사용하여 함수를 생성합니다.

    참고: 설정 전제 조건이 필요하지 않으므로 Cloud Shell이 권장 옵션입니다. OCI Functions를 처음 사용하는 경우 Cloud Shell에서 함수 빠른 시작의 A, B 및 C 섹션을 따릅니다.

  4. 먼저 샘플 Python 함수를 생성하는 것이 좋습니다. 다음 명령은 세 개의 파일(func.py, func.yamlrequirements.txt)이 있는 ociToaws 폴더를 생성합니다.

    fn init --runtime python pushlogs
    
  5. 다음 코드로 func.py를 변경합니다. 코드의 secret_key_id, access_key_id를 이전에 생성된 OCI Vault의 각 암호 OCID로 바꿉니다.

    import io
    import json
    import logging
    import boto3
    import oci
    import base64
    import os
    from fdk import response
    
    # The below method receives the list of log entries from OCI as input in the form of bytestream and is defined in func.yaml
    def handler(ctx, data: io.BytesIO = None):
        funDataStr = data.read().decode('utf-8')
    
        # Convert the log data to json
        funData =  json.loads(funDataStr)
    
        # The Secret Retrieval API is used here to retrieve AWS access keys and secret key from vault. These keys are required to connect to Amazon S3.
        # Replace secret_key_id, access_key_id with respective secret ocids.
        secret_key_id = "<vault_secret_ocid>"
        access_key_id = "<vault_secret_ocid>"
    
        signer = oci.auth.signers.get_resource_principals_signer()
        secret_client = oci.secrets.SecretsClient({},signer=signer)
    
        def read_secret_value(secret_client, secret_id):
            response = secret_client.get_secret_bundle(secret_id)
            base64_Secret_content = response.data.secret_bundle_content.content
            base64_secret_bytes = base64_Secret_content.encode('ascii')
            base64_message_bytes = base64.b64decode(base64_secret_bytes)
            secret_content = base64_message_bytes.decode('ascii')
            return secret_content
    
    
        awsaccesskey = read_secret_value(secret_client, access_key_id)
        awssecretkey = read_secret_value(secret_client, secret_key_id)
    
        for i in range(0,len(funData)):
            filename = funData[i]['time']
            logging.getLogger().info(filename)
    
            # Send the log data to a temporary json file. /tmp is the supported writable directory for OCI Functions
            with open('/tmp/'+filename+".json", 'w', encoding='utf-8') as f:
                json.dump(funData[i], f, ensure_ascii=False, indent=4)
    
            # Send the log file to Amazon S3 target bucket
            session = boto3.Session(aws_access_key_id= awsaccesskey, aws_secret_access_key= awssecretkey)
            s3 = session.resource('s3')
            s3.meta.client.upload_file(Filename='/tmp/'+filename+'.json', Bucket='lasya-bucket', Key=filename+'.json')
    
            os.remove('/tmp/'+filename+'.json')
    
  6. 다음 코드로 func.yaml를 업데이트합니다.

    schema_version: 20180708
    name: pushlogs
    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
    
  7. 다음 코드로 requirements.txt를 변경합니다.

    fdk>=0.1.56
    boto3
    oci
    
  8. 다음 명령을 사용하여 함수를 배치합니다.

    fn -v deploy --app ociToaws
    

서비스 커넥터를 생성하여 Logging에서 Functions로 OCI 로그 전송

  1. 콘솔 메뉴에서 분석 및 AI, 메시징, 서비스 커넥터 허브를 차례로 선택합니다.

  2. 서비스 커넥터를 생성할 구획을 선택합니다.

  3. 서비스 커넥터 생성을 누르고 각 값을 제공합니다. 서비스 커넥터 구성에서 스트리밍을 소스로, Logging Analytics를 대상으로 선택합니다.

  4. Configure Source(소스 구성)에서 Functions로 푸시할 로그를 선택합니다.

  5. 대상 구성 아래에서 4단계에서 생성한 함수 애플리케이션을 선택합니다.

  6. 화면에 표시되는 기본 정책을 만들고 Create를 누릅니다.

    서비스 커넥터 생성

    서비스 커넥터 생성

    서비스 커넥터 생성

작업 3: 로그가 Amazon S3으로 푸시되는지 확인

다음 단계

이 사용지침서에서는 서비스 커넥터 허브 및 기능을 사용하여 Oracle Cloud Infrastructure 로그를 Amazon S3로 푸시하는 방법을 보여줍니다. OCI 로그 데이터는 중복성 및 규정 준수를 위한 여러 스토리지 전략과 AWS 내의 기존 커넥터에 대한 자세한 분석을 위해 활용할 수 있습니다.

승인

Authors - Vishak Chittuvalapil(수석 클라우드 엔지니어), Lasya Vadavalli(클라우드 엔지니어-IaaS)

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer을 방문하여 Oracle Learning Explorer가 됩니다.

제품 설명서는 Oracle Help Center를 참조하십시오.