twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Salt Cloud で AWS EC2 のインスタンスをプロビジョンする

Salt Cloud で AWS EC2 のインスタンスをプロビジョンする

原文はこちらです。

saltstack logo

SaltStack は、日々成長変化するサーバー群のプロビジョンや管理を行うシステム管理者にとって、必須の次世代の道具です。
SaltStack プロジェクトは、2011 年に発足しました。2013 年 8 月に SaltStack で最初に知っておくべき 5 つの事を掲載しました。同じ年に、GitHub の Octoverse において、saltstack/salt リポジトリが ”issue closed” と “merged pull requests” のカテゴリで 3 位に入りました。
2013 年 11 月 8 日、Salt Cloud が Salt のメイン リポジトリにマージされ、SaltStack の 2014.1.0 Hydrogen release の一部に取り込まれました。.
Salt Cloud は、クラウド プロバイダー内または相互間でプロビジョニングと管理を行うツールです。たとえば、システム管理者は、5 つの新しい Web サーバーを AWS U.S. West Coast リージョン内に、また 3 つの新しいアプリケーション サーバーを Rackspace ロンドン リージョンにプロビジョンするという作業を、Salt Cloud で構築した 1 つのノードからできるようになります。
本文献では、Salt Cloud を使って Amazon EC2 インスタンスをプロビジョンする方法を学ぶとともに、Salt Cloud の Map 機能を用いて複数インスタンスを並列にプロビジョンする方法も学習します。
ディストリビューションとして CentOS を使いますが、多少のインストールの詳細な部分を除けば、EC2 で動作可能な他のディストリビューションにも適用可能で、SaltStack の現行バージョンを実行できます。
SaltStack は、AWS EC2 以外に、Digital OceanGoGridGoogle Compute EngineOpenStack および Rackspace をサポートしています。それぞれのプロバイダーでサポートされている機能については、フィーチャーマトリックスを参照してください。
Salt-cloud を走らせているインスタンス、Salt Cloud コマンド ライン ツール、そしてプロビジョンされたインスタンスの間は SSH で接続します。Salt Master は Salt Cloud には必須ではありません。Salt state と modulesを利用してインスタンスを管理する場合に、Salt Master が必要ですが、本文献では扱いません。

インストール

salt-cloud コマンド ライン ツールは、EPEL に含まれる salt-master 2014.1.0 RPM packageと一緒に出ています。EC2 内のインスタンスにインストールします。

$ yum install salt-master

‘SaltStack’ チームは、Ubuntu の全現行バージョンをカバーする Ubuntu Personal Package Archive を管理しています。Salt は、openSUSE 13.1 リリースでも使えます。docs.saltstack.com 内のドキュメントには、他のディストリビューションへの Salt のインストール方法が書かれています。
salt-cloudは、Apache libcloud を必要とします。Libcloud は、30 以上のクラウド サービス プロバイダーをサポートする python ライブラリです。Pip を使って安定版をインストールします。

$ pip install apache-libcloud

Pip がないときは、python-pip を先にインストールします。 Libcloud を独立した Python 環境にインストールする場合は、virtualenv を調べてください。

EC2 セキュリティグループ

Salt-cloud でプロビジョンした各インスタンスは、少なくとも 1 つの AWS EC2 セキュリティ グループに属する必要があります。セキュリティ グループに属することにより、salt-cloud を実行しているインスタンスからのポート 22/tcp を通した通信を受け取ることができます。以前の文献に、awscli を使ってセキュリティ グループを作成する方法を書きました。

$ aws ec2 create-security-group \
     --group-name MySecurityGroupSaltCloudInstances \
     --description "The Security Group applied to all salt-cloud instances"
$ aws ec2 authorize-security-group-ingress \
     --group-name MySecurityGroupSaltCloudInstances \
     --source-group MySecurityGroupSaltCloud \
     --protocol tcp --port 22

authorize-security-group-ingress コマンドによって、MySecurityGroupSaltCloud セキュリティ グループ内部のすべての EC2 ノードが、ポート 22/tcp を通して MySecurityGroupSaltCloudInstances と通信できるようにします。私の設定では、salt-cloud を実行しているインスタンスは  MySecurityGroupSaltCloud セキュリティ グループに所属しています。Salt-cloud を実行しているインスタンスを所属させるセキュリティ グループを作成してください。

EC2 キーペア

salt-cloud は、salt-bootstrap のアップロードと実行に SSH を利用します。そのため、salt-cloud を実行するインスタンス上で SSH 用のパブリック キーとプライベート キーを生成します。パブリック キーは、キー ペアとして AWS EC2 にアップロードする必要があります。この方法も以前の文献に記載しています。
プライベート、パブリック キーの生成:

$ ssh-keygen -f /etc/salt/my_salt_cloud_key -t rsa -b 4096
$ aws ec2 import-key-pair --key-name my_salt_cloud_key \
         --public-key-material file:///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 プロバイダーを利用します。もうひとつのオプションとして AMI ID を指定します。AMI ID は、minion 上で実行するイメージの AMI ID です。Ami-e7138ddd が、CentOS.org がリリースした CentOS 6.5 イメージの AWS ap-southease-2 リージョンで使える AMI IDです。

