LoginSignup
9
2

More than 3 years have passed since last update.

[Oracle Cloud] Object Storage のリージョン間自動コピーを、Oracle Functions で実現

Last updated at Posted at 2019-08-28

はじめに

Oracle Cloud Infrastructure(以下OCI) のオブジェクトストレージは、リージョン内に配置されたサービスです。
世界規模の可用性や、世界各地からのダウンロード速度を上げたい場合、複数のリージョンへオブジェクトを配置したいユースケースが考えられます。

現時点で、OCI には手動で複数リージョン間をまたいでコピーする機能はありますが、自動的にコピーをしてくれる機能ではありません。Oracle Functions と Events を活用して自動コピー機能を実現することができます。

今回の記事では、GitHub に上げているサンプルコードを使用して、使用する方法を紹介していきます。

※ サンプルコードなので、エラーハンドリングが考慮されていない箇所があります。
本番利用の際は、アルゴリズムの見直しや、指定したリージョンでコピーがされていない状況の検知を考慮する必要があります。ご留意ください。

概要図

1566998416732.png

Object Storage の設定

まずは、Object Storage の Bucket を、使用したいリージョンで作成をします。
サンプルコードの仕様上、全て同じ名前である必要があるため、multi_region という名前で作成します。

この記事の 手順例 では、以下の 3 リージョンを 対象にしています

  • 東京 (ap-tokyo-1)
  • アッシュバーン (us-ashburn-1)
  • フェニックス (us-phenix-1)

コピー先のリージョンは、自由に変更可能なので、好きなリージョンで作成頂いて構いません。

Function の 設定

Function Deploy

まず、Functions を動かす準備が出来ていない場合は、以下の Document や Quick Start Guide を参考にして、事前準備をします。
Preparing for Oracle Functions
https://docs.cloud.oracle.com/iaas/Content/Functions/Concepts/functionsprerequisites.htm

Quick Start Guide
https://www.oracle.com/webfolder/technetwork/tutorials/infographics/oci_faas_gettingstarted_quickview/functions_quickview_top/functions_quickview/index.html

Functions を動かす準備が出来たら、GitHub から Sample コードをclone します

# 作業用ディレクトリ作成
mkdir ~/fnwork/
cd ~/fnwork/

# GitHub から clone
git clone https://github.com/Sugi275/oci-objectstorage-multiregioner.git

Sample コードの中で実行している概要は、以下の通りです

  • generateAction 関数で、Events から受け取ったパラメータと環境変数をもとに、Object Storage のコピー機能のパラメータを 構造体(struct)として生成します
  • Object Storage に格納されたファイルが新規作成(create) と 更新(update) の場合には、tokyo region から、他のリージョンにコピー。他のリージョンでファイルが存在している場合は上書き
  • ファイルが削除(delete) された場合は、他リージョンのファイルを削除

clone したディレクトリへ移動します

cd ~/fnwork/oci-objectstorage-multiregioner/

go.mod を作成します

echo "module func" > go.mod

Functions へ multiregioner の function を Deploy します。--app に渡すアプリケーション名は環境によって書き換えてください

fn --verbose deploy --app susugiya

次に、Deploy した Functions の OCID をコピーします。
OCI コンソールのメニューから、Developer Services > Functions を選択します。
私の環境で、事前に作成していた Application の名前を選択します。

1567002098720.png

objectstorage_multiregioner の OCID を Copy します

例 : ocid1.fnfunc.oc1.ap-tokyo-1.aaaaaaaaacbqyf6ps7uxmpz3tevmvkmvbbsqqcgkf3xk62zvjryb4hhgo36a

1567002144071.png

Function の 環境変数設定

Functions に環境変数を設定します。3種類の環境変数が必要です。

  • OCI_BUCKETNAME : Object Storage のバケット名を指定します。今回の例では、multi_region としています。
  • OCI_SOURCE_REGION : Object Storage のコピー元のリージョン名を指定します。今回の例では、ap-tokyo-1 としています
  • OCI_DESTINATION_REGIONS : Object Storage のコピー先のリージョン名を指定します。複数存在する場合は、カンマで区切りで指定すればOKです。今回の例では、us-ashburn-1,us-phoenix-1 としています。
fn config func susugiya objectstorage_multiregioner OCI_BUCKETNAME "multi_region"
fn config func susugiya objectstorage_multiregioner OCI_SOURCE_REGION "ap-tokyo-1"
fn config func susugiya objectstorage_multiregioner OCI_DESTINATION_REGIONS "us-ashburn-1,us-phoenix-1"

Function の logging

