DUICUO

Salt Cloud を使用して AWS EC2 インスタンスを構成するにはどうすればよいですか?

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 内のインスタンスにインストールできるはずです。

  1. $ yum で salt-master をインストール

SaltStackチームは、Ubuntuの全バージョンを含むUbuntu Personal Package Archive(PPA)を管理しています。Saltは標準のopenSUSE 13.1リリースにも含まれています。Docs.saltstack.comでは、他のディストリビューションやプラットフォームにSaltをインストールする方法をステップバイステップで説明した包括的なドキュメントを提供しています。

SaltCloudは、30以上のクラウドサービスプロバイダーと互換性のあるPythonライブラリであるApache libcloudに依存しています。apache-libcloudの安定版は、pipコマンドを使用してインストールできます。

  1. $ pip で apache-libcloud をインストールします

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 を参照してください。

  1. $ aws ec2 セキュリティグループの作成 \
  2. --グループ名 MySecurityGroupSaltCloudInstances \
  3. --description "すべてのソルトクラウドインスタンスに適用されるセキュリティグループ"
  4. $ aws ec2 承認セキュリティグループ入力 \
  5. --グループ名 MySecurityGroupSaltCloudInstances \
  6. --source-group MySecurityGroupSaltCloud \
  7. --プロトコル tcp --ポート 22

`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 公開キーを作成するには:

  1. $ ssh-keygen -f /etc/salt/my_salt_cloud_key -t rsa -b 4096
  2. $ aws ec2 インポートキーペア --key-name my_salt_cloud_key \
  3. --公開鍵マテリアルファイル:///etc/salt/my_salt_cloud_key.pub

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 です。

  1. ベース_ec2_プライベート:
  2. プロバイダー: my_ec2_ap_southeast_2_private_ips
  3. 画像: ami-e7138ddd

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:

  1. # salt-cloud が接続する IP アドレス 
  2. ssh_interface: プライベートIP
  3. # AWSログイン情報 
  4. ID: @AWS_ACCESS_KEY_ID@
  5. キー: '@AWS_SECRET_ACCESS_KEY@'  
  6. # SSHキー 
  7. キー名: my_salt_cloud_key
  8. 秘密鍵: /etc/salt/my_salt_cloud_key
  9. # AWS ロケーション 
  10. 場所: ap-southeast- 2  
  11. 可用性ゾーン: ap-southeast- 2a  
  12. # AWS セキュリティグループ 
  13. セキュリティグループ: MySecurityGroupSaltCloudInstances
  14. # AWS AMI  
  15. サイズ: マイクロインスタンス
  16. # ミニオンが破棄されたら、AWS ルートボリュームを削除します。  
  17. del_root_vol_on_destroy: True  
  18. # ローカルユーザー 
  19. ssh_ユーザー名: root
  20. # 破棄したら、名前を変更します。  
  21. 破棄時に名前を変更する: True  
  22. プロバイダー: ec2

@ 記号でカプセル化されたいくつかのプロパティを定義しました。これらは、環境に合わせてアップロードする必要があります。

@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 キーを設定する必要があります。

  1. $ `ssh-agent` を評価する
  2. $ ssh-add /etc/salt/my_salt_cloud_key

次に、/etc/salt/cloud.profiles で設定した名前と一致する設定ファイル名を渡して salt-cloud を呼び出します。最後のパラメータは新しいミニオンの名前です。

  1. $ salt-cloud --profile = base_ec2_private my_first_minion

Salt-cloud は SSH プロキシを使用して Salt-Bootstrap 自動インストールスクリプトを取得します。このスクリプトは、Minion ディストリビューションを安全に検出し、Salt-Minion パッケージをインストールします。Salt-Master を既にセットアップしている場合は、Salt-Master 用の Minion キーを事前に提供することもできます。

成功した場合は、salt-cloud を使用してインスタンスをクエリできます。

  1. $ salt-cloud --action = show_instance my_first_minion

SaltCloud は、AWS EC2 タグのクエリや設定などの他の操作もサポートしています。

  1. $ salt-cloud --action = get_tags my_first_minion
  2. $ salt-cloud --action = set_tags my_first_minion環境= devel \
  3. 役割=ウェブサーバー 

EC2 終了保護を有効または無効にすることができます。

  1. $ salt-cloud --action = show_term_protect my_first_minion
  2. $ salt-cloud --action = enable_term_protect my_first_minion
  3. $ salt-cloud --action = disable_term_protect my_first_minion

ミニオンを再起動することもできます。

  1. $ salt-cloud --action = my_first_minionを再起動する

すでに salt-master を設定している場合は、salt コマンドラインから標準の salt モジュールを実行できるはずです。

  1. $ salt my_first_minion cmd.run '/sbin/ip address show'

もちろん、salt-master 状態がすでに設定されている場合は、state.highstate を使用できます。

  1. $ ソルト my_first_minion state.highstate

***、--destroy オプションを使用してインスタンスを破棄できます。

  1. $ salt-cloud --destroy my_first_minion

塩雲マップ

salt-cloud を使用して単一の EC2 インスタンスを構成する方法については既に説明しました。今回はこれを拡張し、Salt Cloud Maps を使用して、単一の salt-cloud コマンドで複数のインスタンスを作成できるようになりました。

/etc/salt/cloud.map ファイルでは、base_ec2_private 構成ファイルから継承する 3 つの Web サーバーを定義しました。

  1. ベース_ec2_プライベート:
  2. - web1_prod
  3. - web2_prod
  4. - web3_prod

3つのインスタンスすべてを設定するには、`--map` オプションとマップファイルの場所を渡すだけです。さらに、`--parallel` を指定すると、マップ内のすべてのインスタンスが同時に設定されます。

  1. $ salt-cloud --map =/etc/salt/cloud.map --parallel

設定が完了すると、Salt Cloud を使用してマップ内のすべてのインスタンスをクエリできるようになります。

  1. $ salt-cloud --map =/etc/salt/cloud.map --query

マップ内のすべてのサーバーを終了するには、--destroy オプションを渡すだけです。

  1. $ salt-cloud --map =/etc/salt/cloud.map –destroy

英語: http://www.linux.com/learn/tutorials/772719-how-to-provision-aws-ec2-instances-with-salt-cloud