「クラウド」とは、PaaS ( Google App Engine、Heroku など) ではなく、EC2 などのIaaS (Infrastructure-as-a-Service プロバイダー)を意味する場合、最近の傾向はInfrastructure-as のようです。 -コード、およびDevOps。これは厳密には「ゼロ構成」ではありません。これは configure onceに似ており、スタック全体の構成を DSL で記述します。これを使用して、クラウド上で実行されている新しく起動された VM のセットだけからスタック全体を構築または再構築できます。
つまり、構成管理システムと、構成管理システムが理解する機械可読な「レシピ」の束があります。言語が実際に XML であるシステムは存在しますが、レシピはある種のカスタム DSL で表現されるのが普通です。
このような構成管理システムのよく知られた例には、次のものがあります。
- シェフ
- 傀儡
他にもたくさんあります。しかし、私はそれらの経験がありません(CFEngine、bcfg2(XMLを使用))
これらのツールはべき等です。つまり、必要な回数だけ構成を再実行し続けることができ、レシピで指定された説明を満たすために実行する必要があることだけが実行されます。特定のファイルを特定の内容で特定のディレクトリに配置するように指定した場合、それらは必要な場合にのみ作成 (または変更) されます。パッケージは、必要な場合、またはバージョンがレシピの指定と異なる場合にのみインストールされます。
たとえば、Chef で、ユーザーtomcat
が存在する必要があること、特定のバージョンの Java がインストールされている必要があること、postfix が実行されている必要があること、および特定の XML ファイルが特定の場所で利用可能でなければならないことを指定するには、次のようなレシピ:
user "tomcat"
package "java" do
version "1.6.0_u27"
end
directory "/etc/yourapp" do
owner "tomcat"
end
package "postfix"
# Ensure that postfix is installed and running.
service "postfix" do
action [:enable, :start]
end
tempate "/etc/yourapp/config.xml"
source "config.xml.erb" # This will be a template file that references variables
variables(
:db_server => '10.1.2.4' #just an example; there will be ways to automate this
)
mode "0755"
end
Chef の 1 つは、事前に作成されたレシピまたは「クックブック」を提供するもので、インフラストラクチャの一部としてダウンロードして組み込み、使用するだけです。Chef では、必要なサーバーに基づいてクックブックを作成します。次に、スタックを構成するサーバーのどのクラスにどのクックブックを適用するかを指定するロールを定義します。インスタンスにロールを割り当てて起動し、スタック全体が起動するのを確認するだけです。
これは、インフラストラクチャのフルスタック実行可能記述を維持する標準的な方法になりつつあると言えます (単なるクラウドである必要はありません。VMWare および/または VirtualBox でテストしますが、同じレシピで複数のパブリック クラウド ベンダーに展開します。 )
欠点は、DSL を学ぶ必要があることです。また、ワークフローに大幅な変更を加えることもできます。これらのシステムには、それぞれ長所と短所もあります。しかし、この方法で行うことは、カスタマイズされた VM イメージを維持することから確実に次の層になり、多くの点でより柔軟になります。たとえば、すべてのクラウド プロバイダーがインスタンスの同期を維持するために NTP サーバー アドレスを提供する場合、プロバイダーに応じてイメージを変更する必要があります。Chef/Puppet を使用すると、これを自動化してきれいに抽象化できます。
VM イメージは目的の「構成」の凍結されたコピーですが、各コンポーネント (スタック内の各インスタンス) が相互に対話する方法をキャプチャしません。たとえば、アプリケーション サーバーは、データベース サーバー、そのアドレス、さまざまな接続パラメーターについて知る必要があります。データベース サーバーは、接続する可能性のあるすべてのアプリケーション サーバーについて知る必要があります (クラウド コンテキストでは、アプリケーション サーバーは、時間の経過とともに数が増えたり減ったりします)。これは、Chef のようなシステムで自動化するのが非常に簡単な動的なものです。