ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

OCI Bastionサービス で Private Compute に SSH接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI Bastionサービスで Private Compute に SSH接続してみますやで彡(゚)(゚)

1. Bastionサービスとは?

いわゆる踏み台のサービスです。無料です。手元のPC等から OCI Compute への SSH接続、
Windows Compute へのリモートデスクトップ接続(DB)、DB系サービスへの SQL*Net接続などを
Bastionサービスを経由して実行可能です。サービス紹介やマニュアルは下記となります。

要塞概要
https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Concepts/bastionoverview.htm
※要塞……Bastion の直訳らしいです。踏み台と訳した方がエエですね……彡(-)(-)

Oracle Bastion
https://www.oracle.com/jp/security/cloud-security/bastion/

2. 検証環境

下記記事の構成を流用します。ただし Public Subnet は今回使用しません。
Private Subnet に Compute と Bastionサービス を作成します。

検証によく使う Oracle Cloud Infrastructure(OCI) の 環境構成(VCN, Seculity List, 各種Gateway, Route Table, Subnet, Compute)まとめ
https://qiita.com/ora_gonsuke777/items/08e4781af8c4f7e114ff

3. ポリシー(権限)の付与

Bastionサービスを作成するIAMユーザーにBastionサービスに必要なポリシー(権限)を付与します。

要塞IAMポリシー
https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Reference/bastionpolicyreference.htm

今回は下記のポリシーをIAMユーザーに付与しています。

Allow group ayu-group-bastion1 to manage bastion-family in tenancy
Allow group ayu-group-bastion1 to manage virtual-network-family in tenancy
Allow group ayu-group-bastion1 to read instance-family in tenancy
Allow group ayu-group-bastion1 to read instance-agent-plugins in tenancy
Allow group ayu-group-bastion1 to inspect work-requests in tenancy

4. Compute の Bastion Plugin有効化

Private Subnet に作成した Compute をコンソールで参照して Bastion Plugin を有効化します。
Oracle Provided Image の Oracle Linux等で作成した Compute なら「OCI Cloud Agent」のサブタブから制御可能です。
bastion099.jpg

bastion001.jpg

bastion002.jpg

5. Bastionサービスの作成

Identity&Security → Bastion で画面遷移して、Bastionサービスを作成します。

今回は Private Subnet に Bastionサービスを作成します。
CIDR Block Allowed は接続元(PC端末など)の IP を CIDR で指定します。単体のIPの場合は xxx.xxx.xxx.xxx/32 で。

bastion000.jpg

6. Bastionセッションの作成

Bastionセッションを作成します。セッションを作成すると、このセッションが生存している間は
対象リソースに接続可能になります。セッション作成時に 4. の Plugin を有効化していないとエラーになります。

bastion010.jpg bastion011.jpg

7. SSHコマンドのコピー/編集/接続

セッションが作成されると接続のためのSSHコマンドがコピー可能になります。 bastion020.jpg

編集前のSSHコマンド

ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x

編集後のSSHコマンド(※5. Bastionサービス作成時の公開鍵に対応する秘密鍵を指定)

ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -o ProxyCommand="ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x

編集後のSSHコマンドを実行します。今回は PC端末(Windows10)の PowerShell上 で実行してみました。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\Users\user> ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -o ProxyCommand="ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x
Last login: Mon Aug 30 11:53:24 2021 from 10.0.6.94
Last login: Mon Aug 30 11:53:24 2021 from 10.0.6.94
[opc@ayu-compute1 ~]$ id -a
uid=1000(opc) gid=1000(opc) groups=1000(opc),4(adm),10(wheel),190(systemd-journal) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[opc@ayu-compute1 ~]$ hostname
ayu-compute1
[opc@ayu-compute1 ~]$ 

Bastionサービスのセッション経由で Compute に SSH接続できました彡(^)(^)

8. まとめ

上記 4. の Bastion Plugin有効化 がちょっとしたハマりポイントでしょうか。
Public Subnet に作成する必要が無いというのも留意すべきかもしれません。

今回は SSH接続 でしたが、ポートフォワードの要領で 22(SSH)ポート以外 でも接続可能です。
無料のサービスなので、どんどん活用して下さいね。彡(^)(^)

OCI CLI で OCI Console の「Limits, Quotas and Usage」相当の情報を取得してみる。

OCIリソースの Limits と Usage のある時点の断面を、ファイル出力して保持しておくという
必要に迫られたので、表題の件について色々検証してみました。彡(゚)(゚)

1. 前提条件/検証環境

OCI上に構築した Private Subnet の Compute(Linux) に OCI CLI をインストールして作業します。
OCI CLI は インストール と 設定(oci setup config) が完了した状態を前提とします。

検証によく使う Oracle Cloud Infrastructure(OCI) の
環境構成(VCN, Seculity List, 各種Gateway, Route Table, Subnet, Compute)まとめ
https://qiita.com/ora_gonsuke777/items/08e4781af8c4f7e114ff

(マニュアル) CLIの構成
https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliconfigure.htm

2. Service Name の取得(oci limits definition list ...)

Usage を OCI CLI で取得するには、最終的には oci limits resource-availability get というコマンドを使用します。
このコマンドの引数である service-name や limit-name を取得するために、まずは oci limits definition list を実行します。
※コンパートメントの OCID が必要なため、そちらは予め OCIコンソールで確認しておくこと

oci limits definition list -c ocid1.tenancy.oc1..xxxxxxxxxx --all

