機械翻訳について

カスタム・アクションの使用

Oracle Cloud at CustomerではなくこのトピックはOracle Cloud at Customerには適用されません。

Oracle Cloud Stackテンプレート・ファイルを編集し、ソフトウェア・コンポーネントを使用して、スタック・リソースのプロビジョニング後にカスタム・オペレーティング・システム(OS)コマンドまたはスクリプトを実行します。

たとえば、カスタム・アクションを使用すると、次のことができます:

  • OSパッケージをインストール

  • デフォルトのOS構成を変更

  • データベース・スキーマの作成

  • アプリケーションのデプロイ

  • クラウド・ストレージからファイルをダウンロード

カスタム・アクションは、管理ノード(仮想マシン)へのSecure Shell (SSH)インタフェースを提供するクラウド・リソースに対してのみサポートされます。 指定されたOSコマンドは、リソースの作成後に管理ノードで実行されます。 リソースが複数の管理ノードで構成されている場合、コマンドは最初のノードからのみ実行されます。

注意:

カスタム・アクションは、Oracle管理クラウド・サービスまたは自律クラウド・サービスではサポートされていません。

チュートリアル・アイコン「チュートリアル」は、カスタム・アクションの作成にも役立ちます。

基本的な構文

タイプSoftwareComponentのリソースをテンプレートに追加します。 このリソースのparametersノード内に、configsという名前のシーケンスを追加します。

resources:
  ...
  resource_name:
    type: SoftwareComponent
    parameters:
      configs:
        - configuration
        - configuration

configsシーケンス内の各オブジェクトはカスタム・アクションを記述します。 ターゲット・クラウド・リソースで実行するBash OSコマンドを1つ以上指定します。

parameters:
  configs:
    - actions: [CREATE]
      name: configuration_name
      config:
        Fn::Base64:
          bash_commands
      runAsUser: OS_user
      timeout: minutes
      continueOnFailure: true_or_false

カスタム・アクションの使用可能な属性は次のとおりです:

  • actions - サポートされている値は[CREATE]のみです。 すべてのカスタム・アクションは、ターゲット・クラウド・リソースが作成された後に実行されます。

  • name - このカスタム・アクションのオプションの名前。

  • config - Base64エンコードされた文字列としての1つ以上のBashコマンド。 新しい行(\n)文字で複数のコマンドを区切ります。

  • runAsUser - コマンドを実行するOSユーザー名。 デフォルトのユーザーはopcです。

  • timeout - カスタム・アクションが完了すると予想される分数。 この時間内にアクションが完了しない場合、スタックの作成は失敗します。 デフォルト値は、5分です。

  • continueOnFailure - falseの場合、このカスタム・アクションが失敗した場合、スタックの作成は失敗します。 trueの場合、アクティビティ・ログに警告が追加されますが、スタックの作成は続行されます。

Join関数を複数のコマンドでアクションを定義する便利なメソッドとして使用することもできます:

name: configuration_name
config:
  Fn::Base64:
    Fn::Join:
      - "\n"
      -
        - bash_command
        - bash_command

以下は、カスタム・アクションを定義するソフトウェア・コンポーネント・リソースの例です:

resources: 
  updateDatabaseOS:
    type: SoftwareComponent
    parameters:
      configs:
        - actions: [CREATE]
          name: updateHosts
          config:
            Fn::Base64:
              Fn::Join:
                - "\n"
                -
                  - touch ~/stack.out
                  - echo 'Updating hosts' >> ~/stack.out
                  - echo 'myhost 192.168.1.10' >> /etc/hosts
          continueOnFailure: true

ヒント:

Join関数を使用する場合、同じシーケンスのすべてのメンバーが同じ字下げを持つことを確認してください。 次の例は無効です:
Fn::Join:
  - "\n"
  -
  - This is 
  - not valid

リソースへのカスタム・アクションの割り当て

テンプレートにソフトウェア・コンポーネントを定義したら、同じテンプレート内の他のクラウド・リソースの定義内でそれらを参照します。 リソース内にconfigsシーケンスを追加し、parametersノードの後に配置します。 configsシーケンスには、このリソースが正常に作成された後にOracle Cloud Stackが実行するソフトウェア・コンポーネント・リソースの名前が一覧表示されます。

GetResource関数を使用して、各ソフトウェア・コンポーネントを検索し、それぞれに論理構成名を与えます。