base_ec2_private:
   provider: my_ec2_ap_southeast_2_private_ips
   image: ami-e7138ddd

Salt Cloud プロバイダー

salt-cloud プロバイダーは、AWS EC2 インスタンスが使用する属性セットを定義します。
下記に示した /etc/salt/cloud.providers ファイルに my_ec2_ap_southeast_2_private_ips プロバイダーを定義しました。base_ec2_private プロファイルで、このプロバイダを使用します。

my_ec2_ap_southeast_2_private_ips:
   # ip address salt-cloud should connect to
   ssh_interface: private_ips
   # aws credentials
   id: @AWS_ACCESS_KEY_ID@
   key: '@AWS_SECRET_ACCESS_KEY@'
   # ssh key
   keyname: my_salt_cloud_key
   private_key: /etc/salt/my_salt_cloud_key
   # aws location
   location: ap-southeast-2
   availability_zone: ap-southeast-2a
   # aws security group
   securitygroup: MySecurityGroupSaltCloudInstances
   # aws ami
   size: Micro Instance
   # delete aws root volume when minion is destroyed
   del_root_vol_on_destroy: True
   # local user
   ssh_username: root
   # rename on destroy
   rename_on_destroy: True
   provider: ec2

@マークで囲った属性は、読者の環境に合わせて変更する必要があります。

  • @AWS_ACCESS_KEY_ID@: 新規にインスタンスをプロビジョンする権限を有する IAM アカウントに属する AWS アクセスキー ID を指定します。Salt-cloud は AWS IAM rolesサポートしていますが、それらは、プロビジョンした EC2 minion のみに適用されます。Salt-cloud は、AWS アクセス キーとシークレット キーを minion をデプロイするためにだけ使用します。
  • @AWS_SECRET_ACCESS_KEY@: AWSアクセスキー ID に属しているシークレット キーを指定します。

最初の salt-cloud minion を生成する

最初に、ssh agent 内で SSH キーを設定します。

$ eval `ssh-agent`
$ ssh-add /etc/salt/my_salt_cloud_key

/etc/salt/cloud.profiles で定義したプロファイルと、新規に生成する minion 名称を指定して、salt-cloud コマンドを実行します。

$ salt-cloud --profile=base_ec2_private my_first_minion

salt-cloud は、SSH agent を使って salt-bootstrap をプルダウンします。Salt-bootstrap は、minion  ディストリビューションの検出、salt-minion パッケージのインストール、および salt-master が設定されている場合の  salt-master に対する minion のキー設定を安全に行います。
今までの作業が順調ならば、salt-cloud コマンドを使ってインスタンスを調べることができるようになります。

$ salt-cloud --action=show_instance my_first_minion

salt-cloud  コマンドは、AWS EC2 のタグの問い合わせや設定も可能です。

$ salt-cloud --action=get_tags my_first_minion
$ salt-cloud --action=set_tags my_first_minion environment=devel \
     role=webserver

EC2 ターミネーション プロテクションの enable/disable が可能です。

$ salt-cloud --action=show_term_protect my_first_minion
$ salt-cloud --action=enable_term_protect my_first_minion
$ salt-cloud --action=disable_term_protect my_first_minion

Minion のリブートもできます。

$ salt-cloud --action=reboot my_first_minion

salt-master をセットアップしていれば、salt コマンドで、標準の salt モジュールを実行できます。

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

State-master state をセットアップしていたら、state.highstate を適用可能です。

$ salt my_first_minion state.highstate

—destroy オプションを使って、インスタンスを破棄できます。

$ salt-cloud --destroy my_first_minion

Salt Cloud マップ

ここまで、シングル EC2 インスタンスのプロビジョンを扱いました。ここで、1 つの salt-cloud コマンドで複数のインスタンス生成をします。これには Salt Cloud マップを利用します。
/etc/salt/cloud.map ファイルに、base_ec2_private プロファイルを利用する 3 つの Web サーバーを定義します。

base_ec2_private:
   - web1_prod
   - web2_prod
   - web3_prod

—map オプションにマップ ファイルを指定するだけで、3 つの全インスタンス生成が可能です。—parallel オプションを追加指定すると、全インスタンスを同時にプロビジョンします。

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

プロビジョン後、salt-cloud コマンドにより、マップ内の全インスタンスを探すことができます。

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

—destroy オプションで、マップ内の全サーバーを停止させます。

$ salt-cloud --map=/etc/salt/cloud.map --destroy
Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/06/13 2018年 6月 12日
  2. Today's Linux 2018/06/14 2018年 6月 13日
  3. Today's Linux 2018/06/19 2018年 6月 18日
  4. Today's Linux 2018/06/11 2018年 6月 10日
  5. Today's Linux 2018/06/20 2018年 6月 19日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!