FUJITSU Cloud Service K5
IaaS 設計・構築ガイド(デザインパターン・実装サンプル集)

テンプレート配備パターン


要求事項

仮想サーバやロードバランサー等のリソースや、ファイアーウォールやセキュリティグループのルール等、何度も利用する構成を定型化して、
システムを一括で配備したい、開発/検証/本番等の環境を同一の内容で構築したい、他のシステムでも再利用できるようにしたい、
といった要求事項に対応します。



対応するK5デザインパターン概要

K5では、システム上で提供される複数の仮想リソースを使用して、環境を自動で構築する"オーケストレーション" 機能が提供されています。

"オーケストレーション" 機能では、仮想ルータ、サブネット等のネットワークの設定や、ロードバランサー、仮想サーバ等のサーバの設定、
ファイアーウォールやセキュリティグループ等のアクセス制御設定等のシステムのかたまりを、「スタック」として扱います。

スタックを、YAML形式のテキストで定義したものを "テンプレート" と呼びます。
テンプレートを、ポータルやAPI経由で投入すると、オーケストレーション機能が働いてシステムを一括で構築することが出来ます。

本パターンでは、セキュリティグループを作成/更新するテンプレートを例として、スタックの作成/更新と、スタックの削除を記載します。

※なお、本パターンでは、以下を目的として記載しています。

  • テンプレートを使って スタックの作成/更新 の概要と手順を理解すること
  • テンプレート配備の上で、他の仮想リソースとは違う固有の考え方が必要なセキュリティグループの配備について理解すること
  • テンプレートの記載範囲 について検討が推奨されることを理解すること

※セキュリティグループ以外の、実際のテンプレートの活用例は、以下を参照してください。



構造 (イメージ図)

※本パターンはセキュリティグループを作成/更新するだけのため、システム構成のイメージ図は省略します。



実装サンプル

1.スタックの作成

 (1) テンプレートの内容
   テンプレートでは、以下のセキュリティグループを設定します。


  • テンプレート内容
セキュリティ
グループ
テンプレート内容 スタック作成で設定される
セキュリティグループのルール
SG_test_A ルール無し egress のルールが1つも無い場合、
デフォルトの egressルールが作成されます
SG_test_B egress のルールを1つ設定 設定した egress ルールのみ 作成されます
SG_test_C ingress のルールを1つ設定 設定したingress ルールと、
デフォルトの egressルールが作成されます
SG_test_D egress のルールを1つ設定 SG_test_Bと同じ

※ここでは、セキュリティグループのルールの設定の仕方 (どういう設定が推奨されるか等) は記載しません。
 セキュリティグループをスタックで作成した場合に、どのようにセキュリティグループが作成されるかを記載しています。

※セキュリティグループでは、セキュリティグループの作成時に、デフォルトの egress ルールを作成する機能があります。
 そのため、スタックの作成時に、テンプレートに記載した内容と実際に作成されるスタックの内容が異なる場合があります。
 テンプレート作成時の参考にしてください。

 (2) スタックの作成
   ポータルでは、以下の手順でスタックを作成します。

  • 「テンプレート」⇒「スタック」と選択した画面で、画面右上の「+」ボタンをクリックします。
  • 以下を入力して「作成」をクリックすると、「スタック」画面に戻り、スタックが "CREATE_IN_PROGRESS" というステータスで作成中になります。
項目設定値備考
スタック名(適宜入力してください)英数字と、"_"、"-"、"." のみ使用可。先頭文字は英字。
テンプレート指定方法"YAML"テンプレートの指定方法は以下があります
- URL
- ファイル
- YAML
テンプレートファイル以下のテンプレートの内容を
編集したものをコピー/ペースト

HOT_SG_stack_sample1.html

テンプレートの指定方法に合わせて、
項目名が以下のように変わります
- URL
- ファイル
- YAML
タイムアウト(分)10分適宜入力してください
失敗時のリソース削除「削除する」をチェックしないテンプレート実行失敗時に、
失敗するまでに作成したリソースを
削除する場合はチェックします。

