テンプレート・コンポーネントについて
Oracle Cloud Stackのテンプレートは、パラメータ、リソース、属性、条件など、いくつかのコンポーネントで構成されているYAMLドキュメントです。
パラメータとは
テンプレート・パラメータは、テンプレートからクラウド・スタックを作成するときに、このテンプレートのユーザーがOracle Cloud Stackに提供できる入力を定義します。
パラメータがあることでテンプレートはカスタマイズしやすくなり、再利用性も高まります。 たとえば、テンプレートのパラメータに次のような入力を含めることができます。
-
cloudUserName -
databasePassword -
serverComputeShape
テンプレート・パラメータの定義には、名前、データ・タイプ(テキスト、数値、ブール値、SSHキーなど)、およびパラメータが必須かオプションかが含まれます。 パラメータがオプションの場合、ユーザーがパラメータを指定しなかった場合のデフォルト値も定義できます。 テンプレート・パラメータでは、許可される値や最小または最大値など、実行時に検証を課す様々な制約もサポートされます。
これらの入力パラメータの値は、テンプレートの他の部分からGetParam関数を使用して参照できます。
必要に応じて、関連するテンプレート・パラメータをグループ化することができます。 各パラメータ・グループにはラベルが与えられ、Oracle Cloud Stack作成ウィザードの詳細ページで見出しとして使用されます。 下のイメージは、「Oracle Database Cloud Service詳細」という名前のパラメータ・グループを示しています。 このグループは4つのテンプレート・パラメータで構成されています:

