0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Oracle Cloud]Oracle FunctionsでBase Databaseのバックアップを取得してみた。

Posted at

Oracle FunctionsでBase Databaseのバックアップを取得してみた。

※ Oracle Functionsとは、Oracle Cloud Infrastructureで提供されるFn Projectのマネージドサービス

事前準備

Oracle Functionsが利用できるように以下の作業を実施

Oracle Functionsがbase database backupが可能になるようにリソースプリンシパルの構成

動的グループの作成
Functionsに使用するコンパートメント用に動的グループを作成
一致ルール

ALL{resource.type='fnfunc', resource.compartment.id='ocid1.compartment.oc1..aaaaaaaa ..."}

動的グループにポリシーの割り当て
シークレットを読み取れるように、動的グループにポリシーを割り当て

allow dynamic-group XXX  to read secret-family in tenancy

コンパートメントレベルでのポリシーでも可

ファンクションの作成

アプリケーションの作成

Webコンソールまたは、CLIでアプリケーションを作成

fn create app backupap

ファンクションの作成/テストディレクトリの削除

すべてのファイルは github より取得可能

        fn init --runtime java sampletimestamp
        cd sampletimestamp
        rm -r src/test/
        fn config function backupap sampletimestamp DATABASE_ID ocid1.database.oc1.XXXX

バックアップ対象となるBase DatabaseのOCIDを設定

        fn config function backupap sampletimestamp DATABASE_ID ocid1.database.oc1.XXXX

pom.xmlファイルのdependenciesにSDKを追記

pom.xml
    <dependency>
      <groupId>com.oracle.oci.sdk</groupId>
      <artifactId>oci-java-sdk-core</artifactId>
      <version>2.45.0</version>
    </dependency>
    <dependency>
      <groupId>com.oracle.oci.sdk</groupId>
      <artifactId>oci-java-sdk-database</artifactId>
      <version>2.45.0</version>
    </dependency>

func.yamlファイルにタイムアウトとメモリの値を追記

func.yaml
memory: 128
timeout: 180

HelloFunction.javaの編集(一部抜粋)

クラス群のインポート

import com.oracle.bmc.auth.ResourcePrincipalAuthenticationDetailsProvider;
import com.oracle.bmc.database.DatabaseClient;
import com.oracle.bmc.database.model.*;
import com.oracle.bmc.database.requests.*;
import com.oracle.bmc.database.responses.*;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;

変数の宣言

DatabaseID を取得

    final String dbid = System.getenv().get("DATABASE_ID");

リソースプリンシパル

        final ResourcePrincipalAuthenticationDetailsProvider provider = ResourcePrincipalAuthenticationDetailsProvider.builder().build();

Backup Displayname をタイムスタンプ付で生成

        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String str = sdf.format(timestamp);
        String prep = "backup";
        String displayname = prep + str;

バックアップ取得

        /* Create a service client */
        DatabaseClient client = new DatabaseClient(provider);
        
        /* Create a request and dependent object(s). */
        CreateBackupDetails createBackupDetails = CreateBackupDetails.builder()
                .databaseId(dbid)
                .displayName(displayname).build();

        CreateBackupRequest createBackupRequest = CreateBackupRequest.builder()
                .createBackupDetails(createBackupDetails)
                .opcRetryToken("opcRetryToken-Value").build();

        /* Send request to the Client */
        CreateBackupResponse response = client.createBackup(createBackupRequest);

ファンクションのデプロイと呼び出し

デプロイと呼び出し

        fn deploy --app sampletimestamp
        fn invoke backupap sampletimestamp

バックアップ確認
image.png

おわりに

FunctionsでBase Databaseのバックアップ取得ができた。

参考情報

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?