AWS-OpsWorks

AWS OpsWorks for Chef Automateを触ってみる(2)

概要

こんにちは、テクニカルサポートの牛山です。
今回は、前回に引き続き「Chef Automate」に関する記事の第2回目となります。

前置き

前回、第1回目の記事では「Chef Automateサーバを作成し、スターターキットおよびChef Automateダッシュボードの認証情報をダウンロードする」ところまで解説しました。
※ AWS OPSWORKS FOR CHEF AUTOMATEを触ってみる(1)

今回は実際に、Starter Kitの中身を見ていき、建てたサーバに対してChef開発キットをインストールします。

手順

Starter Kitの中身を確認

前回、第1回目でダウンロードしたStarter Kitのフォルダー構成は下記の通りとなっています。

フォルダー直下にある「README.md」ファイルには、Starter Kitの説明が書かれており、opsworks-webserverクックブックを用いてnginxベースの静的なhtmlウェブサイトをプロビジョニングするチュートリアル形式となっています。

Chef knifeユーティリティを使用してChef Automateサーバを管理をおこなっていくので「Chef DK」と呼ばれる開発キット(サーバを管理するコマンドラインツール)をダウンロードおよびインストール作業をおこないます。

myfirstautomate-lzb7t7mbv6e3fcct
├─ .chef
│   ├─ ca_certs
│   │   └─ opsworks-cm-ca-2016-root.pem
│   │
│   ├─ knife.rb
│   └─ private.pem
│
├─ cookbooks
│   └─ README.md
│
├─ environments
│   └─ README.md
│
├─ site-cookbooks
│   └─ opsworks-webserver
│       ├─ attributes
│       │   └─ default.rb
│       │
│       ├─ files
│       │   └─ default
│       │       └─ teaser_page
│       │           ├─ images
│       │           │   ├─ chef-logo.svg
│       │           │   ├─ logo.png
│       │           │   ├─ opsworks-logo-with-servicename.svg
│       │           │   ├─ opsworks-logo.svg
│       │           │   └─ sticker.png
│       │           │
│       │           ├─ styles
│       │           │   └─ styles.css
│       │           │
│       │           └─ widgets.js
│       │
│       ├─ recipes
│       │   └─ default.rb
│       │
│       ├─ templates
│       │   └─ default
│       │       ├─ opsworks-demo.erb
│       │       └─ opsworks-index.html.erb
│       │
│       ├─ Berksfile
│       ├─ README.md
│       ├─ chefignore
│       └─ metadata.rb
│
├─ Policyfile.rb
├─ README.md
├─ chefignore
├─ userdata.ps1
└─ userdata.sh

※ generated by FILE TREE MARKDOWN

Chef Automateサーバへアクセス

設定を行ないたいので「TeraTerm」を用いてサーバに接続します。
筆者の環境では下記のようになっていました。

接続先IP ユーザ名 パスワード 秘密鍵名
54.150.41.202 ec2-user なし my_chef_automate_key.pem

※Amazon Linux2またはAmazon Linux AMIの場合は、ユーザー名はec2-userです。
 Amazon Linuxインスタンスでユーザーアカウントを管理する

秘密鍵は、前回第1回目「サーバーのEC2インスタンスの資格情報とサーバーのエンドポイントを設定」項目箇所で設定した秘密鍵をしていするようにします。

接続先IPの確認は、画面上部、サービスプルダウンメニューから検索欄に「EC2」と入力し、「インスタンス」タブから「インスタンス」を選択し対象のサーバを選択後、画面下部、「説明」タブ項目にある「Elastic IP
」箇所で確認できます。
※すでにインスタンスが複数あり対象サーバで前回、「tag」を設定している場合、設定したtag名で絞ることが可能です。

