ECS Ubuntu上でChef Automateを数分で設定する方法

この記事では、ECS Ubuntuマシンで**Chef Automate**を数分で設定して使う方法を紹介します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/try-chef-automate-on-elastic-compute-service_594944)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.39473b973aXKBY)執筆者、イルハン・アディヤマン。[Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.39473b973aXKBY)は、クラウドコミュニティ内での技術的な知識やベストプラクティスの共有を促進するためのAlibaba Cloudのインセンティブプログラムです。


#Chef Automateについて
Chef Automateは、インフラストラクチャ、コンプライアンス、アプリケーションを楽に提供するための継続的な自動化を可能にするエンタープライズプラットフォームです。これにより、コンプライアンスの状態や設定、環境に適用されたすべての変更の履歴を監査可能な形で表示し、実用的な洞察を提供します。

Chef Automate は、オープンソース製品の Chef、InSpec、Habitat と統合されており、オープンソースのコンポーネントを含むプラットフォーム全体の包括的な 24 時間 365 日のサポートサービスが付属しています。

- Chefはインフラストラクチャの自動化のためのものです。インフラストラクチャをコード化し、過去の変更バックログを使って迅速に提供することができます。
- InSpecはコンプライアンスの自動化のためのものです。インフラストラクチャがコンプライアンス要件に準拠しているかどうかを評価し、コンプライアンスの失敗を修正し、インフラストラクチャを継続的に監視することができます。
- Habitatはアプリケーションの自動化のためのものです。これは、コンテナ上で、クラウドやオンプレミスなどの従来のサービスを使用して、アプリケーションを構築して実行する方法です。

このウォークスルーでは、UbuntuマシンにChef Automateをインストールする方法をご案内し、そのコアとなる機能をご紹介します。

#前提条件
Alibaba Cloudのアカウントを持っている必要があります。まだお持ちでない場合は、[無料トライアルのページ]()にアクセスして無料アカウントを取得してください。

#Chef Automateのインストール
###ステップ1: Linuxマシン用のAlibaba Cloud ECSインスタンスを起動する
Chef AutomateはUbuntu 16.04インスタンス上で動作するために、以下の最小システムリソースを必要とします。

- 4GB Ram
- 5 GBの空きディスク容量
- 2CPU
これらの要件に合わせるために、40GiBのUltra Cloud Disksを搭載したvCPU+4Gibメモリを2つ搭載した`ecs.t5-lc1m2.large`インスタンスを起動します。この構成でインスタンスを起動するには、以下の手順に従ってください。

1、Alibaba Cloud ECS 管理コンソールにログインし、メインダッシュボードにリダイレクトします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/12ea792d-bc9f-6365-1acd-36172e3824e4.png)

2、Products セクションの [Elastic Compute Service] をクリックします。これにより、ECS概要ダッシュボードに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a233824f-8719-d248-5718-2567dac55898.png)

3、Create Instance ボタンをクリックします。ECSインスタンス作成ウィザードにリダイレクトされます。ここでは、ニーズに応じて2種類の`Purchase`があります。Basic PurchaseとAdvanced Purchaseです。このガイドのために、Basic Purchaseを選択します。データセンターのリージョンを選択し、ECSインスタンスを起動します。インスタンスタイプは、それがChef Automateの最小システム要件と完全に一致するBurstableタイプt5 2C4Gとして選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5ceaa832-491f-1820-d857-026c8c53eb5d.png)

4、これで、ドロップダウンメニューからオペレーティングシステムを選択します。オペレーティングシステムはUbuntu、バージョンは16.04 64bitを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f2d0d107-3fb5-e081-941b-08fc8ad47d99.png)

5、今回のデモではVPCネットワークタイプとペイバイトラヒック課金タイプを使用するので、カスタマイズする必要はありません。ただし、ローカルコンピュータからChef Automateを接続するためには、パブリックIPアドレスが必要です。そのため、帯域幅を1Mbps以上増やしてインスタンスにパブリックIPアドレスを割り当てます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/73a15a9a-a7e2-81ed-f570-78cfb3b742a8.png)

6、購入設定の詳細を確認し、必要に応じて変更します。今すぐ購入をクリックして確認し、サーバーを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6df2540d-950a-d2c4-bf5a-87f335dd0df9.png)

7、ECS ダッシュボードのインスタンスセクションにインスタンスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0369dafb-378d-0b40-ab21-7517c47fdc94.png)

8、Manageをクリックすると、インスタンスの詳細情報が表示されます。インスタンスの接続にSSHを使用します。まず、インスタンスのパブリックIPアドレスを保存します。次に、`Basic Purchase`の項目からMoreとReset Passwordをクリックして、インスタンスのログインパスワードを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/05da43bc-c338-cba3-46fc-29a9b5367234.png)

9、新しいパスワードを入力してインスタンスを再起動すると、新しいパスワードが有効になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/309a26d3-9091-47fc-7abd-980669480cc7.png)

