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?

OICの自動起動停止

0
Posted at

はじめに

OCIのアプリケーション統合サービス「Oracle Integration Cloud(OIC)」ですが、リソーススケジューラで直接自動起動停止を行うことができない為、他の方法でのやり方を整理しました。

OICの自動起動停止パターン

OICの自動起動停止のパターンとしては、以下があります。
① 「OCI Resource Scheduler」 + 「OCI Functions」
② 「OCI CLI」 + 「Compute(cron)」
③ 「OCI DevOps」 + 「Functions」
④ 「ADB(プロシージャ)」

今回は①のパターンを実施してみます。
また、今回は自動停止処理を実現していきます。(自動起動についても基本的には同様に流れになります)

実装の流れ

大枠の流れとしては、以下になります。

  1. OIC起動停止用プログラム(Python)を実行するOCI Functionsを設定
  2. OCI Functionsの周辺設定(NSG・動的グループ・IAMポリシー)
  3. OCI Resource SchedulerでOCI Functions起動を定期実行するようスケジューリング

1. OCI Functions設定

以下を参考にOCI Functions(アプリケーション・ファンクション)を作成します。
OCI Functions ハンズオン
Oracle Function と Schedule で OCI インスタンスの自動垂直スケーリング

OCI Functionsで実行するプログラムは以下を設定します。(例:自動停止)
あくまで一例ですので、環境に応じて適宜設定ください。

func.py
import io
import logging
import oci
from oci.auth.signers import get_resource_principals_signer

from fdk import response

def handler(ctx, data: bytes = None):
    ocid = ctx.Config().get("OIC_INSTANCE_OCID")
    signer = oci.auth.signers.get_resource_principals_signer()
    client = oci.integration.IntegrationInstanceClient({}, signer=signer)
    client.stop_integration_instance(ocid)
    return "OK"
puts 'The best way to log and share programmers knowledge.'
func.yaml
schema_version: 20180708
name: <ファンクション名>
version: 0.0.1
runtime: python
build_image: fnfproject/python:3.11-dev
run_image: fnfproject/python:3.11
entrypoint: /python/bin/fdk /function/func.py handler
memory: 256
config:
  OIC_INSTANCE_OCID: <OICのOCID>

requirements.txt
fdk<=0.1.105
oci

2. OCI Functionsの周辺設定

Functions作成後、適宜NSG・動的グループ・IAMポリシーの設定を行います。

NSG(Network Security Group)

新規・既存のNSGをFunctionsに割り当てます。(エグレスルールの許可が必要)

動的グループ

IAMポリシーを付与する為にFunctions用の動的グループを作成します。
一致ルールの例は以下の通りです。

ALL {resource.type = 'fnfunc',resource.id = '<ファンクションのOCID>'}
ALL {resource.type = 'resourceschedule', resource.id = '<スケジュールのOCID>'}
↑2つ目の設定は「3.OCI Resource Schedulerで定期実行」が完了後に実施

IAMポリシー

FunctionsがOICにアクセスできるようにポリシーを設定します。

Allow dynamic-group '<アイデンティティ・ドメイン名>'/'<動的グループ名>' to use integration-instance in compartment <コンパートメント名>
Allow any-user to manage functions-family in compartment <コンパートメント名> where all {request.principal.type = 'resourceschedule', request.principal.id = '<スケジュールのOCID>'}
↑2つ目の設定は「3.OCI Resource Schedulerで定期実行」が完了後に実施

その他

Loggingの設定等は必要に応じて実施ください。
・参考
OCI Logging ハンズオン

Functionsの実行テストは以下で実施可能です。(CloudShell上で実施)

fn invoke <アプリケーション名> <ファンクション名>
→OKが出力されれば問題なし(OICが停止されていることも確認)

3. OCI Resource Schedulerで定期実行

以下を参考にFunctionsを定期実行するように設定します。
関数のスケジュール

最後に

今回は一部のパターンのみご紹介しましたが、環境制約によっては冒頭の他パターンも検討対象となるかと思いますので、今回投稿した内容含め同様のシーンに遭遇した方の参考となれば幸いです。

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?