はじめに
OCIのアプリケーション統合サービス「Oracle Integration Cloud(OIC)」ですが、リソーススケジューラで直接自動起動停止を行うことができない為、他の方法でのやり方を整理しました。
OICの自動起動停止パターン
OICの自動起動停止のパターンとしては、以下があります。
① 「OCI Resource Scheduler」 + 「OCI Functions」
② 「OCI CLI」 + 「Compute(cron)」
③ 「OCI DevOps」 + 「Functions」
④ 「ADB(プロシージャ)」
今回は①のパターンを実施してみます。
また、今回は自動停止処理を実現していきます。(自動起動についても基本的には同様に流れになります)
実装の流れ
大枠の流れとしては、以下になります。
- OIC起動停止用プログラム(Python)を実行するOCI Functionsを設定
- OCI Functionsの周辺設定(NSG・動的グループ・IAMポリシー)
- OCI Resource SchedulerでOCI Functions起動を定期実行するようスケジューリング
1. OCI Functions設定
以下を参考にOCI Functions(アプリケーション・ファンクション)を作成します。
OCI Functions ハンズオン
Oracle Function と Schedule で OCI インスタンスの自動垂直スケーリング
OCI Functionsで実行するプログラムは以下を設定します。(例:自動停止)
あくまで一例ですので、環境に応じて適宜設定ください。
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.'
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>
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を定期実行するように設定します。
関数のスケジュール
最後に
今回は一部のパターンのみご紹介しましたが、環境制約によっては冒頭の他パターンも検討対象となるかと思いますので、今回投稿した内容含め同様のシーンに遭遇した方の参考となれば幸いです。