|
SaltStack (http://www.saltstack.com/community/) は、システム管理者がツールボックスに保持しておくべき次世代のインフラストラクチャ管理ツールの 1 つであり、増え続けるサーバーの構成と管理に使用できます。 SaltStack プロジェクトは 2011 年に開始されました。2013 年 8 月に SaltStack に関する記事を公開しました。同年、すべてのパブリック ソフトウェア リポジトリの中で「解決された問題」と「マージされたプル リクエスト」が最も多かったリポジトリの中で、GitHub の Octoverse は saltstack/salt ソフトウェア リポジトリの中で 3 位にランクされました。 2013 年 11 月 8 日に、Salt Cloud はメインの Salt ソフトウェア リポジトリに組み込まれ、SaltStack 2014.1.0 Hydrogen リリースの一部となりました。 Salt Cloudは、対応クラウドサービスプロバイダー内およびプロバイダー間でクラウドサーバーを構成および管理するためのツールです。例えば、システム管理者は、Salt Cloudで構成された単一のノードを使用して、Amazon Web Services(AWS)西海岸リージョンにある5台の新しいWebサーバーと、Rackspaceロンドンリージョンにある3台の新しいアプリケーションサーバーを構成できます。 この記事では、Salt Cloud を使用して Amazon Elastic Compute Cloud (EC2) インスタンスを構成する方法について説明します。また、Salt Cloud のマップ機能を使用して、1 つのコマンドで複数の並列インスタンスを構成する方法についても説明します。 ただし、この記事で使用されているディストリビューションは CentOS です。インストールに関するいくつかの細かい詳細を除けば、この記事で説明する詳細な手順は、最新バージョンの SaltStack を実行できる EC2 上のどのディストリビューションにも適用されます。 SaltStackは、AWS EC2に加えて、Digital Ocean、GoGrid、Google Compute Engine、OpenStack、Rackspaceなどのクラウドサービスプロバイダーもサポートしています。機能マトリックス(http://docs.saltstack.com/en/latest/topics/cloud/features.html)には、各クラウドサービスプロバイダーでサポートされている機能を示す表が掲載されています。 Salt-cloud インスタンス、Salt Cloud コマンドラインツール、そして設定されたインスタンス間のすべてのやり取りは、SSH プロトコルを介して行われます。Salt Cloud は Salt Master デーモンを必要としません。設定されたインスタンスを Salt の状態とモジュールを使用して管理したい場合は、Salt Master を設定する必要がありますが、この記事ではその説明は割愛します。 インストール salt-cloud コマンドラインツールは、EPEL に含まれる salt-master 2014.1.0 RPM パッケージに同梱されています。EC2 内のインスタンスにインストールできるはずです。
SaltStackチームは、Ubuntuの全バージョンを含むUbuntu Personal Package Archive(PPA)を管理しています。Saltは標準のopenSUSE 13.1リリースにも含まれています。Docs.saltstack.comでは、他のディストリビューションやプラットフォームにSaltをインストールする方法をステップバイステップで説明した包括的なドキュメントを提供しています。 SaltCloudは、30以上のクラウドサービスプロバイダーと互換性のあるPythonライブラリであるApache libcloudに依存しています。apache-libcloudの安定版は、pipコマンドを使用してインストールできます。
pip コマンドがない場合は、まず python-pip パッケージをインストールする必要があるかもしれません。apache-libcloud を独立した Python 環境にインストールする場合は、まず virtualenv(仮想環境)をチェックしてください。 EC2 セキュリティグループ SaltCloud が設定された各インスタンスは、少なくとも 1 つの AWS EC2 セキュリティグループに所属する必要があります。このセキュリティグループでは、SaltCloud を実行しているインスタンスのポート 22/tcp からの受信トラフィックが許可されます。awscli ツールを使用してセキュリティグループを作成する方法については、以前に説明しました。詳細については、http://www.linux.com/learn/tutorials/761430-an-introduction-to-the-aws-command-line-tool を参照してください。
`authorize-security-group-ingress` コマンドは、`MySecurityGroupSaltCloud` セキュリティグループ内の任意の EC2 ノードが、ポート 22/tcp 経由で `MySecurityGroupSaltCloudInstances` 内の他の EC2 ノードにアクセスできるようにします。私のインストール環境では、salt-cloud を実行しているインスタンスは `MySecurityGroupSaltCloud` セキュリティグループに属しています。salt-cloud インスタンスが属するセキュリティグループを作成する必要があります。 EC2キーペア SaltCloudは、salt-bootstrap自動インストールスクリプトのアップロードと使用にSSHプロトコルを使用しています。SaltCloudを実行するインスタンス用にSSH公開鍵と秘密鍵を生成する必要があります。また、公開鍵をAWS EC2にアップロードして鍵ペアを作成する必要があります。その方法については以前の記事で説明しました。 SSH 秘密キーと SSH 公開キーを作成するには:
Salt Cloud 設定ファイル Salt Cloud プロファイルは、Salt-cloud によって構成および管理される Salt Minion の基本的な構成項目のセットを定義します。 以下の `/etc/salt/cloud.profiles` ファイルには、`base_ec2_private` という設定ファイルを作成しました。この設定ファイルは、後ほど定義するプロバイダー `my_ec2_ap_southeast_2_private_ips` を使用します。他に指定する必要があるのは、ミニオンが実行されるイメージの Amazon Machine Image (AMI) ID だけです。`ami-e7138ddd` は、CentOS.org が発行し、AWS ap-southeast-2 リージョンで利用可能な CentOS 6.5 イメージの AMI ID です。
Salt Cloudプロバイダー Salt Cloud プロバイダーは、AWS EC2 インスタンスで使用される一連のプロパティを定義します。 以下は、`my_ec2_ap_southeast_2_private_ips` のプロバイダーを定義するために使用する `/etc/salt/cloud.providers` ファイルです。このプロバイダーは、`my base_ec2_private` 設定ファイルで使用されています。 my_ec2_ap_southeast_2_private_ips:
@ 記号でカプセル化されたいくつかのプロパティを定義しました。これらは、環境に合わせてアップロードする必要があります。 @AWS_ACCESS_KEY_ID@: AWS アクセスキー ID は、新しいインスタンスを設定するのに十分な EC2 権限を持つ IAM アカウントに属します。SaltCloud は AWS Identity and Access Management (IAM) ロールをサポートしていますが、それらは設定された EC2 ミニオンにのみ適用されます。ミニオンのデプロイには、SaltCloud によって静的 AWS アクセスキーとシークレットキーが引き続き使用されます。 @AWS_SECRET_ACCESS_KEY@: AWS アクセスキー ID に属する AWS 秘密キー。 *** 塩雲ミニオンを作成 まず、SSH プロキシで SSH キーを設定する必要があります。
次に、/etc/salt/cloud.profiles で設定した名前と一致する設定ファイル名を渡して salt-cloud を呼び出します。最後のパラメータは新しいミニオンの名前です。
Salt-cloud は SSH プロキシを使用して Salt-Bootstrap 自動インストールスクリプトを取得します。このスクリプトは、Minion ディストリビューションを安全に検出し、Salt-Minion パッケージをインストールします。Salt-Master を既にセットアップしている場合は、Salt-Master 用の Minion キーを事前に提供することもできます。 成功した場合は、salt-cloud を使用してインスタンスをクエリできます。
SaltCloud は、AWS EC2 タグのクエリや設定などの他の操作もサポートしています。
EC2 終了保護を有効または無効にすることができます。
ミニオンを再起動することもできます。
すでに salt-master を設定している場合は、salt コマンドラインから標準の salt モジュールを実行できるはずです。
もちろん、salt-master 状態がすでに設定されている場合は、state.highstate を使用できます。
***、--destroy オプションを使用してインスタンスを破棄できます。
塩雲マップ salt-cloud を使用して単一の EC2 インスタンスを構成する方法については既に説明しました。今回はこれを拡張し、Salt Cloud Maps を使用して、単一の salt-cloud コマンドで複数のインスタンスを作成できるようになりました。 /etc/salt/cloud.map ファイルでは、base_ec2_private 構成ファイルから継承する 3 つの Web サーバーを定義しました。
3つのインスタンスすべてを設定するには、`--map` オプションとマップファイルの場所を渡すだけです。さらに、`--parallel` を指定すると、マップ内のすべてのインスタンスが同時に設定されます。
設定が完了すると、Salt Cloud を使用してマップ内のすべてのインスタンスをクエリできるようになります。
マップ内のすべてのサーバーを終了するには、--destroy オプションを渡すだけです。
英語: http://www.linux.com/learn/tutorials/772719-how-to-provision-aws-ec2-instances-with-salt-cloud |