※既存のセキュリティグループ数やセキュリティグループルール数との合計がプロジェクトの制限値を超える場合は、
 スタック作成が失敗するか、またはルールが一部作成されないで作成完了します。

  • しばらく時間をおいて、「スタック」画面をリロードします。
    スタックの作成が完了していると、ステータスが "CREATE_COMPLETE" となります。
    スタックの作成が失敗していると、ステータスが "CREATE_FAILED" となります。

 (3) スタックの確認
   スタックが作成されたら、テンプレートの内容と実際の設定状況を照合して確認してください。

    ※スタックが "CREATE_COMPLETE" となっていても、セキュリティグループのルール数が制限値を超えていて、
     ルールが作成されていない等がありえます。



2.スタックの更新

 (1) テンプレートの内容
   テンプレートでは、以下のセキュリティグループを更新します。


  • テンプレート内容
セキュリティ
グループ
テンプレート内容 スタック更新で設定される
セキュリティグループのルール
SG_test_A SG_test_Bに対する ingress/egress ルールを追加 egress のルールがあるため、
設定したルールが作成されます
SG_test_B SG_test_Aに対する ingress/egress ルールを追加
SG_test_C ルール設定無し 更新前の状態にかかわらず、
デフォルトの egressルールが作成されます
SG_test_D ルール設定無し

※セキュリティグループでは、上記表の SG_test_A と SG_test_B のように、相互に設定する場合が多くあります。
 テンプレートを用いてセキュリティグループを相互に設定した場合には、本パターンのようにまずセキュリティグループを作成し、
 その後にスタックの更新でセキュリティグループのルールを設定してください。
 スタックの作成時に、セキュリティグループを相互に設定することはできません。

 (2) スタックの更新
   ポータルでは、以下の手順でスタックを更新します。

  • 「テンプレート」⇒「スタック」と選択した画面で、更新したいスタックの「アクション」メニューから、「編集」をクリックします。
  • 以下を入力して「更新」をクリックすると、「スタック」画面に戻り、スタックが "UPDATE_IN_PROGRESS" というステータスで更新中になります。
項目設定値備考
スタック名(スタック名)更新対象となるスタック名が表示されます。
テンプレート指定方法 "YAML"テンプレートの指定方法は以下があります
- URL
- ファイル
- YAML
テンプレートファイル 以下のテンプレートの内容を
編集したものをコピー/ペースト

HOT_SG_stack_sample2.html

テンプレートの指定方法に合わせて、
項目名が以下のように変わります
- URL
- ファイル
- テンプレートファイル
テンプレートに渡すパラメータ (設定済の値)スタックの作成時に、テンプレートの parameters セクションで
定義された値があれば表示されます
スタックの更新時に、テンプレートの parameters セクションに
同じ項目が定義されているとエラーになります
テンプレートに同じ項目がある場合は、ポータルでは削除してください
タイムアウト(分) 10分適宜入力してください

※既存のセキュリティグループ数やセキュリティグループルール数との合計がプロジェクトの制限値を超える場合は、
 スタック更新が失敗するか、またはルールが一部更新されないで更新完了します。

  • しばらく時間をおいて、「スタック」画面をリロードします。
    スタックの更新が完了していると、ステータスが "UPDATE_COMPLETE" となります。
    スタックの更新が失敗していると、ステータスが "UPDATE_FAILED" となります。

 (3) スタックの確認
   スタックが更新されたら、テンプレートの内容と実際の設定状況を照合して確認してください。

    ※スタックが "UPDATE_COMPLETE" となっていても、セキュリティグループのルール数が制限値を超えていて、
     ルールが更新されていない等がありえます。



3.スタックの削除

 (1) スタックの削除
   ポータルでは、以下の手順でスタックを削除します。

  • 「テンプレート」⇒「スタック」と選択した画面で、削除したいスタックの「アクション」メニューから、「削除」をクリックします。
  • 「スタック削除の確認」ウィンドウがポップアップされます。確認して「削除」をクリックします。
    「削除」クリックすると、「スタック」画面に戻り、"DELETE_IN_PROGRESS" というステータスで削除中になります。
  • しばらく時間をおいて、「スタック」画面をリロードします。
    スタックの削除が完了していると、スタックが一覧からなくなっています。
    スタックの削除が失敗していると、ステータスが "DELETE_FAILED" となります。

 (2) スタックの削除についての注意事項

  • スタックを作成中/更新中に、スタックを削除しないでください。
    "DELETE_FAILED" となって、スタックが削除できなくなる可能性があります。