10、左側のパネルから [セキュリティ グループ] に移動し、[ルールの追加] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d3cf693a-ca90-838b-13eb-85f72861ccde.png)

11、インスタンスに接続するためにポート22を使用し、Chef Automate Web UIに到達するためにポート443を使用します。インスタンスが既にPort 22と443からのインバウンドトラフィックを許可するように設定されているかどうかを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/bfe8be16-8781-efd6-f62b-8f669ef478ec.png)


そうでない場合は、[セキュリティ グループ ルールの追加] を選択して新しいルールを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/21c378b0-ea9c-7842-4cff-87f2ac67d06a.png)

#ステップ2: SSHを使ってECSインスタンスを接続する
ここでは、MacやLinuxで`ターミナル`を使用してECSインスタンスを接続する方法を紹介します。Windowsを使用している場合は、[アリババ総合ガイド](https://www.alibabacloud.com/help/doc-detail/25434.htm?spm=a2c65.11461447.0.0.39473b973aXKBY)に従ってください。

ターミナルを開いて、まず`ssh root@[your-instance-public-ip]`を実行します。その後、ホスト鍵の指紋をローカルストレージに追加するように聞かれるので、「はい」と書いてください。最後に、上記の手順9で設定したログオンパスワードを入力します。出力は以下のようになります。

```
LocalMacbook:~ local$ ssh root@47.89.255.199
The authenticity of host '47.89.255.199 (47.89.255.199)' can't be established.
ECDSA key fingerprint is SHA256:mIPEqy7CFf6Xv9/5NDxTksbX+t/4IY6+hB0D6+8+NFE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '47.89.255.199' (ECDSA) to the list of known hosts.
root@47.89.255.199's password:
Welcome to Alibaba Cloud Elastic Compute Service !
Last login: Sun Feb 10 05:16:29 2019 from *********
root@iZrj91bne18a1ghb4zbdn6Z:~#
```

この段階では、Alibaba Cloud上で実行しているUbuntu 16.04インスタンスに正常にログインしています。他に何かインストールを始める前に、まずパッケージリストを更新してみましょう。以下のようなコマンドを実行します。

```
root@iZrj91bne18a1ghb4zbdn6Z:~# sudo apt-get update
```

###ステップ3: Chef Automateをインストール
Chef Automateをインストールするには、以下のように`curl`コマンドを実行します。Chefの公式パッケージ配布サービスから最新のChef Automate Linuxパッケージのインストーラをダウンロードし、実行可能なインストーラファイルを解凍します。

```
root@iZrj91bne18a1ghb4zbdn6Z:~#  curl https://packages.chef.io/files/current/automate/latest/chef-automate_linux_amd64.zip | gunzip - > chef-automate && chmod +x chef-automate
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 8689k  100 8689k    0     0  17.3M      0 --:--:-- --:--:-- --:--:-- 17.3M
```

以下のコマンドを実行して、インスタンス上でChef Automateを設定します。

```
root@iZrj91bne18a1ghb4zbdn6Z:~# sudo ./chef-automate deploy
```

Chefの利用規約とマスターライセンスおよびサービス契約書に同意するよう促されます。これらの契約に同意すると、インストーラーはプレフライトチェックを行います。すべてがうまくいけば、Chef Automateをダウンロードし、設定し、デプロイします。そうでなければ、インストーラーが提供する情報を読んで、失敗したチェックを解決してみてください。

インストーラーが完了すると、Web UIにアクセスするためのURLアドレスを返してくれます。しかし、インスタンスの完全修飾ドメイン名(FQDN)を設定していないので、うまくいきません。デモインストールのために、FQDNをインスタンスのパブリックIPアドレスで変更します。しかし、本番環境では、サービスのドメイン名を取得することを好むはずです。

インスタンスのパブリックIPアドレスでChef AutomateインストールのFQDNを変更するには、部分的な設定を含む.tomlファイルを作成します。

```
[global.v1]
  fqdn = "your-instance-s-public-ip-address"
```

次に chef-automate の設定パッチ` </path/to/your-file.toml>` を実行して、変更内容をデプロイします。これでWebブラウザから、[https://your-instances-public-ip-address ](https://your-instance-public-ip-address/?spm=a2c65.11461447.0.0.39473b973aXKBY)に移動してChef Automate Web UIにたどり着きます。起動後、サイトが利用可能になるまで1分ほどかかるかもしれません。

最初に接続すると、「Your connection is not private」という画面が表示されます。これはHTTPSを使用していますが、SSL証明書がないためです。私たちのテスト環境では問題ないので、「詳細設定」をクリックして「あなたのインスタンスのパブリックIPアドレスに進む（安全ではない）」をクリックします。

ログイン認証情報の入力を求められます。これらの認証情報はインスタンス内の `automate-credentials.toml` ファイルにありますので、インスタンスに接続してそのファイルを検索してください。

```
root@iZrj91bne18a1ghb4zbdn6Z:~# sudo cat automate-credentials.toml
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5156fccf-3f09-266b-ddd6-f404ccda198e.png)

その後、60日間のトライアルライセンスの登録を求められます。必要に応じてフォームに必要事項を記入し、利用規約に同意して「サインアップ」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f8886ca8-d304-9c8c-ebcc-5b8e5dd99258.png)

トライアルライセンスの期限が切れる日付が表示されます。It's ok, I know what I am doingをクリックして、Chef Automateのメイン画面を表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/910c9520-3231-279e-3c15-e4b06506a428.png)

上部には、イベントフィード、クライアントの実行、コンプライアンス、スキャンジョブ、アセットストア、設定の6つのタブが表示されます。ログイン時のデフォルト表示は「イベントフィード」タブです。このタブには、Chef ServerとComplianceのイベントを表すタイムラインが表示されます。

#Chef Automateの設定
Chef Automateは、既存の`Chef Automate`インストールの作業と設定を支援するためのいくつかの設定コマンドを提供するために、chef-automate CLIをインストールします。上記のステップ3では、すでにインストールのFQDN設定を設定するために使用しました。ここでは、それを使って作業できるいくつかのユースケースを説明します。

重要: 以下のコマンドは`sudo`権限が必要な場合があります。

- `chef-automate config show`は、デフォルトの設定を除いた現在のChef Automateの設定を表示します。
- Chef Automateは設定ファイルに[TOMLファイル形式](https://github.com/toml-lang/toml?spm=a2c65.11461447.0.0.39473b973aXKBY)を使用しています。既存のChef Automateの設定を更新するには、変更内容を含むファイルを作成し、`.toml`ファイルの拡張子を付けて保存します。それから `chef-automate patch </path/to/partial-config.toml> `を使用して、既存の設定に変更を適用します。このコマンドは、 Chef Automateの設定を扱うほとんどの状況で十分です。
- 現在のChef Automateの設定を完全に新しいものに置き換えたい場合は、`chef-automate config set </path/to/full-config.toml>` コマンドを使用します。また、Chef Automateをデプロイするのに必要な最低限の設定で設定ファイルを生成するには、`chef-automate init-config`コマンドを使用します。以下では、それらの設定と変更方法について説明します。

- Chef Automate FQDN: Chef Automate Web UIに到達するために上記のオプションを既に使用しています。以下のように部分的な設定を含む`.toml`ファイルを作成します。

```
  [global.v1]
    fqdn = "example.fqdn.com"
```

その後、chef-automateの設定パッチ`</path/to/fqdn-patch-file.toml>`を実行して変更を適用します。

- アップデート戦略：これはChef Automateをどのようにアップグレードするかを決めることができます。デフォルトのオプションは `at-once` で、新しいパッケージが検出されたときにインストールをアップグレードします。現在のパッケージのセットでインストールをフリーズさせたい場合は、以下のように部分的な設定を含む `.toml `ファイルを作成してください。

```
[deployment.v1]
    [deployment.v1.svc]
      upgrade_strategy = "none"
```

そしてchef-automateの設定パッチ`</path/to/update-strategy-patch-file.toml>`を実行して変更を適用します。

- ロードバランサーの証明書と秘密鍵： Chef AutomateのWeb UIを開こうとすると、ブラウザはSSL証明書に関するエラーを返しました。このエラーを修正するには、FQDNの設定に関するロードバランサー証明書と秘密鍵を更新する必要があります。以下のように、SSL 証明書とその秘密鍵を含む部分設定を含む `.toml `ファイルを作成してください。

```
[load_balancer]
[[load_balancer.v1.sys.frontend_tls]]
# The TLS certificate for the load balancer frontend.
cert = """-----BEGIN CERTIFICATE-----
<your certificate>
-----END CERTIFICATE-----
"""
# The TLS RSA key for the load balancer frontend.
key = """-----BEGIN RSA PRIVATE KEY-----
<your private key>
-----END RSA PRIVATE KEY-----
"""
```

その後、chef-automate の設定パッチ` </path/to/load-balancer-patch-file.toml>` を実行して変更を適用します。

- グローバルログレベル：デフォルトでは、Chef Automate はすべてのサービスを `info` ログレベルで初期化しますが、`debug`、` info`、 `warning`、 `panic` など設定が可能です。サービスのログレベルを変更するには、以下のようにログレベルの部分的な設定を含む` .toml `ファイルを作成します。

```
[global.v1.log]
level = "debug"
```

を実行して、chef-automateの設定パッチ`</path/to/log-level-patch-file.toml>`を実行して変更を適用します。

ここでは、Chef Automateを使用する最初のベビーステップで必要になるかもしれない最低限の設定のみを説明します。Chef Automateの設定オプションについてもっと知りたい場合は、他の設定オプションについて詳しく説明している包括的な[ドキュメント](https://automate.chef.io/docs/quickstart/?spm=a2c65.11461447.0.0.39473b973aXKBY)をチェックしてください。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*