resources:
  ...
  resource_name:
    type: resource_type
    parameters:
      ...
    configs:
      - name: configuration_name
        config: { "Fn::GetResource": software_component_name }
      - name: configuration_name
        config: { "Fn::GetResource": software_component_name }

例:

HRDatabase:
  type: dbaas
  parameters:
    ...
  configs:
    - name: HRDatabaseUpdateOS
      config: { "Fn::GetResource": updateDatabaseOS }

入力と環境変数

GetParamなどのテンプレート関数の使用は、カスタム・アクションのOSコマンド内ではサポートされていません。 ただし、OSコマンドの環境変数を使用して、テンプレート内のアクションをパラメータ化できます。 ソフトウェア・コンポーネント・リソースのparametersノード内にinputsという名前のシーケンスを追加し、このカスタム・アクションで使用される環境変数を宣言します。

resources:
  ...
  resource_name:
    type: SoftwareComponent
    parameters:
      configs:
        ...
      inputs:
        - name: env_variable
        - name: env_variable 

ソフトウェア・コンポーネントのOSコマンドのこれらの環境変数を参照してください。 例:

resources: 
  updateDatabaseOS:
    type: SoftwareComponent
    parameters:
      configs:
        - actions: [CREATE]
          name: updateHosts
          config:
            Fn::Base64:
              Fn::Join:
                - "\n"
                -
                  - echo 'Updating database OS...'
                  - echo "myhost ${storage_address}" >> /etc/hosts
      inputs:
        - name: storage_address

configsシーケンスを使用して別のクラウド・リソースにソフトウェア・コンポーネントを割り当てる場合は、paramsという名前のオブジェクトをシーケンスに追加することによって、すべての入力パラメータの値を指定する必要があります。

resources:
  ...
  HRDatabase:
    type: dbaas
    parameters:
      ...
    configs:
      - name: configuration_name
        config: { "Fn::GetResource": software_component_name }
        params:
          input_name: value
          input_name: value
      - name: configuration_name
        config: { "Fn::GetResource": software_component_name }
        params:
          input_name: value
          input_name: value

テンプレート関数は、GetParamGetAttなどの入力値を指定するときに使用できます。 例:

configs:
  - name: HRDatabaseUpdateOS
    config: { "Fn::GetResource": updateDatabaseOS }
    params:
      log_file: stack.out
      storage_address: { "Fn::GetParam": storageIPAddress }

ファイルをダウンロードしています

カスタム・アクションでは、wgetcurl、または同様のOSコマンドを使用して、ターゲット・クラウド・リソース内の管理ノードにスクリプトやその他のファイルをダウンロードできます。 たとえば、Oracle Cloud Infrastructure Object Storageコンテナにあるアーカイブ・ファイルをダウンロードして抽出し、アーカイブ内の1つ以上のスクリプトを実行することができます。

アクティビティ・ログ

クラウド・スタックのアクティビティ・ログを表示することで、カスタム・アクションの実行を確認できます。 ログ・メッセージは、ターゲット・リソースの名前、実行されたアクションの名前、および実行されたノードを指定します。

[stack_name] : Attempting to execute SoftwareComponent script - [identity_domain/resource_name] : [action_name] on host [node_ip_address]
...
[stack_name] : Execution completed successfully. SoftwareComponent - [identity_domain/resource_name] : [action_name] on host [node_ip_address]

例:

[MyStack] : Execution completed successfully. SoftwareComponent - [MyIdentityDomain/HRDatabase] : [updateHosts] on host [192.168.10.10]

「クラウド・スタックの詳細の表示」を参照してください。

ベスト・プラクティス

  • 予期せず失敗することなく、何度も実行できるようにカスタム・アクションをプログラムします(冪等)。 カスタム・アクションは、次のシナリオで複数回実行される可能性があります:

    • Oracle Cloud Stackは、ターゲット・リソースとの通信に失敗した後にカスタム・アクションの実行を再試行します。

    • RETAINオプションを使用してクラウド・スタックを作成し、リソース・プロビジョニングの失敗後にスタックを再開すると、Oracle Cloud Stackも(失敗した)リソースに関連付けられたカスタム・アクションを実行します。

  • カスタム・アクションでは、成功を示すために0を返し、失敗を示すには1を返します。

  • 既定では、カスタム・アクションによって生成されたログ・ファイルの削除を含む、スタックの作成中に障害が発生すると、既存のすべてのリソースが終了します。 トラブルシューティングを容易にするため、ログ・メッセージをクラウド・ストレージなどの外部のロケーションに記録します。