Functions では、logging として現段階は2種類の方式がサポートされています

  • Object Storage へ出力
  • syslog

開発環境としては、syslog を使用するのが楽で良いです。Object Storage の場合は、出力されるのに約15分ほど待つ必要があるため、すばやい log 確認が出来ません。syslog の場合はすぐに確認できるのでお勧めです。

syslog を受け取るために syslog サーバを用意してもよいのですが、開発する時には 無償で使用可能な SaaS の Papertrail が簡単でお勧めです。

Papertrail の設定方法は、こちら の記事を参考にしてください。
なお、OCI コンソール上から Papertrail の送付先を設定・確認することが可能です。

Edit Application を選択
1567003485810.png

logging 先を設定変更

1567003522717.png

Dynamic Group

次に、Function 内で OCI SDK を使用するための権限を付与するために、Resource Principle を使用するための設定を行います。Resource Principle 自体の説明は こちら を参照してください

OCI のメニューから、Identity > Dynamic Groups へ移動し、 Create Dynamic Group を押します
以下のパラメータを入力し、Create を押します

  • NAME : susugiya_objectstorage_multiregional_group
  • DESCRIPTIN : susugiya_objectstorage_multiregional_group

Rule に以下の文字列を入力します。resource.id の部分は、作成した Function の OCID を指定します。

ALL {resource.type = 'fnfunc', resource.id = 'ocid1.fnfunc.oc1.ap-tokyo-1.aaaaaaaaacbqyf6ps7uxmpz3tevmvkmvbbsqqcgkf3xk62zvjryb4hhgo36a'}

1566991397719.png

Policy

2種類の Policy を設定する必要があります

  • リソースプリンシパル用
  • Object Storage のリージョン間コピー機能用

リソースプリンシパル用

Identity > Policies へ移動し、 Create Policy を押します
以下のパラメータを入力し、Create を押します

  • NAME : objectstorage_multiregional_policy
  • DESCRIPTION : objectstorage_multiregional_policy
  • STATEMENT : 以下の文字列で指定します。 Dynamic Group で作成した名前を指定して、object-family(Object Storage サービス) を manage(全操作可能) な権限を付与しています
Allow dynamic-group susugiya_objectstorage_multiregional_group to manage object-family in compartment susugiya

画面例

1567002392168.png

Object Storage のリージョン間コピー機能用

Create Policy を押します
以下のパラメータを入力し、Create を押します

  • NAME : objectstorage_multiregional_policy
  • DESCRIPTION : objectstorage_multiregional_policy
  • STATEMENT : 以下の文字列で指定。使用したいリージョン分を全て指定します。リージョン名は、OCI コンソール上で確認可能です
Allow service objectstorage-us-ashburn-1 to manage object-family in tenancy
Allow service objectstorage-ap-tokyo-1 to manage object-family in tenancy
Allow service objectstorage-us-phoenix-1 to manage object-family in tenancy

参考 Document : https://docs.cloud.oracle.com/iaas/Content/Object/Tasks/copyingobjects.htm#permissions

参考 リージョン名

1567002696298.png

Events の 設定

次に、Tokyo Region の Object Storage を起点にして Events を動かすために設定を行います。
OCI のメニューから、 Application Integration > Events Service を選択します。

Create Rule を押して、以下のパラメータを指定していきます

  • DISPLAY NAME : objectstorage_multiregion
  • DESCRIPTION : objectstorage_multiregion
  • Events Matching : 下の画像を参考にして設定する
    • EVENT TYPE に Object の Create, Delete, Update の3種類を入力
    • Attribute に、bucketNamemulti_region と手入力することで、特定のバケットに制限
  • Actions : Function の 名前を指定

1566908155243.png

動作確認

それでは準備完了できたので、さっそく動作確認をしてみます。エラーログや実行時のログは logging 先の Papertrail を確認すると、ほぼリアルタイムにログが表示されるので、これを開きながら動作確認すると良いです。

では、Tokyo Region の Object Storage にある バケットmulti_regionにファイル(Object) を格納します。

Upload Objects を押します

1567003672939.png

Upload Objects を選択すると、ファイルがアップロードされます

1567003712157.png

Work Requests の画面では、Object Storage へのリクエストされたコピー機能の状況が示されています。
Resource Name に、アップロードしたファイル名が表示され、Status が Completed となっています

1567003845277.png

ashburn と phoenix Region でファイルがコピーされていることが確認できます

ashburn

1567003975338.png

phoenix

1567004008677.png

Papertrail では実行時のログが出力されています

1567004122452.png

参考URL

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2