ノート:
- このチュートリアルではOracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了する場合は、これらの値をクラウド環境に固有の値に置き換えてください。
OCI関数を使用したAmazon S3へのOracle Cloud Infrastructureログのプッシュ
イントロダクション
Oracle Cloud Infrastructure (OCI) Logging Serviceは、OCIサービスおよびリソースによって生成されたすべてのログ、およびユーザーが作成したカスタム・ログの統合ビューを提供します。
OCI Functionsは、開発者が軽量のイベント駆動型アプリケーションをクラウドで構築およびデプロイできるサーバーレス・コンピュート・プラットフォームです。
Amazon S3は、Amazonが提供するスケーラビリティと信頼性の高いクラウド・ストレージ・サービスであり、ユーザーは世界中のどこからでもデータを格納および取得できます。
高レベルのプロセスには、サービス・コネクタを使用してOCIロギング・サービスからログを収集し、ターゲット関数に送信してデータをAmazon S3にプッシュすることが含まれます。
目標
OCIファンクションを使用してOCIログをAmazon S3にプッシュする方法に関するステップバイステップ・ガイド。
前提条件
-
Amazon Web Services (AWS)のユーザーは、バケットを作成し、バケット内のオブジェクトの読取りおよび書込みを実行するために必要なポリシーを持っている必要があります。バケット・ポリシーの詳細は、このページを参照してください。
-
OCIのユーザーには、リソースを管理するためのファンクション、サービス・コネクタ・ハブおよびロギング・サービスに必要なポリシーが必要です。すべてのサービスのポリシー・リファレンスは、ここにあります。
タスク1: AWS設定の構成
-
Amazon S3バケットを作成します。
-
IAMで、ユーザーのAWSアクセス・キーおよび秘密キーを作成します。
-
IAM、「ユーザー」、「セキュリティ資格証明」、「アクセス・キーの作成」、「サードパーティ・サービス」にナビゲートします。
-
生成されたAWSアクセス・キーおよび秘密キーをノートパッド・ファイルにコピーします。
-
タスク2: Oracle Cloud Infrastructure設定の構成
OCI VaultにAWSアクセス・キーと秘密キーを格納
-
「アイデンティティおよびセキュリティ」、「ボールト」に移動します。Vault、MEKを作成していない場合は作成します。詳細は、このドキュメントに従ってください。
-
Vaultに2つのシークレットを作成します。1つはAWSアクセス・キーを格納するため、もう1つはAWSシークレット・キー用です。下の画像は参考用です。
動的グループの作成
-
「アイデンティティとセキュリティ」、「アイデンティティ」、「動的グループ」にナビゲートします。
-
次の一致ルールを使用して、コンパートメント内のすべてのファンクションの動的グループを作成します。
ALL {resource.type = 'fnfunc', resource.compartment.id = '<your_compartment_id>'}
動的グループのポリシーの作成
-
「アイデンティティとセキュリティ」、「アイデンティティ」、「ポリシー」に移動します。
-
上の動的グループのポリシーを作成して、すべてのファンクションが各コンパートメントのシークレット・ファミリにアクセスできるようにします。ポリシーは、単一のボールトに絞り込むこともできます。
allow dynamic-group <dynamic_group_name> to manage secret-family in compartment <compartment_name>
Pythonまたはサポートされている言語でOCIファンクションを作成し、OCIログをAmazon S3に送信します
-
Oracle Cloudコンソールのメニューで、「開発者サービス」にナビゲートし、「ファンクション」を選択します。
-
既存のアプリケーションを選択するか、「アプリケーションの作成」をクリックします。アプリケーション内にファンクションを作成します。
-
このチュートリアルでは、OCI Cloud Shellを使用してファンクションを作成します。
ノート: クラウド・シェルは、設定の前提条件を必要としないため、推奨されるオプションです。OCI Functionsを初めて使用する場合は、クラウド・シェルでのファンクションのクイック・スタートのセクションA、BおよびCに従います。
-
最初にサンプルPython関数を作成することをお薦めします。次のコマンドは、
func.py
、func.yaml
およびrequirements.txt
の3つのファイルを含むフォルダociToaws
を生成します。fn init --runtime python pushlogs
-
次のコードを使用して
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')
-
次のコードで
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
-
次のコードを使用して
requirements.txt
を変更します。fdk>=0.1.56 boto3 oci
-
次のコマンドを使用してファンクションをデプロイします。
fn -v deploy --app ociToaws
ログからファンクションにOCIログを送信するためのサービス・コネクタの作成
-
「Console」メニューで、「Analytics & AI、 Messaging、」→「Service Connector Hub」を選択します。
-
サービス・コネクタを作成するコンパートメントを選択します。
-
「サービス・コネクタの作成」をクリックし、それぞれの値を指定します。「サービス・コネクタの構成」で、ソースとして「ストリーミング」を選択し、ターゲットとして「ログ・アナリティクス」を選択します。
-
「ソースの構成」で、ファンクションにプッシュするログを選択します
-
「Configure Destination」で、ステップ4で作成したファンクション・アプリケーションを選択します。
-
画面に表示されるデフォルト・ポリシーを作成し、「作成」をクリックします。
タスク3: ログがAmazon S3にプッシュされるかどうかの確認
-
前に作成したAmazon S3バケットに移動して、OCIログが使用可能かどうかを確認します。
次のステップ
このチュートリアルでは、Service Connector HubとFunctionsを使用して、Oracle Cloud InfrastructureのログをAmazon S3にプッシュする方法を示した。OCIログ・データは、冗長性とコンプライアンスの複数のストレージ戦略に使用でき、AWS内の既存のコネクタの詳細な分析にも使用できます。
承認
著者 - Vishak Chittuvalapil (シニア・クラウド・エンジニア)、Lasya Vadavalli (クラウド・エンジニア-IaaS)
その他の学習リソース
docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Push Oracle Cloud Infrastructure Logs to Amazon S3 with OCI Functions
F82371-01
June 2023
Copyright © 2023, Oracle and/or its affiliates.