カスタム・アクションの使用
このトピックはOracle Cloud at Customerには適用されません。
たとえば、カスタム・アクションを使用すると、次のことができます:
-
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_addressconfigsシーケンスを使用して別のクラウド・リソースにソフトウェア・コンポーネントを割り当てる場合は、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
テンプレート関数は、GetParamやGetAttなどの入力値を指定するときに使用できます。 例:
configs:
- name: HRDatabaseUpdateOS
config: { "Fn::GetResource": updateDatabaseOS }
params:
log_file: stack.out
storage_address: { "Fn::GetParam": storageIPAddress }ファイルをダウンロードしています
カスタム・アクションでは、wget、curl、または同様の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を返します。
-
既定では、カスタム・アクションによって生成されたログ・ファイルの削除を含む、スタックの作成中に障害が発生すると、既存のすべてのリソースが終了します。 トラブルシューティングを容易にするため、ログ・メッセージをクラウド・ストレージなどの外部のロケーションに記録します。