メリット・効果

テンプレート配備 パターンを利用した場合のメリット・効果は以下の通りです。

  • 何度も利用する構成を定型化 (=テンプレート化) することにより、容易に、システムを一括で配備することが可能
  • 開発/検証/本番等の環境等、同一の内容で環境を構築したい場合に、容易に、複数の環境を同じ内容で配備することが可能
  • テンプレートを流用したり再利用することで、構築コストを低減可能



注意事項

  • 本パターンは2017年5月時点のK5(IaaS)で動作検証しています。

  • テンプレートでは、パラメータによりスタック作成時にしか指定できず、スタックの更新で変更ができないパラメータがあります。
    パラメータごとの詳細は HEATテンプレート解説書 でご確認ください。

  • テンプレートに設定したパラメータがプロジェクトの制限値を超えている場合は、スタック作成/更新が失敗したり、
    スタック作成/更新が完了していても不備が出たりする場合があります。



その他

テンプレートへの記載範囲について

スタックを作成/更新で使用するテンプレートは、1つのテンプレートすべてまとめて記載するのではなく、複数のテンプレートに分割することを推奨します。
1つのテンプレートにどこまでの内容を盛り込むか、以下の観点での検討してください。

 (1) システムに対する変更のタイミングによる検討
   システムに対する変更のタイミングが重なることが想定される内容により、記載内容を分割します。

   具体例としては、以下の内容で区分すること等があげられます。

   - 仮想ルータやネットワーク系のテンプレート
   - ファイアーウォール用のテンプレート (頻繁に変更が入ることを想定)
   - セキュリティグループ用のテンプレート(頻繁に変更が入ることを想定)
   - オートスケールのテンプレート
   - NASサーバのテンプレート       等々


 (2) 設定方式よる検討
   本パターンで記載したセキュリティグループでは、スタックの新規作成時に、以下のように相互参照をするセキュリティグループを
   まとめて作成することはできません。

セキュリティグループ セキュリティグループに設定する内容
接続先 方向 プロトコル
SG_a SG_b 送信 ssh
SG_b SG_a 受信 ssh

   セキュリティグループについては、以下のような分割の方式が考えられます。

    - セキュリティグループをテンプレートのみで作成
     相互参照を含むセキュリティグループをテンプレートのみで作成する場合は、本パターンで記載したように、
     新規作成用と更新用のテンプレートを作成します。
     新規作成用のテンプレートでセキュリティグループを作成し、更新用のテンプレートでルールを設定します。
     新規作成用テンプレートと更新用テンプレートを残しておくことで、ある時点での設定状態を残しておくことが可能です。

     なお、セキュリティグループのテンプレートを他システムで流用できるようにする等、再利用性を高めるためには、
     セキュリティグループに何らか変更を加える際に、新規作成用のテンプレートと更新用のテンプレートで整合性がとれるよう
     留意してください。

    - セキュリティグループのグループをテンプレートで作成し、APIでセキュリティグループのルール追加/削除
     テンプレートと APIを併用する方式です。
     APIは、テンプレートよりも逐次変更に向いています。
     逆に、逐次変更であることから、ある時点のセキュリティグループの状態を再現するという用途には不向きです。
     API処理をシェルスクリプト化する等、再現性を高める工夫が必要になります。

    - セキュリティグループのグループを APIで作成し、APIでルール追加/削除
     テンプレート化を行わない、という選択もあります。
     システムの再利用性を高めるにはテンプレートは適していますが、類似のシステムを作ることがないのであれば、
     利用者が手慣れた手段 (APIまたはポータル) でセキュリティグループを設定することも合わせて検討してください。



関連資料

  • FUJITSU Cloud Service K5 マニュアル
    http://jp.fujitsu.com/solutions/cloud/k5/document/
    • サービスご紹介資料
    • IaaS 機能説明書
    • IaaS サービスポータルユーザーズガイド
    • IaaS APIユーザーズガイド
    • IaaS APIリファレンスマニュアル
    • IaaS HEATテンプレート解説書

(2017年5月検証)