無事に接続できると下記画面のようになると思いますので「sudo su -」コマンドで管理者に昇格してください。

   _ \   __|   \  |
  (   | (     |\/ |
 \___/ \___| _|  _|

This server is managed by AWS OpsWorks for Chef Automate (v0.8.3)

OS accounts, modifications, package installations or other
customizations made to this server may be removed during
maintenance.

※OSは「Amazon Linux 2」となります。
 Amazon Linux 2について

Chef DKのダウンロードリンク入手

ChefDKダウンロードページにアクセスし、Amazon Linux 2自体がRedhat系をベースとしたOSになっていますのでページ内にある「Red Hat Enterprise Linux/CentOS 7」項目の「Download」と記載されている項目をクリックするとメールアドレス等の情報を入力します。

入力後、上記画像内の「Download」ボタンを押すとダウンロードが始まりますが「Linux」OS上でダウンロードしたいのでダウンロード中の項目を選択しキャンセルしてください。

Linux上でダウンロードするために、「Download not starting?」箇所の「Download Chef Chef directly」項目がリンクになっていますのでこの項目を右クリックし「リンクのアドレスをコピー」を選択します。
※コピーしたリンクはテキストエディター等にメモっておいてください。

Chef DKのダウンロードおよびインストール

先ほど、Chef Automateサーバにアクセスしたサーバに対して下記コマンドを入力しコマンドラインツールのダウンロード・インストールをおこなっていきます。

「opsworks-cm」、「chef-server-core」はあらかじめインストールされているようです。
無事にインストールが完了すると、「Complete!」と出力されます。

chef verify」コマンドを打ち込んだ後に「Do you accept the 3 product licenses (yes/no)?」ときかれますので「yes」と打ち込んでToolのインストールをおこなってくださ。

[root@{opsworksサーバ側} ~]# whoami
root

[root@{opsworksサーバ側} ~]# wget https://packages.chef.io/files/stable/chefdk/{opsworksサーバ側}/el/7/chefdk-{opsworksサーバ側}.{opsworksサーバ側}-{opsworksサーバ側}.el7.{opsworksサーバ側}_{opsworksサーバ側}.rpm

[root@{opsworksサーバ側} ~]# du -sh chefdk-{opsworksサーバ側}-{opsworksサーバ側}.el7.{opsworksサーバ側}_{opsworksサーバ側}.rpm
84M     chefdk-{opsworksサーバ側}-{opsworksサーバ側}.el7.{opsworksサーバ側}_{opsworksサーバ側}.rpm

[root@{opsworksサーバ側} ~]# yum install ./chefdk-XXX.el7.XXX.rpm
・
・
・
Installed:
  chefdk.XXX 0:XXX.el7

Complete!

[root@{opsworksサーバ側} ~]# rpm -qa | grep chef
opsworks-cm-chef-server-XXX.noarch
chef-server-core-XXX-X.el7.XXX
chefdk-XXX.el7.XXX

[root@{opsworksサーバ側} ~]# chef verify
+---------------------------------------------+
            Chef License Acceptance

Before you can continue, 3 product licenses
must be accepted. View the license at
https://www.chef.io/end-user-license-agreement/

Licenses that need accepting:
  * Chef Development Kit
  * Chef Infra Client
  * Chef InSpec

Do you accept the 3 product licenses (yes/no)?

> yes

Persisting 3 product licenses...
? 3 product licenses persisted.

パス設定

インストールが完了したら「ruby」に対してchef開発キット版のrubyをデフォルトrubyと設定するため環境変数を設定します。
chef開発キットのrubyバージョンは「ruby 2.6.6」とデフォルトのものより新しいバージョンが適用されていることがわかります。

「bash_profile」へ環境変数を設定していますので管理者「root」に設定が適用されることに注意しておく必要があります。
他のユーザで管理をしたい場合、bash_profileを各々のホームディレクトリ配下に追加する等が考えられます。

[root@{opsworksサーバ側} ~]# cp -p ~/.bash_profile ~/.bash_profile_20200823
[root@{opsworksサーバ側} ~]# echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
[root@{opsworksサーバ側} ~]# diff .bash_profile_20200823 .bash_profile
12a13
> eval "$(chef shell-init bash)"

[root@{opsworksサーバ側} ~]# which ruby
/usr/bin/ruby

[root@{opsworksサーバ側} ~]# ruby --version
ruby 2.4.7p357 (2019-08-28 revision 67796) [XXX-linux]

[root@{opsworksサーバ側} ~]# source ~/.bash_profile
[root@{opsworksサーバ側} ~]# which ruby
/opt/chefdk/embedded/bin/ruby

[root@{opsworksサーバ側} ~]# ruby --version
ruby 2.6.6p146 (2020-03-31 revision 67876) [XXX-linux]

cookbookのダウンロード

Berkshelf(chefやcookbookその他依存関係を解決しインストールコマンド)を用いて設定内容が書かれた「レシピ」を定義した「cookbook」をダウンロード・インストールします。

その為に前回、ダウンロードしたStarter Kitをサーバに「WinSCP」等を使いアップロードします。
詳しいアップロードの仕方は WinSCPでAWS(EC2)に接続する方法 を参照してください。

無事にアップロードできると「/home/ec2-user/myfirstautomate_starter_kit.zip」が存在すると思いますので「unzip」コマンドで解凍します。
※「myfirstautomate」の部分はサーバ作成時に決めた名前で変動します。

「unzip /home/ec2-user/myfirstautomate_starter_kit.zip -d ~/」でディレクトリを指定して解凍できます。
ここでは、現在の管理者になっていますので「/root」配下に展開されます。

Berksfileに変更を下記の様にします。

cd ~/myfirstautomate-lzb7t7mbv6e3fcct/site-cookbooks/opsworks-webserver/

[root@{opsworksサーバ側} opsworks-webserver]# vi ./Berksfile
cookbook "chef-client"
cookbook "apache2"

[root@{opsworksサーバ側} opsworks-webserver]# cat ./Berksfile
source "https://supermarket.chef.io"
cookbook "chef-client"
cookbook "apache2"
metadata

⇒追加するのは「metadata」の上側となります。

指定したcookbookのインストール

実際にapache2、chef-clientと依存関係を含めたものがインストールされることを確認できます。

[root@{opsworksサーバ側} opsworks-webserver]# berks install
Resolving cookbook dependencies...
Fetching 'opsworks-webserver' from source at .
Fetching cookbook index from https://supermarket.chef.io...
Installing apache2 (8.3.0)
Installing build-essential (8.2.1)
Installing chef-client (12.1.0)
Installing cron (6.3.1)
Installing logrotate (2.2.3)
Installing mingw (2.1.1)
Installing nginx (9.0.0)
Installing ohai (5.3.0)
Using opsworks-webserver (0.6.1) from source at .
Installing seven_zip (3.1.2)
Installing windows (7.0.0)
Installing yum-epel (3.3.0)

chefサーバに取得したcookbookのアップロード

先ほど取得したcookbookをchef automateサーバに対してアップロードする必要がありますので下記コマンドで実施します。
その際に、chef severのSSL証明書が必要になるので指定します。

[root@{opsworksサーバ側} opsworks-webserver]# SSL_CERT_FILE='/root/myfirstautomate-lzb7t7mbv6e3fcct/.chef/ca_certs/opsworks-cm-ca-2016-root.pem' berks up
load
Uploaded apache2 (8.3.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded cron (6.3.1) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded logrotate (2.2.3) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded chef-client (12.1.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded windows (7.0.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded seven_zip (3.1.2) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded mingw (2.1.1) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded build-essential (8.2.1) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded ohai (5.3.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded yum-epel (3.3.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded nginx (9.0.0) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'
Uploaded opsworks-webserver (0.6.1) to: 'https://myfirstautomate-lzb7t7mbv6e3fcct.ap-northeast-1.opsworks-cm.io/organizations/default'

アップロードが完了した後にchef automateサーバで現在使用可能なcookbookのリストを下記コマンドで確認することが可能です。
これでChef Automateサーバーより管理するノードを追加する準備が完了となります。

[root@{opsworksサーバ側} opsworks-webserver]# knife cookbook list
apache2              8.3.0
build-essential      8.2.1
chef-client          12.1.0
cron                 6.3.1
logrotate            2.2.3
mingw                2.1.1
nginx                9.0.0
ohai                 5.3.0
opsworks-webserver   0.6.1
seven_zip            3.1.2
windows              7.0.0
yum-epel             3.3.0

管理するノードを追加する

ここでは管理するノードを追加するために追加するインスタンスをもう1個建てます。
建てるサーバに関して後々、困らないように秘密鍵をchef automateサーバと同様のものとし、セキュリティグループでssh接続を制限している場合には、chef automateサーバのグローバルIPを許可する設定とするようにします。
※念の為、https(443), http(80)も空けて置く方が安心かもしれません。
 セキュリティグループ等の設定方法については割愛します。
 ノードに追加するサーバはOpsWorksの方から建のではなくEC2の方から建てる方法となります。


クライアント先に対してレシピを指定せずchef automateサーバのノードに追加する場合。

[root@{opsworksサーバ側} opsworks-webserver]# knife bootstrap {追加で建てたEC2サーバのグローバルIP} -N centos7TestNode -x centos --sudo -i /home/ec2-user/my_chef_automate_key.pem

クライアント先に対してレシピを指定してchef automateサーバのノードに追加を行う場合。

[root@{opsworksサーバ側} knife bootstrap {追加で建てたEC2サーバのグローバルIP} -N centos7TestNode -x centos --sudo --run-list "recipe[opsworks-webserver]" -i /home/ec2-user/my_chef_automate_key.pem

後者の方法で試しましたがnginxに関連するエラーで通らないので前者のコマンドで管理サーバに追加を行っていくと、「Running handlers complete」、「Chef Infra Client finished」が出力され無事にノードの追加をおこなうことができました。

追加されたノードはknife node listコマンドで確認することが可能になっています。


-x/--winrm-user: This flag is deprecated. Use -U/--connection-user instead.
Connecting to {追加で建てたEC2サーバのグローバルIP} using ssh
The authenticity of host '{追加で建てたEC2サーバのグローバルIP} ()' can't be established.
fingerprint is SHA256:RewZcMf6zqNCg7zoA8NIEUJJgfw66xp5njT0Fpv2ScE.

Are you sure you want to continue connecting
? (Y/N) y
Connecting to {追加で建てたEC2サーバのグローバルIP} using ssh
Creating new client for centos7TestNode
Creating new node for centos7TestNode
Bootstrapping {追加で建てたEC2サーバのグローバルIP}
・
・
・
Running handlers:
Running handlers complete
Chef Infra Client finished, 10/11 resources updated in 03 seconds

管理画面から追加されたノードの確認

[AWSマネジメントコンソール]→[OpsWorks]と検索欄にいれるとOpsWorksの画面に遷移するので自分の建てたサーバをクリックします。(今回は「MyFirstAutomate」となります。)

クリック後、下記画像のような画面に遷移するので「Open Chef Automate dashboard」のリンクをクリックします。

ログイン情報は、第1回目でダウンロードした「myfirstautomate_credentials.csv」のファイルに記載されていますので適宜確認してログインしてください。

[Infrastructure]タブ→[centos7TestNode](管理ノードに追加した際、指定したノード名 -Nオプションで指定しています。)をクリックすると下記画像のような画面になるので「Run Progress」箇所が100%になっていることが確認出来れば大丈夫です。

まとめ

今回は、管理ノードをchef automateサーバに追加するところまで解説しました。
これで、後は、chef automateサーバ側から管理ノードに対して、レシピを指定して実行するだけでapacheやさまざまな構成パターンをデプロイしていくことができるようになります。

まだまだ、わからない事が多いのでいったん、chef automateシリーズはお休みします。
次回は、違うサービスとかの解説をしていきたいと思っています。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA