ノート:

OCIイベント・サービス・ルールを使用したOCI関数を使用したプライベート・ゾーンのクロス・リージョンDNSレコードの更新

イントロダクション

このチュートリアルでは、新しいコンピュート・インスタンスの作成時に両方のリージョンのプライベート・ゾーンでコンピュート・インスタンスのドメイン・ネーム・システム(DNS)レコードを自動的に更新する方法、またはOracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR)プランのスイッチオーバー・シナリオ中に移動する方法について学習します。このチュートリアルでは、2つの特定のOCIサービスについて説明します。

このユース・ケースは、当初、OCI Full Stack DRのスイッチオーバー計画中に使用することを想定していました。この計画では、インスタンスはリージョン間で移動されます。基本的に、ディザスタ・リカバリ(DR)スイッチオーバー・プロセスでは、新しいリージョンに新しいインスタンスを作成し、前のリージョンでインスタンスを終了します。このシナリオに基づいて、このチュートリアルでは、両方のリージョンのプライベート・ゾーンのDNSレコードを更新するためにOCI関数をトリガーする起動- インスタンス終了イベント・タイプに焦点を当てます。

このソリューションは、デフォルトのOCI DNSプライベート・ゾーンの自動化としても機能します。選択したコンパートメントで作成された新規インスタンスごと、またはターゲット・インスタンスを識別するために指定したその他のフィルタごとに、DNSレコードが作成されます。詳細は、イベントを生成するサービスを参照してください。

高レベルのアーキテクチャ

T3_1

ノート:

目的

前提条件

タスク1: 動的グループの設定

ドメインに移動し、「動的グループ」をクリックして、次のグループを作成します。

動的グループ名: MyFunctions

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

タスク2: ポリシーの作成

「ポリシー」に移動し、次のポリシーを作成します。

ポリシー名: FunctionsPolicies

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage dns-records in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use dns-zones in compartment YOUR-COMPARTMENT-NAME

タスク3: OCIコンテナ・レジストリの作成

  1. 「開発者サービス」に移動し、「コンテナ・レジストリ」をクリックして、Fnイメージのプライベート・リポジトリを作成します。

    リポジトリ名: lab/fnpy-event-dns-update

    T3_1

  2. リポジトリを確認し、ネームスペースを書き留めます。

    T3_1

  3. OCI CLIおよびDockerがインストールされているターミナル・シェルを開き、レジストリにログインします。リージョンの正しいURLを確認してください。このチュートリアルでは、レジストリURLがgru.ocir.ioであるブラジル東部(サンパウロ)リージョンを使用しています。

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

タスク4: プライベート・ゾーンでDNSを更新するためのPython OCI関数の作成

  1. OCIコンソールに移動し、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」および「アプリケーションの作成」をクリックします。

    T9_1

  2. 影響を受けるOCI DNSプライベート・ゾーンの構成を作成します。

    ノート:この構成変数は、更新するプライベート・ゾーンOCIDsを指定します。複数のOCIDsをカンマで区切ってリストできます。

    シークレット名 Value
    TARGET_ZONES_OCID PRIVATE ZONES OCIDsのリストをカンマ区切りとして設定します

    このチュートリアルでは、2つのプライベート・ゾーン(GRUリージョン用とVCPリージョン用)を設定します。

    サンプル:

    ocid1.dns-zone.oc1.sa-saopaulo-1.xxxx
    
    ocid1.dns-zone.oc1.sa-vinhedo-1.xxx
    

    T4_2

  3. Docker、OCI CLI、Fn Project CLIがインストールされているターミナル・シェルに移動し、次のコマンドを実行してファンクションを初期化します。

    ノート:タスクに従った場合、Dockerログイン・コマンドはすでに実行されており、実行されていない場合は、タスク3.3でDockerログに進みます。

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fnpy-event-dns-update
    cd fnpy-event-dns-update
    ls -lrt
    

    ノート:このチュートリアルでは、ブラジル東部(サンパウロ)リージョンを使用しています。別のリージョンを使用している場合は、api-urlおよびregistryの場所を変更する必要があります。

    T4_3

    initコマンドは、func.pyにhello world関数を作成します。このコードは上書きします。

  4. fnpy-event-dns-update.zipからPython関数のサンプル・コードを取得し、解凍してinitコマンド中にファイルを上書きします。

    1. zipファイルをfn initコマンドを実行した演習ディレクトリにコピーし、ディレクトリ内のファイルを確認します。

      ls -lrt
      
    2. ファイルを解凍し、既存のファイルを上書きします。

      unzip fnpy-event-dns-update.zip
      

    T9_1

  5. 新しいコードを作成し、ファンクションをデプロイします。

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

タスク5: OCIイベント・サービス・ルールの作成

  1. OCIコンソールに移動し、「監視および管理」をクリックします。「イベント・サービス」で、「ルール」を選択し、「ルールの作成」をクリックします。

  2. 次の情報を入力します

    • 名前: MyAutoDNSRuleと入力します。
    • ルールの条件:
      • 条件1:
        • 条件: Event Typeを選択します。
        • 「サービス名」: Computeを選択します。
        • イベント・タイプ: Instance - Launch Endを選択します。
      • 条件2:
        • 条件: Attributeを選択します。
        • 属性名: compartmentIdを選択します。
        • 属性値:コンパートメントOCIDを入力します。
    • アクション:
      • アクション・タイプ: Functionsを選択します。
      • ファンクション・コンパートメント:コンパートメントを選択します。
      • ファンクション・アプリケーション: MyAppを選択します。
      • ファンクション: fnpy-event-dns-updateを選択します。

    T5_1

    ノート:この例では、インスタンスをcompartmentIDでフィルタ処理しています。つまり、そのコンパートメントで新しく起動されたインスタンスによって、選択したファンクションがトリガーされます。必要に応じて、様々なフィルタおよび条件を指定できます。

タスク6: ソリューションの検証

このチュートリアルでは、GRUリージョンとVCPリージョンの両方にDNSプライベート・ゾーンを確立し、各DNSプライベート・ゾーンのOCIDsを文書化しました。これらのOCIDsは、OCIファンクションの構成に使用されます。

  1. OCI Functionsが使用可能であることを確認し、ロギングを有効にします。

    1. OCIコンソールに移動し、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」をクリックし、作成したアプリケーションMyAppを選択します。

      T6_1

    2. 「ログ」をクリックし、「ログの有効化」を選択します。

      T6_1

  2. 現在のDNSプライベート・ゾーンを確認します。次のイメージに示すように、両方のリージョンにUBUNTUAPPS.COMというドメインを設定しました。

    T6_1

    T6_1

  3. OCI Full Stack DRスイッチオーバーをシミュレートするための新しいコンピュート・インスタンスを作成します。これにより、Instance Launch - ENDイベントがトリガーされ、OCI関数が起動されて、両方のリージョンのDNSプライベート・ゾーンが更新されます。

    T6_2

    T6_2

  4. インスタンスの作成後、DNSプライベート・ゾーンが両方のリージョンで適切に更新されていることを確認します。

    T6_3

    T6_3

  5. OCIファンクションのログを確認して、実行されたファンクションの詳細を確認します。

    T6_4

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。