図parameter_group_example.pngの説明
パラメータをグループに割り当てていない場合は、作成ウィザードで汎用の「Configuration」見出しの下に表示されます。 「名前」および「説明」を含むすべてのテンプレートに表示される標準パラメータは、常に「スタックの詳細」見出しの下に表示されます。
注意:
パラメータ・グループはCLIまたはREST APIには影響しません。リソースとは
Oracle Cloud Stackによって、テンプレートからクラウド・スタックが作成されたときに1つ以上のOracle Cloudリソースがプロビジョニングされます。
Oracle Cloud Stackでサポートされているリソースのタイプの一覧は、「リソース・タイプのリスト」を参照してください。
テンプレートの各リソースには名前とパラメータがあり、Oracle Cloud Stackがこのタイプのクラウド・リソースを作成するためにRESTエンドポイントに送信する特定の名前と値を提供します。 たとえば、Oracle Java Cloud Serviceのインスタンスを作成するRESTエンドポイントでは次のようなパラメータがサポートされています。
-
serviceName -
cloudStorageContainer -
backupDestination
テンプレート作成者として、これらのリソース・パラメータに値を割り当てます。 値はテンプレートに直接入力するか、関数をとおして動的に決定されるように設定できます。 たとえば、GetParam関数を使用して、ユーザーが指定したテンプレート・パラメータを取得できます。
Oracle Cloudの多くのRESTエンドポイントは、パラメータが階層構造で編成されるJSON形式のリクエスト・ペイロードを要求します。 したがって、Oracle Cloud Stackのリソース・パラメータも、親パラメータと子パラメータを使用して階層として定義されます。 たとえば、Oracle Java Cloud Serviceは次のようなJSON構造をサポートしています:
serviceName: myjcs
components: {
WLS: {
adminUserName: myadmin
managedServerCount: 3
}
}スタックが作成されると、Oracle Cloud Stackはテンプレート内のリソース定義を使用して、これらのJSONペイロードを自動的に構築します。
依存関係とは
テンプレートには1つ以上のリソースが含まれています。 依存性は、テンプレートから新しいクラウド・スタックが作成されたときに、Oracle Cloud Stackがこれらのリソースをプロビジョニングする順序を制御します。
テンプレートの作成者はリソース間の明示的な依存関係を定義できます。 たとえば、ResourceCの作成はResourceAとResourceBの作成に依存するとテンプレートに明示的に記述できます。 つまり、Oracle Cloud Stackでこのテンプレートを実行する場合、そのテンプレートでリソースが定義される順序に関係なく、ResourceCを作成する前にResourceAおよびResourceBを正常に作成する必要があります。
また、Oracle Cloud Stackでは、作成者が明示的に定義しなくても、テンプレート内のリソース間のimplicitの依存性を自動的に識別して優先します。 これが発生するのは、リソースのパラメータが別のリソースのランタイム属性であるとテンプレートに記述されている場合です。 たとえば、ResourceBのdatabaseURLパラメータはResourceAのurl属性を使用して構成するとテンプレートに記述されているとします。 Oracle Cloud Stackでは、ResourceAが正常に作成されるまでこのurl属性を取得できないため、これら2つのリソースに暗黙的な依存関係があります。 ResourceAはResourceBの作成前に作成する必要があります。
パフォーマンスを最適化するため、Oracle Cloud Stackは、依存関係が存在しない場合、複数のリソースを並列に作成します。
属性とは
クラウドにリソースをプロビジョニングする過程でリソース・パラメータの値が生成される場合、それらの値は前もって知ることができません。 したがって、リソースが正常に作成された後は、これらの値を実行時にOracle Cloud Stackによって取得する必要があります。
スタック・テンプレートにアプリケーション・リソースとデータベース・リソースが含まれるシナリオを考えてみましょう。 アプリケーション・リソースには、実行中のデータベース・リソースのURLであるパラメータdbURLが必要です。 データベース・リソースのconnectionString属性には、この情報が含まれています。 したがって、アプリケーション・リソースを構成するときに、そのdbURLをデータベースのconnectionString属性の値に設定することができます。
リソースの作成と同様に、Oracle Cloud StackはRESTエンドポイントを使用してリソース属性を収集します。 たとえば、Oracle Database Cloud Serviceのインスタンスを表示するRESTエンドポイントは次のような属性で応答します。
-
service_name -
num_nodes -
listenerPort
リソースの属性の値を取得するには、テンプレート内でGetAtt関数を使用します。 これらのRESTエンドポイントのレスポンス・ペイロードは、多くの場合、次の例のように属性を階層として構成するJSON形式です:
{
"serviceId":1104,
"serviceName":"MyDatabase",
"cloudStorageContainer":
{
"value":"MyStorageURL",
}
} このJSON階層内の属性を取得するため、テンプレートではドット表記法を使用します。 例えば: cloudStorageContainer.value
実行中のスタックをCLIまたはREST APIから監視する場合、Oracle Cloud Stackはスタックの作成者など、各スタックの標準実行時属性のセットを返します。 ただし、各テンプレートでカスタム・スタック属性を定義することもできます。 たとえば、データベースのconnectionString属性にマップするdatabaseという名前のスタック属性を定義できます。
条件とは何ですか?
スタック・テンプレートには、異なる条件でスタックを作成する方法をカスタマイズできる機能が含まれています。
Oracle Cloud Stackでの条件の処理は、If/Then/Elseのような標準プログラミング構造での作業と似ています。 テンプレート内に条件式を定義し、他のテンプレート要素内で次の条件を参照することができます:
-
指定された条件が真である場合にのみ、テンプレート・パラメータをユーザーに表示します。
-
指定された条件が真である場合にのみ、リソースをプロビジョニングします。
次のシナリオを考えます:
-
テンプレート・パラメータ
productionがtrueの場合、リソースのclusterSizeを3に設定します。 -
テンプレート・パラメータ
productionがfalseの場合は、リソースのclusterSizeを構成しないでください。
If、Equals、Not、GreaterThanなどの条件付き関数を使用して、テンプレート・パラメータとリソースの構成をさらに制御することもできます。
マップとは
マップは、テンプレート内で静的な値を定義できるデータ構造です。 これらの値は、リソースなどの他のテンプレート・コンポーネント内で参照します。
次のようにマップ内のデータを整理します。
-
マップには、1つ以上のサブマップが含まれています。
-
サブマップには、1つ以上のキーと値のペアが含まれます。
たとえば、マップを使用して次のように定義できます:
-
開発、テスト、および運用スタックで使用するコンピュート・シェイプ
-
スタック内のリソースのユーザー名
mymap:
shapes: {"dev":"oc3","test":"oc4","prod":"oc5"}
users: {"db":"mydbuser","java":"myjavauser"}カスタム・アクションとは
Oracle Cloud Stackを使用して、テンプレートにリソースを作成した後にカスタム・オペレーティング・システム(OS)のコマンドとスクリプトを実行します。
たとえば、カスタム・アクションを使用すると、次のことができます:
-
OSパッケージをインストール
-
デフォルトのOS構成を変更
-
データベース・スキーマの作成
-
アプリケーションのデプロイ
-
クラウド・ストレージからファイルをダウンロード
カスタム・アクションは、Secure Shell (SSH)インタフェースを介して管理ノード(仮想マシン)にアクセスできるOracle Cloudサービスでのみサポートされています。 カスタム・アクションは、Oracle管理クラウド・サービスまたは自律クラウド・サービスではサポートされていません。
カスタム・アクションは、ソフトウェア・コンポーネントと呼ばれる特別なタイプのリソース内で定義されます。 これらのソフトウェア・コンポーネントとそのアクションは、同じテンプレート内の他のクラウド・リソースに割り当てられます。
関数とは何ですか?
Oracle Cloud Stackはテンプレート作成者に、値の検証、評価、操作を支援する多くの機能を提供します。
これらの関数は、スタックが作成される際にOracle Cloud Stackによって実行時に実行されます。 いくつかの基本機能は次のとおりです:
-
GetParam- テンプレート・パラメータの値を取得します。 -
GetAtt- 特定のリソースから実行時属性の値を取得します。 -
If- 条件が真または偽と評価された場合、このテンプレート内の条件を評価し、異なる値を戻します。
「関数一覧」を参照してください。