{
  "data": [
    {
      "are-quotas-supported": true,
      "description": "Concurrent Appliance Count",
      "is-deprecated": false,
      "is-dynamic": false,
      "is-eligible-for-limit-increase": true,
      "is-resource-availability-supported": false,
      "name": "active-appliance-count",
      "scope-type": "REGION",
      "service-name": "data-transfer" ★ここが必要
    },
    {
      "are-quotas-supported": false,
      "description": "Concurrent Cloud Shell Users",
      "is-deprecated": false,
      "is-dynamic": false,
      "is-eligible-for-limit-increase": true,
      "is-resource-availability-supported": true,
      "name": "active-users",
      "scope-type": "GLOBAL",
      "service-name": "cloud-shell" ★ここが必要
    },
    {
      "are-quotas-supported": true,
      "description": "Always Free Autonomous Database Instance Count",
      "is-deprecated": false,
      "is-dynamic": false,
      "is-eligible-for-limit-increase": true,
      "is-resource-availability-supported": true,
      "name": "adb-free-count",
      "scope-type": "REGION",
      "service-name": "database" ★ここが必要
    },
:

3. Limit Name と Limits値 の取得(oci limits value list ...)

上記 2. で取得した Service Name で 次は Limit Name と Limits値 を取得します。
AD(FD)リソース(※) と リージョナルリソース で必要な部分が異なるので、それぞれサンプルを載せておきます。
※AD ... Availability Domain のこと、FD ... Fault Domain のこと

  • AD(FD)リソースの場合(※下記は service-name に compute を指定)
oci limits value list -c ocid1.tenancy.oc1..xxxxxxxxxx --service-name compute --all

{
  "data": [
    {
      "availability-domain": "xxxx:PHX-AD-1",  ★ここが必要
      "name": "bm-dense-io1-36-count", ★ここが必要
      "scope-type": "AD", 
      "value": 0 ★ここがLimits値(例外あり)
    },
    {
      "availability-domain": "xxxx:PHX-AD-2", ★ここが必要
      "name": "bm-dense-io1-36-count", ★ここが必要
      "scope-type": "AD",
      "value": 0 ★ここがLimits値(例外あり)
    },
:
  • リージョナルリソースの場合(※下記は service-name に vcn を指定)
oci limits value list -c ocid1.tenancy.oc1..xxxxxxxxxx --service-name vcn --all
{
  "data": [
    {
      "availability-domain": null,
      "name": "dhcp-option-count", ★ここが必要
      "scope-type": "REGION",
      "value": 300 ★ここがLimits値(例外あり)
    },
    {
      "availability-domain": null,
      "name": "flow-log-config-count", ★ここが必要
      "scope-type": "GLOBAL",
      "value": 100 ★ここがLimits値(例外あり)
    },
    {
      "availability-domain": null,
      "name": "internet-gateway-count", ★ここが必要
      "scope-type": "REGION",
      "value": 1 ★ここがLimits値(例外あり)
    },
:

4. Usage の取得(oci limits resource-availability get ...)

上記 2. と 3. で取得した Service Name/Limit Name で次は Usage を取得します。
oci limits resource-availability getコマンドを実行します。

AD(FD)リソース と リージョナルリソース で必須オプションが異なるので、
それぞれサンプルを載せておきます。

  • AD(FD)リソースの場合(※下記は service-name に compute、limit-name に standard-e3-core-ad-count を指定)
oci limits resource-availability get --compartment-id ocid1.tenancy.oc1..xxxxxxxxxx --limit-name standard-e3-core-ad-count --service-name compute --availability-domain xxxx:PHX-AD-1

{
  "data": {
    "available": 600,
    "effective-quota-value": null,
    "fractional-availability": 600.0,
    "fractional-usage": 0.0,
    "used": 0  ★ここがUsage値(例外あり)
  }
}
  • リージョナルリソースの場合
oci limits resource-availability get --compartment-id ocid1.tenancy.oc1..xxxxxxxxxx --limit-name vcn-count --service-name vcn

{
  "data": {
    "available": 49,
    "effective-quota-value": null,
    "fractional-availability": 49.0,
    "fractional-usage": 1.0,
    "used": 1  ★ここがUsage値(例外あり)
  }
}

5. 複数リージョン の Limits と Usage を取得する場合

上記のコマンドの場合は OCI CLI の デフォルトconfig に定義された
リージョンの Limits と Usage が取得されてきます。

複数リージョン の Limits と Usage を取得したい場合は、
各コマンドに --regionオプション を指定します。

下記は oci limits value listコマンド のサンプルとなります。
JSON の availability-domain がデフォルトの Phoenix と異なるのが判ります。

oci limits value list -c ocid1.tenancy.oc1..xxxxxxxxxx --service-name compute --all --region us-ashburn-1

{
  "data": [
    {
      "availability-domain": "xxxx:US-ASHBURN-AD-1",
      "name": "bm-dense-io1-36-count",
      "scope-type": "AD",
      "value": 0
    },
    {
      "availability-domain": "xxxx:US-ASHBURN-AD-2",
      "name": "bm-dense-io1-36-count",
      "scope-type": "AD",
      "value": 0
    },
:

6. スクリプト化(OCILimitsAndUsage.sh)

一連のコマンドを手動で実行するのは流石に無理なので、スクリプト化してみますた。

#!/usr/bin/bash
#####################################################################################
#
# Overview: This shell outputs csv of the Service Limits and Usage in the OCI tenant.
# Pre-requirement1. Have the OCI CLI installed.
# Pre-requirement2. Make OCI CLI ready to run through the path.
# Pre-requirement3. Complete the configuration(oci setup config).
#
# Usage: ./OCILimitsAndUsage.sh $1 $2 $3
# $1 ... OCI CLI configration file full path
# $2 ... Compartment OCID
# $3 ... Tenancy Name
#
# Example: ./OCILimitsAndUsage.sh /home/opc/.oci/config ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxx ayutenant
#
#####################################################################################

# Get Region Name List
function GetRegionNameList() {
  oci iam region-subscription list | jq -r '.data[]|[."region-name"]|@csv' | tr -d '"' > ${REGION_NAME_LIST}
  return 0;
}

# Get Service Name List
function GetServiceNameList() {
  REGION_NAME=$1
  oci limits definition list -c ${COMPARTMENT_OCID} --all --region ${REGION_NAME} | jq -r '.data[]|[."service-name"]|@csv' | sort -u > ${SERVICE_NAME_LIST}
  return 0;
}

# Get Limit Name List
function GetLimitNameList() {
  REGION_NAME=$1
  cat ${SERVICE_NAME_LIST} | while read -r SERVICE_NAME
  do
    SERVICE_NAME2=`echo ${SERVICE_NAME} | tr -d '"'`
    oci limits value list -c ${COMPARTMENT_OCID} --service-name ${SERVICE_NAME2} --all  --region ${REGION_NAME} | jq -r '.data[]|[."availability-domain", ."name", ."value"]|@csv' > ${LIMIT_NAME_LIST_TMP}
    cat ${LIMIT_NAME_LIST_TMP} | sed "s/^,/\"\",/" | sed -e "s/^/${SERVICE_NAME},/" >> ${LIMIT_NAME_LIST}
  done;
  return 0;
}

# Get Limits and Usage
function GetLimitsAndUsage() {
  REGION_NAME=$1
  DATETIME=`date +"%Y%m%d,%H%M%S"`
  cat ${LIMIT_NAME_LIST} | sed "s/,/ /g" | while read -r SERVICE_NAME AD_NAME LIMIT_NAME LIMIT_VALUE
  do
    SERVICE_NAME2=`echo ${SERVICE_NAME} | tr -d '"'`
    AD_NAME2=`echo ${AD_NAME} | tr -d '"'`
    LIMIT_NAME2=`echo ${LIMIT_NAME} | tr -d '"'`
    LIMIT_VALUE2=`echo ${LIMIT_VALUE} | tr -d '"'`
    if [ "${AD_NAME}" = '""' ] ; then
      # echo "AD is empty."
      oci limits resource-availability get --compartment-id ${COMPARTMENT_OCID} --limit-name ${LIMIT_NAME2} --service-name ${SERVICE_NAME2} --region ${REGION_NAME} | jq -r '.data|[."available", ."used"]|@csv' > ${LIMIT_USAGE_TMP}
      cat ${LIMIT_USAGE_TMP} | sed "s/^/${DATETIME},${TENANCY_NAME},${REGION_NAME},${SERVICE_NAME2},${AD_NAME2},${LIMIT_NAME2},${LIMIT_VALUE2},/" >> ${LIMIT_USAGE_CSV}
    else
      # echo "AD is not empty."
      oci limits resource-availability get --compartment-id ${COMPARTMENT_OCID} --limit-name ${LIMIT_NAME2} --service-name ${SERVICE_NAME2} --availability-domain ${AD_NAME2} --region ${REGION_NAME} | jq -r '.data|[."available", ."used"]|@csv' > ${LIMIT_USAGE_TMP}
      cat ${LIMIT_USAGE_TMP} | sed "s/^/${DATETIME},${TENANCY_NAME},${REGION_NAME},${SERVICE_NAME2},${AD_NAME2},${LIMIT_NAME2},${LIMIT_VALUE2},/" >> ${LIMIT_USAGE_CSV}
    fi;
done;
}

# Parameter Check
if [ -z "$1" -o -z "$2" -o -z "$3" ] ; then
  echo "Usage: ./OCILimitsAndUsage.sh \$1 \$2 \$3";
  exit 1;
fi;

# Initialize
export OCI_CLI_RC_FILE=$1
export COMPARTMENT_OCID=$2
export TENANCY_NAME=$3
export REGION_NAME_LIST="${TENANCY_NAME}_region_name_list.csv"
export SERVICE_NAME_LIST="${TENANCY_NAME}_servie_name_list.csv"
export LIMIT_NAME_LIST="${TENANCY_NAME}_limit_name_list.csv"
export LIMIT_NAME_LIST_TMP="${TENANCY_NAME}_limit_name_list_tmp.tmp"
export LIMIT_USAGE_TMP="${TENANCY_NAME}_limit_usage.tmp"

: > ${REGION_NAME_LIST}
: > ${SERVICE_NAME_LIST}
: > ${LIMIT_NAME_LIST}
: > ${LIMIT_NAME_LIST_TMP}
: > ${LIMIT_USAGE_TMP}

# CSV file initialize
export DATETIME2=`date +"%Y%m%d_%H%M%S"`
export LIMIT_USAGE_CSV="${DATETIME2}_${TENANCY_NAME}_limit_usage.csv"
echo "DATE,TIME,TENANCY_NAME,REGION_NAME,SERVICE_NAME,AVAILABILITY_DOMAIN,LIMIT_NAME,LIMITS,AVAILABLE,USED" > ${LIMIT_USAGE_CSV}

# Get Region Name List
GetRegionNameList

# Get Limit and Usage in the All-Region
cat ${REGION_NAME_LIST} | while read -r REGION_NAME
do
  # Initialize
  : > ${SERVICE_NAME_LIST}
  : > ${LIMIT_NAME_LIST}
  : > ${LIMIT_NAME_LIST_TMP}
  : > ${LIMIT_USAGE_TMP}
  # Get Service Name List
  GetServiceNameList ${REGION_NAME}

  # Get Limit Name List
  GetLimitNameList ${REGION_NAME}

  # Get Limits and Usage
  GetLimitsAndUsage ${REGION_NAME}
done;

# Finalize
rm ${REGION_NAME_LIST}
rm ${SERVICE_NAME_LIST}
rm ${LIMIT_NAME_LIST}
rm ${LIMIT_NAME_LIST_TMP}
rm ${LIMIT_USAGE_TMP}

exit 0;

前提条件を整えてシェルを以下のように実行します。

./OCILimitsAndUsage.sh /home/opc/.oci/config ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxx ayutenant

以下のような CSVファイルが出力されます。

cat 20210724_055626_ayutenant_limit_usage.csv

DATE,TIME,TENANCY_NAME,REGION_NAME,SERVICE_NAME,AVAILABILITY_DOMAIN,LIMIT_NAME,LIMITS,AVAILABLE,USED
:
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-1,standard-e3-core-ad-count,600,600,0
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-2,standard-e3-core-ad-count,600,600,0
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-3,standard-e3-core-ad-count,600,600,0
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-1,standard-e3-core-count-reservable,0,0,0
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-2,standard-e3-core-count-reservable,0,0,0
20210724,055749,ayutenant,us-ashburn-1,compute,xxxx:US-ASHBURN-AD-3,standard-e3-core-count-reservable,0,0,0

GitHub にもうpしときました。彡(゚)(゚)

https://github.com/gonsuke777/OCI/tree/master/OCILimitsAndUsage

7. まとめ

事前に想像していたのの10倍位は面倒でしたやね。彡(゚)(゚)

スクリプトもダーティな作りなんですが、JSONJSON のまま扱える言語で書いた方がスマートなんですかね。
JSONJavaScript で扱うためのデータ構造なので、Node.js とかがエエんかしら……?

8. 参考ドキュメント

(OCI CLI Command Reference) Docs >> limits >> definition >> list
https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.26.3/oci_cli_docs/cmdref/limits/definition/list.html

(OCI CLI Command Reference) Docs >> limits >> value >> list
https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.26.3/oci_cli_docs/cmdref/limits/value/list.html

(OCI CLI Command Reference) Docs >> limits >> resource-availability >> get
https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.26.3/oci_cli_docs/cmdref/limits/resource-availability/get.html

シンプルな OCI Functions を API Gateway でシンプルに呼び出して結果をブラウザに表示する。(Oracle Cloud Infrastructure)

OCI Functions は OCI のサーバーレスな実行環境や!彡(^)(^)
JavaPython など様々な言語をサーバレスで実行できます。

Oracle Cloud - Cloud Native 2021
https://speakerdeck.com/oracle4engineer/oracle-cloud-hangout-cafe-premium-oracle-cloud-cloud-native-2021?slide=34

Serverless な世界をのぞいてみよう!
https://speakerdeck.com/oracle4engineer/lets-dive-serverless-world

Functions001.jpg

今回はシンプルな OCI Functions を作成して、API Gateway でシンプルに
呼び出して結果をブラウザ表示してみますやで彡(゚)(゚)

1. ネットワーク構成

ネットワーク構成は下記記事のとほぼ同じです。

検証によく使う Oracle Cloud Infrastructure(OCI)環境を Terraform で作成してみる。
https://qiita.com/ora_gonsuke777/items/8651c4075ec6bf436c4f

Functions002.jpg

ポートは 22番(SSH), 443(https), 80(http) あたりを開けておきます。22(SSH) は今回使いませんが。

2. OCI Functions の作成

下記記事の Getting Started で使用可能になる Java のコードをほんの少し改修しました。
Functionsそのもの は Private Subnet にデプロイしています。

Oracle Functions の Getting Started を試してみる。(Oracle Cloud Infrastructure)
https://qiita.com/ora_gonsuke777/items/a9bb52faadcb9f2af38e

package com.example.fn;

public class HelloFunction {

    public String handleRequest(String input) {
        System.out.println("Inside Java Hello World function"); 
        return "{ \"key1\" : \"Hello world!\"}";
    }

}
package com.example.fn;

import com.fnproject.fn.testing.*;
import org.junit.*;

import static org.junit.Assert.*;

public class HelloFunctionTest {

    @Rule
    public final FnTestingRule testing = FnTestingRule.createDefault();

    @Test
    public void shouldReturnGreeting() {
        testing.givenEvent().enqueue();
        testing.thenRun(HelloFunction.class, "handleRequest");

        FnResult result = testing.getOnlyResult();
        assertEquals("{ \"key1\" : \"Hello world!\"}", result.getBodyAsString());
    }

}

生実行(fn invoke ~)の結果は下記のとおりです。

$ fn invoke ayu-functions1 hello-java
{ "key1" : "Hello world!"}

3. API Gateway の作成

API Gateway を作成します。特別な事は無く粛々と……。
API Gateway を作成するネットワークは Public の Subnet を指定します。

Functions003.jpg

4. API Gateway の Deployment を作成

API Gateway の Deployment を作成します。シンプルなコール方法なので、こちらも特別なことはなく粛々と……。 Functions004.jpg

Functions005.jpg

METHODS は GET のみを指定

Functions006.jpg

5. 実行権限の付与(リソース・プリンシパル)

API Gateway に Functions の実行権限を付与してやります。

ネットワークおよびAPIゲートウェイ関連リソースへのアクセスを制御するポリシーの作成
https://docs.oracle.com/ja-jp/iaas/Content/APIGateway/Tasks/apigatewaycreatingpolicies.htm

下記のような IAM Policy を作成して、API Gateway に Functions の実行権限を付与します。

ALLOW any-user to use functions-family in compartment <コンパートメント名> 
where ALL {
  request.principal.type= 'ApiGateway', 
  request.resource.compartment.id = '<コンパートメントの OCID>'
}

OCI の権限(Policy)は通常は Group を介して IAMユーザー に
付与されますが、権限を OCI のリソースに対しても付与することが可能で、
リソースに対して権限を付与するのがリソースプリンシパルです。(あってる?)

6. API Gateway の endpoint をブラウザでアクセス

まず API Gateway の endpoint を確認します。Deployment の下記部分です。

Functions007.jpg

endpoint に 4. で作成した Deployment の PATH を追記してブラウザでアクセスします。

Functions008.jpg

成功や!ブラウザに Functions の結果が表示されたやで彡(^)(^)

7. まとめ

API Gateway と Functions の組み合わせでブラウザに文字列を返すことが出来ました。

これは従来型の Web/AP + DB(データストア) の三層構造のアプリケーションを
サーバーレスなサービスで置き換えられる事を示しています。

AWS の Lambda相当の事を、OCI でも出来るんやで彡(^)(^)
Always Free も充実してきた OCI をどんどん活用して下さいね。

8. 参考ドキュメント

文中のリンクのほか、以下のドキュメントを参照しました。

サーバーレスOracle Functionsを呼び出すための完全ガイド
https://blogs.oracle.com/otnjp/the-complete-guide-to-invoking-serverless-oracle-functions-ja
APIゲートウェイの概要
https://docs.oracle.com/ja-jp/iaas/Content/APIGateway/Concepts/apigatewayoverview.htm
Functionsの概要
https://docs.oracle.com/ja-jp/iaas/Content/Functions/Concepts/functionsoverview.htm

SQL の再帰WITH句で nPr(n = r)の1桁数値順列を生成してみる。(Oracle Database)

1. やりたい事

表題の通り、再帰WITH句で下記のような数値の順列(重複無し)を生成してみます。

1       ... 1
1, 2    ... 12, 21
1, 2, 3 ... 123, 132, 213, 231, 312, 321
:

nPr の公式で n = r の順列となります。使用するのは Oracle Database で
ちょっとした検証だったので Live SQL のサイトでガチャガチャと検証彡(゚)(゚)

Oracle Live SQL
https://livesql.oracle.com/

2. 順列を生成するSQL

以下のような SQL で対象の順列を生成できました。数値1桁まで対応します。

WITH nums AS (
  SELECT LEVEL AS C0
    FROM DUAL
 CONNECT BY LEVEL <= 3
),
cte(c1, c2) AS (
  SELECT nums.c0, TO_CHAR(nums.c0)
    FROM nums
   UNION ALL
  SELECT c1
       , c2 || nums.c0
    FROM nums, cte
   WHERE LENGTH(c2) < 3
     AND cte.c2 NOT LIKE '%' || TO_CHAR(nums.c0) || '%'
)
SELECT *
  FROM cte
 WHERE LENGTH(c2) = 3
 ORDER BY c2;

結果は以下の通り。n = r の順列の場合は n!(階乗) で要素数を表現できます。3 の場合は 321 で 6個

image.png

1,2,3,4,5 の順列では下記のようになります。要素数は 5!=54321 で 120個ですね。

image.png

3. SQLの解説

以下のような考え方で SQL を組んでいます。

・初めのWITH句(nums仮表)で順列の生成に必要な数値(1, 2, 3, ...)を生成しています。
再帰WITH句の開始条件(開始レコード)はnums仮表の各要素
再帰WITH句の継続条件は 長さが求める順列の長さより小さい場合 かつ nums仮表の要素を順列(c2列)に含まない場合
・そのままだと短い順列も取得されてしまうので、順列の文字列長で絞り込んでいます。

上記の通り再帰WITH句の継続条件の判定がショボいので、1桁の数値までしか対応しません。

4. 参考サイト

下記のサイトを参考にさせて頂きました。ありがとうございます!彡(^)(^)

SQL だけで再帰的に順列/組み合わせを列挙する
https://zenn.dev/indigo13love/articles/b04f8f2973fee3

上記サイトのように配列型を定義してゴニョゴニョすれば、1桁制限も突破できるとは思われる。
彡(゚)(゚)

Oracle Database Enterprise Edition 19c を rpm の yum localinstall で OCI Compute にインストールしてみる。

表題の通り Oracle Database Enterprise Edition 19c を rpmyum localinstall で OCI Compute にインストールしてみるやで。
彡(゚)(゚)

1. 参考ドキュメント

マニュアルは下記となります。「Oracle Database RPMの手動インストール」でインストールしてみます。

RPMパッケージの実行によるOracle Databaseのインストール
https://docs.oracle.com/cd/F19136_01/ladbi/running-rpm-packages-to-install-oracle-database.html#GUID-BB7C11E3-D385-4A2F-9EAF-75F4F0AACF02

2. oracle-database-preinstall-19c のインストール

まずは oracle-database-preinstall-19c を yum でインストールします。

このパッケージをインストールすると、Oracle Database Enterprise Edition 19c を
インストールするためのパッケージ類がまとまって入ります。超便利。もう戻れない。

yum -y install oracle-database-preinstall-19c

3. oracle-database-preinstall-19c のダウンロードと配置

下記のリンクを辿って Linux x86-64版 の rpm をダウンロードしてきます。

Oracle Software Downloads
http://www.oracle.com/technetwork/indexes/downloads/index.html

Database

Database 19c Enterprise/Standard Editions

Linux x86-64 の See All

Oracle Database 19c Download for Linux x86-64
https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html

今回は 対象Compute の /tmp配下に rpm を配置しました。

[root@ays-compute2 ~]# ls -la /tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm
-rw-rw-r--. 1 opc opc 2694664264 Mar 30 15:11 /tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm
[root@ays-compute2 ~]#

4. oracle-database-ee-19c の インストール(yum localinstall)

/tmp に配置した rpm をローカルインストールします。

cd /tmp
yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

[root@ays-compute2 tmp]# yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm
Loaded plugins: langpacks, rhnplugin, ulninfo
This system is receiving updates from ULN.
:
Installed:
  oracle-database-ee-19c.x86_64 0:1.0-1

Complete!

待ってるだけで完了や!彡(^)(^)

5. インストールの確認と sqlplus の起動

インストール先は /opt/oracle/product/19c/dbhome_1 となります。

cd /opt/oracle/product/19c/dbhome_1
ls -la

[root@ays-compute2 dbhome_1]# ls -la
total 120
drwxr-xr-x. 69 oracle oinstall  4096 Apr 30 10:44 .
drwxr-xr-x.  3 oracle oinstall    22 Apr 30 10:39 ..
drwxr-xr-x.  2 oracle oinstall   102 Apr 30 10:39 addnode
drwxr-xr-x.  6 oracle oinstall  4096 Apr 30 10:39 apex
:
drwxr-xr-x.  6 oracle oinstall    53 Apr 30 10:43 sqlplus
drwxr-xr-x.  6 oracle oinstall    54 Apr 30 10:43 srvm
drwxr-xr-x.  5 oracle oinstall    45 Apr 30 10:43 suptools
drwxr-xr-x.  3 oracle oinstall    35 Apr 30 10:43 ucp
drwxr-xr-x.  4 oracle oinstall    31 Apr 30 10:43 usm
drwxr-xr-x.  2 oracle oinstall    33 Apr 30 10:43 utl
drwxr-xr-x.  3 oracle oinstall    19 Apr 30 10:43 wwg
drwxr-x---.  7 oracle oinstall    69 Apr 30 10:43 xdk

環境変数をセットして sqlplus を起動してみます。

export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 30 10:45:54 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

SQL>

sqlplus を起動できました彡(^)(^)

6. まとめ

かつては GUICUI の Response File でガチャガチャやっていたインストールも楽々や!彡(^)(^)

本当は Data Guard で Application Continuity の記事を書こうと
思ったんやけど、環境が壊れてしまったので、そちらはまた次回彡(゚)(゚)

おまけ?. 直の yum install しても No Package で見つからない。

uln_register して yum -y install oracle-database-ee-19c しても、
No Package でインストールできないんですよねー。(゚ε゚ )

https://linux.oracle.comhttp://yum.oracle.com/ にもそれっぽいパッケージは無いし。謎。

OCI DBCS VM で Data Guard を有効化して、ロールベース・サービスを構成して PRIMARYロール に透過的に接続してみる。(Oracle Cloud Infrastructure)

Oracle Cloud Infrastructure(以下、OCI) の DBCS(VM) で Data Guard を有効化して、
ロールベース・サービスを構成して PRIMARYロール の DB に透過的に接続してみるやで。
彡(^)(^)

1. Data Guard の有効化 in OCI DBCS VM

OCI DBCS VM の Data Guard有効化 は マニュアル や下記記事の通りです。
基本Webコンソールでポチポチするだけ彡(゚)(゚)

仮想マシンDBシステムでOracle Data Guardを有効にするには
https://docs.oracle.com/ja-jp/iaas/Content/Database/Tasks/usingdataguard.htm

6. 「Data Guardアソシエーション」セクションで、「Data Guardの有効化」をクリックします。

OCI DatabaseでのData Guardの作り方(VM
https://qiita.com/fujid/items/e2a7186f1b5e74be9d78

EnableDataGuard.jpg

しばらく待つと Data Guard が構成されるので、dgmgrlコマンドで様子を確認してみます。

[oracle@ayudbcs1 ~]$ dgmgrl
:
DGMGRL> CONNECT SYS/########@ayudbcs2.ayuprvsubnet2.ayuvcn1.oraclevcn.com:1521/ayucdb1_nrt18j.ayuprvsubnet2.ayuvcn1.oraclevcn.com
DGMGRL> SHOW CONFIGURATION;

Configuration - ayucdb1_nrt1fg_ayucdb1_nrt18j

  Protection Mode: MaxPerformance
  Members:
  ayucdb1_nrt1fg - Primary database
    ayucdb1_nrt18j - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 14 second ago)

DGMGRL>

無事 Data Guard が有効化されてますやね彡(^)(^)
この環境では DB #1 が ayucdb1_nrt1fg、DB #2 が ayucdb1_nrt18j になります。

2. ロールベース・サービスの登録

srvctlコマンドでロールベース・サービスを (GI = Grid Infrastructure の) Clusterware に
登録します。DB #1(Primary), DB #2(Standby) のそれぞれで実行して、サービスを登録します。

Oracle Real Application Clusters 管理およびデプロイメント・ガイド 19c
A.9.103 srvctl add service
https://docs.oracle.com/cd/F19136_01/racad/server-control-utility-reference.html#GUID-EC1BA6D7-D538-4E11-9B31-C59389FDF93B

-role {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}
Oracle Data Guard構成でのデータベースのロールを指定します。デフォルトはPRIMARYです。

コマンドは以下の通り、-roleパラメータがポイントで DB が PRIMARY の時だけ起動するサービス彡(゚)(゚)

# DB #1(Primary, ayucdb1_nrt1fg) 
srvctl add service -db ayucdb1_nrt1fg -service ayudbcs_primary2 -pdb ayupdb1 -role PRIMARY
# DB #2(Standby, ayucdb1_nrt18j) 
srvctl add service -db ayucdb1_nrt18j -service ayudbcs_primary2 -pdb ayupdb1 -role PRIMARY

DB #1(Primary, ayucdb1_nrt1fg) で登録したサービスを開始します。

# DB #1(Primary, ayucdb1_nrt1fg) 
srvctl start service -db ayucdb1_nrt1fg -service ayudbcs_primary2

DB #1 のリスナーに起動したサービスが登録されているのを確認します。

# DB #1(Primary, ayucdb1_nrt1fg) 
lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 31-MAR-2021 04:50:37
:
Service "ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com" has 1 instance(s).
  Instance "ayucdb1", status READY, has 2 handler(s) for this service...
:

ロールベース・サービスの注意事項として、ロールベース・サービスは Data Guard Broker と
GI(Grid Infrastructure, or Restart) が連携して制御されます。従って GI(or Restart) と Broker との併用が必須です。

Oracle Data Guard Broker 19c
5.6.1.2 データベース・サービスの構成要件
https://docs.oracle.com/cd/F19136_01/dgbkr/using-data-guard-broker-to-manage-switchovers-failovers.html#GUID-05918DD1-FB0F-435B-873B-A43BEC1C7638

3. ロールベース・サービスへの接続文字列構成(※接続時フェイルオーバーを有効化した書き方)

クライアントの tnsnames.ora を編集して、ロールベース・サービスへの接続文字列を構成します。

接続時フェイルオーバーで DB #1(Primary)側への接続を失敗した時に、
DB #2(旧Standby、接続時には新Primary) に接続をフェイルオーバーするように記述するのがポイント
彡(゚)(゚)

Oracle Database Net Servicesリファレンス 19c
6.8.2 FAILOVER
https://docs.oracle.com/cd/F19136_01/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-4A20F0A2-EDCD-4006-9177-2EA4B12D656D

AYUDBCS_PRIMARY2=(
  DESCRIPTION_LIST=
    (LOAD_BALANCE=OFF)(FAILOVER=ON)
    (
      DESCRIPTION=
        (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=5)(RETRY_DELAY=3)(RETRY_COUNT=3)(ENABLE=BROKEN)
        (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(HOST=ayudbcs1-scan.ayuprvsubnet2.ayuvcn1.oraclevcn.com)(PORT=1521))
        )
        (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com))
    )
    (
      DESCRIPTION=
        (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=5)(RETRY_DELAY=3)(RETRY_COUNT=3)(ENABLE=BROKEN)
        (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(HOST=ayudbcs2-scan.ayuprvsubnet2.ayuvcn1.oraclevcn.com)(PORT=1521))
        )
        (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com))
    )
)

上記の書き方だと、まず 1番目のDESCRIPTION(DB #1へのエントリ) に接続を試みて、
失敗すると 2番目のDESCRIPTION(DB #2へのエントリ)に接続を試みます。

4. ロールベース・サービスへの接続確認(DB #1 が PRIMARY)

まずはロールの確認、DB #1(ayucdb1_nrt1fg) が PRIMARYロール なのを確認します。

dgmgrl
CONNECT SYS/########@ayudbcs2.ayuprvsubnet2.ayuvcn1.oraclevcn.com:1521/ayucdb1_nrt18j.ayuprvsubnet2.ayuvcn1.oraclevcn.com
SHOW CONFIGURATION;

Configuration - ayucdb1_nrt1fg_ayucdb1_nrt18j

  Protection Mode: MaxPerformance
  Members:
  ayucdb1_nrt1fg - Primary database
    ayucdb1_nrt18j - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 14 second ago)

DB #1 が Primary の状態で #3. の接続文字列でロールベース・サービスに接続します。

sqlplus /nolog
CONNECT AYSHIBAT/########@AYUDBCS_PRIMARY2
SET LINESIZE 300;
SET PAGESIZE 100;
COLUMN HOST_NAME FORMAT A50;
COLUMN MY_SERVICE FORMAT A80;
SELECT NAME, DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE;
SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') AS MY_SERVICE FROM DUAL;
SHOW CON_NAME;

結果は以下の通り、DB #1(ayucdb1_nrt1fg) に接続できてますやね彡(^)(^)

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 31 05:23:58 2021
:
SQL> CONNECT AYSHIBAT/########@AYUDBCS_PRIMARY2
Connected.
SQL> SET LINESIZE 300;
SQL> SET PAGESIZE 100;
SQL> COLUMN HOST_NAME FORMAT A50;
SQL> COLUMN MY_SERVICE FORMAT A80;
SQL> SELECT NAME, DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE
--------- ------------------------------ ---------------- --------------------
AYUCDB1   ayucdb1_nrt1fg                 PRIMARY          READ WRITE

SQL> SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE;

INSTANCE_NAME    HOST_NAME
---------------- --------------------------------------------------
ayucdb1          ayudbcs1

SQL> SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') AS MY_SERVICE FROM DUAL;

MY_SERVICE
--------------------------------------------------------------------------------
ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com

SQL> SHOW CON_NAME;

CON_NAME
------------------------------
AYUPDB1
SQL>

5. スイッチオーバー(ロール変換)の実行 ※追記あり

※追記:OCI DBCS におけるスイッチオーバー、フェイルオーバーはWebコンソール または OCI CLI
使うべきである、という指摘がありました。詳しくは # 8. を参照……。

dgmgrl の SWITCHOVERコマンド で DB #1(ayucdb1_nrt1fg) と DB #2(ayucdb1_nrt18j) のロールを入れ替えます。
Data Guard の手動スイッチは超面倒なんですが、dgmgrl のスイッチオーバーはコマンド一発で超らくちん彡(^)(^)

dgmgrl
CONNECT SYS/########@ayudbcs2.ayuprvsubnet2.ayuvcn1.oraclevcn.com:1521/ayucdb1_nrt18j.ayuprvsubnet2.ayuvcn1.oraclevcn.com
SWITCHOVER to ayucdb1_nrt18j;
SHOW CONFIGURATION;

結果は以下の通り、きっちりロール(Primary, Standby)が入れ替わってますやね彡(^)(^)

[oracle@ayudbcs1 ~]$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Mar 31 05:17:32 2021
:
DGMGRL> CONNECT SYS/########@ayudbcs2.ayuprvsubnet2.ayuvcn1.oraclevcn.com:1521/ayucdb1_nrt18j.ayuprvsubnet2.ayuvcn1.oraclevcn.com
Connected to "ayucdb1_nrt18j"
Connected as SYSDBA.
DGMGRL> SWITCHOVER to ayucdb1_nrt18j;
Performing switchover NOW, please wait...
New primary database "ayucdb1_nrt18j" is opening...
Oracle Clusterware is restarting database "ayucdb1_nrt1fg" ...
Connected to "ayucdb1_nrt1fg"
Connected to "ayucdb1_nrt1fg"
Switchover succeeded, new primary is "ayucdb1_nrt18j"
DGMGRL> SHOW CONFIGURATION;

Configuration - ayucdb1_nrt1fg_ayucdb1_nrt18j

  Protection Mode: MaxPerformance
  Members:
  ayucdb1_nrt18j - Primary database
    ayucdb1_nrt1fg - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 15 seconds ago)

6. ロールベース・サービスへの接続確認(DB #2 が PRIMARY)

DB #2 のリスナーに起動したサービスが登録されているのを確認します。

# DB #2(Primary, ayucdb1_nrt18j) 
lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 31-MAR-2021 04:50:37
:
Service "ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com" has 1 instance(s).
  Instance "ayucdb1", status READY, has 2 handler(s) for this service...
:

DB #2 が Primary の状態で #3. の接続文字列でロールベース・サービスに接続します。

sqlplus /nolog
CONNECT AYSHIBAT/########@AYUDBCS_PRIMARY2
SET LINESIZE 300;
SET PAGESIZE 100;
COLUMN HOST_NAME FORMAT A50;
COLUMN MY_SERVICE FORMAT A80;
SELECT NAME, DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE;
SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') AS MY_SERVICE FROM DUAL;
SHOW CON_NAME;

結果は以下の通り、DB #2(ayucdb1_nrt18j) に接続できてますやね彡(^)(^)

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 31 05:23:58 2021
:
SQL> CONNECT AYSHIBAT/########@AYUDBCS_PRIMARY2
Connected.
SQL> SET LINESIZE 300;
SQL> SET PAGESIZE 100;
SQL> COLUMN HOST_NAME FORMAT A50;
SQL> COLUMN MY_SERVICE FORMAT A80;
SQL> SELECT NAME, DB_UNIQUE_NAME, DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE
--------- ------------------------------ ---------------- --------------------
AYUCDB1   ayucdb1_nrt18j                 PRIMARY          READ WRITE

SQL> SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE;

INSTANCE_NAME    HOST_NAME
---------------- --------------------------------------------------
ayucdb1          ayudbcs2

SQL> SELECT SYS_CONTEXT('USERENV', 'SERVICE_NAME') AS MY_SERVICE FROM DUAL;

MY_SERVICE
--------------------------------------------------------------------------------
ayudbcs_primary2.ayuprvsubnet2.ayuvcn1.oraclevcn.com

SQL> SHOW CON_NAME;

CON_NAME
------------------------------
AYUPDB1
SQL>

7. まとめ

ロールベース・サービス と 接続時フェイルオーバー の組み合わせで、クライアントの
接続文字列を変更せずに Data Guard の PRIMARYサイト に透過的に接続できる!
彡(^)(^)

これで仕込みは完了、本当にやりたかった事(AC)は次回以降に……彡(゚)(゚)

8. 追記:Webコンソール と OCI CLI による OCI DBCS の Data Guard ロール変換(スイッチオーバー/フェイルオーバー)

OCI DBCS においては Data Guard のスイッチオーバー や フェイルオーバー は Webコンソール や OCI CLI
やるべきである、という指摘がありました。そうしないと画面の状態と実際の DB の状態が異なってしまうそうな。
なるぺそ彡(゚)(゚)


Oracle Data Guardの使用
https://docs.oracle.com/ja-jp/iaas/Content/Database/Tasks/usingdataguard.htm

データベースのスイッチオーバーを実行するには

5. スイッチオーバーを実行するData Guardアソシエーションについて、
「アクション」アイコン(3つのドット)をクリックし、「スイッチオーバー」をクリックします。

データベースのフェイルオーバーを実行するには

5. フェイルオーバーを実行するData Guardアソシエーションについて、「フェイルオーバー」をクリックします。


Docs >> db >> data-guard-association >> switchover
https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.22.1/oci_cli_docs/cmdref/db/data-guard-association/switchover.html
Usage
oci db data-guard-association switchover [OPTIONS]


Docs >> db >> data-guard-association >> failover
https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.22.1/oci_cli_docs/cmdref/db/data-guard-association/failover.html
Usage
oci db data-guard-association failover [OPTIONS]


皆さま、お気を付けくださいませ。(`・ω・)ゞ

OCI 2020 Architect Associate (1Z0-1072-20) に合格したので、受験方法や学習コンテンツをまとめてみる。(Oracle Cloud Infrastructure)

Oracle Cloud Infrastructure 2020 Architect Associate (1Z0-1072-20) に合格したやで!
合格の勢いを駆って、受験方法や学習コンテンツをまとめてみましたやで。
彡(^)(^)

1. 公式ページ

まずは公式ページから。該当資格の公式ページは下記のとおり。

Oracle Cloud Infrastructure 2020 Architect Associate
Exam Number: 1Z0-1072-20
https://education.oracle.com/ja/oracle-cloud-infrastructure-2020-architect-associate/pexam_1Z0-1072-20

2. Learning Subscription の申込(※無料)

OCI 2020 Architect Associate の Learning Subscription(※無料) を下記リンクから申し込みできます。

Become OCI Architect (Associate)
https://learn.oracle.com/ols/learning-path/become-oci-architect-associate/35644/75658
OCI_Associate001.jpg

各種動画や模試等をクリアして 100% になると、「Oracle Cloud Infrastructure 2020 Architect Associate (1Z0-1072-20)」のリンクからピアソンVUEのページに飛ばされて、試験の申込ができます。 OCI_Associate002.jpg

3. 試験の申込(1Z0-1072-20 or 1Z0-1072-20-JPN) と 再受験無料キャンペーン

前述のリンクからピアソンVUEのサイトに飛ばされて、試験の申込ができます。
前述のリンクは英語版の試験(1Z0-1072-20)ですが、日本語版(1Z0-1072-20-JPN)も検索すれば有ります。
OCI_Associate003.jpg

再受験無料キャンペーンもありますので、プロモーションコードを確実にゲットしておきましょう。

ラクル認定資格試験 再受験無料キャンペーン 2021
https://www.pearsonvue.co.jp/Clients/Oracle/Special-Offers/Retake2021.aspx

オンライン試験と会場試験が有るのですが、オンライン試験はクリアデスクの確認が有るらしく、
ワイはそれを突破する自信が無かったので会場試験、教材が英語中心だったので英語試験を選択彡(゚)(゚)

会場受験の場合は受験当日に身分証明書(本人確認書類)が2種類必要なので、そこは抜かりなく。

本人確認書類について
https://www.pearsonvue.co.jp/Test-takers/Tutorial/Identification-2.aspx

以下のいずれかの組み合わせで計 2 点をご提示ください。

4. 教材・学習コンテンツ

まずは既出の下記リンク動画(Oracle Cloud Infrastructure Architect Associate Workshop)が
標準的な教材となります。10時間以上もある、膨大な時間の動画群……:(;゙゚'ω゚'): 英語ですが日本語字幕対応。

Become OCI Architect (Associate)
https://learn.oracle.com/ols/learning-path/become-oci-architect-associate/35644/75658

日本語の動画もあります。こちらは試験のポイントを解説したセミナーのもの。

Oracle Cloud Infrastructure 2019 Certified Architect Associate 資格試験ポイント解説セミナー(1)
https://www.youtube.com/watch?v=Fo0hK9fYflo

Oracle Cloud Infrastructure 2019 Certified Architect Associate 資格試験ポイント解説セミナー (2)
https://www.youtube.com/watch?v=LXPxiDjbeBA

Oracle Cloud Infrastructure 2019 Certified Architect Associate 資格試験ポイント解説セミナー(3)
https://www.youtube.com/watch?v=Uw0FPAmM7wQ

Oracle Cloud Infrastructure 2019 Certified Architect Associate 資格試験ポイント解説セミナー(4)
https://www.youtube.com/watch?v=Nol78y58khQ

Udemy には 65問*3セット の模擬試験(英語)が有るので、これを購入するのもエエんかと。

Udemy - Oracle Cloud Infrastructure 2020 Architect Associate
https://www.udemy.com/course/oracle-cloud-infrastructure-2020-architect-associate

実環境も触っておくと良いと思います。Always Free などをご活用下さい。
オススメは Phoenix か Ashburn を Home Region に指定した Always Free垢 を獲得して、
PAYG にアップグレードして 無料 or 安価なリソースを利用すること。
無料リソースでも PAYG垢 でないと作れないリソース(※)もあるので(゚ε゚ )
※NAT Gateway や Service Gateway がその代表的なリソース

Always Free Cloud Servicesを試し、30日間トライアルを入手する
https://www.oracle.com/jp/cloud/free/

Oracle Cloud Always Free の登録でハマりがちな3つのポイントとその対処法
https://qiita.com/Skogkatter112/items/1097c2d51be14fb66652

最近待望の書籍も出版されました!こちらのご購読も推奨や!彡(^)(^)

Oracle Cloud Infrastructure エンタープライズ構築実践ガイド
https://www.amazon.co.jp/dp/B08R9GXZ2Y

ガチ英語ですが試験問題の回答と解説をしてくれている動画も。

T3P - [Latest] Oracle Cloud Infrastructure 2020 Architect Associate (1Z0-1072-20) Questions with Answer
https://www.youtube.com/watch?v=v2-PgRet2As
T3P - Oracle Cloud Infrastructure 2020 Architect Associate (1Z0-1072-20) Rectified Questions with Answer
https://www.youtube.com/watch?v=WHXdYKBEv2s

5. 学習の実態

ワイは下記のような感じで学習してました。OCI は業務である程度触っているので、
出題傾向の確認と試験の世界に入り込むための模試と動画視聴が中心彡(゚)(゚)

Practice Exam For: OCI 2020 Architect Associate(30分くらい)

Practice Exam For: OCI 2020 Architect Associate(回答の確認、10分くらい)

OCI Architect Associate Workshop の動画をメモしながら視聴(かなり端折って6時間くらい)

Practice Exam For: OCI 2020 Architect Associate(3回目, 10分くらい)

Udemy の模試(Test1)実施(1周目、65問で60分強)

Udemy の模試(Test1)結果/回答確認(やはり60分くらい)

Udemy の模試(Test1)実施(2周目、20分程度)

上記Udemy模試2周回を Test2, Test3 でも実施(Test2 と Test3 をそれぞれ2周するのに2時間半*2程度)

Practice Exam For: OCI 2020 Architect Associate(4回目, 10分くらい, この時点でかなり試験の世界観に染まってる。)

会場近くには早めに到着、近くのカフェで Udemy Test1,2,3 の1周目不正解問題を中心に復習

6. 試験の結果

試験は 85分で60問。1時間ほどで60問を解きつつ、残り25分で Mark した問題を見直して Submit した結果は……! OCI_Associate004.jpg ……OCI Foundations Associate の3倍くらい真面目に対策したんですが、割とギリギリの合格。
AD(Availability Domain) や LB や DR(Cross-Region)等の可用性廻りを問う問題が多かったでしょうか。

とまれ合格は合格や!みなさんもこれらの試験も活用しつつ、OCI を使ってくださいね彡(^)(^)

参考:

OCI Foundations 2020 Associate(1Z0-1085-20) に合格したので
受講手順と勉強方法をメモしておく。(Oracle Cloud Infrastructure)
https://qiita.com/ora_gonsuke777/items/966c4cda580199f63674

Oracle Cloud Infrastructure 2018 Architect Associate 合格体験記
https://qiita.com/y-araki-qiita/items/ec575467d13bfc67a11c