これは本の最初の実践的な部分です。

最初に、DigitalOceanでインフラストラクチャの作成と管理を開始する際に、使用するツール、それらがどのように適合するか、そしてそれらがどのように有益であるかについて説明します。 その後、残りのツールを実行して使用するためのコントローラーとして使用する単一のドロップレットを設定します。

ツールベルト

主にhttps://www.terraform.io [Terraform]、https://www.ansible.com [Ansible]、https://github.com/adammck/terraform-inventory [`+ terraform- inventory + `]、およびhttps://git-scm.com [Git]。

テラフォーム

Terraformは、インフラストラクチャをコードとして簡単に記述することができるオープンソースのツールです。 これは、プログラムを作成している場合と同じ方法でリソースをバージョン管理できることを意味します。これにより、エラーが発生した場合に作業状態にロールバックできます。

Terraformは、人間とコンピューターが理解しやすいように設計された宣言構文(https://github.com/hashicorp/hcl[HCL])を使用します。 HCLでは、レビューのために変更を計画し、インフラストラクチャの依存関係を自動的に処理できます。

Terraformを使用してインフラストラクチャを_作成_します。つまり、ドロップレット、フローティングIP、ファイアウォール、ブロックストレージボリューム、およびDigitalOceanロードバランサーを作成しますが、これらのリソースを_構成_することはしません。 そこでAnsibleが登場します。

Terraformの詳細については、次のリソースをお勧めします。

アンシブル

Ansibleはhttps://www.digitalocean.com/community/tutorials/an-introduction-to-です構成管理[構成管理]ツール。これにより、システムの変更を体系的に処理し、長期にわたってその整合性を維持できます。 Ansibleのモジュールの標準ライブラリは広範であり、そのアーキテクチャにより、独自のプラグインも作成できます。

Ansible Playbookは、管理したい自動化を定義するYAMLファイルです。 Terraformと同様に、プレイブックをバージョン管理できます。 Terraformとは異なり、リソースの構成を変更しても、そのリソースを破壊および再作成する必要はありません。 Ansibleは、構成をインフラストラクチャにプッシュします。

AnsibleはSSH接続を使用するため、ターゲットノードにエージェントをインストールして使用する必要はありません。 ただし、それは、Ansibleが接続するエンドポイントを知る必要があることを意味します。これは通常、インベントリファイルで定義されます。 Terraformを使用して展開し、インフラストラクチャの状態をファイルに保持するため、terraform-inventoryを使用して、Ansibleのターゲットマシンのリストを動的にフィードします。

Ansible Playbookは、モジュールを呼び出して構成を変更したり、コマンドを実行したりします。 DigitalOceanを含む、人気のあるソフトウェアまたはクラウドベンダーを制御するためのAnsible用の多くの組み込みモジュールがあります。 コマンドラインで作業するとき、 `+ ansible-doc `コマンドはモジュールのオプションと詳細を確認する簡単な方法です。 例としては、モジュールをリストするための ` ansible-doc -l `や、ドキュメントを表示するために特定のモジュールを呼び出す ` ansible-doc digital_ocean +`があります。 プレイブックは、簡単に共有するための役割としてパッケージにすることができます。 ロールの主要な公開リポジトリはhttps://galaxy.ansible.com/home[Ansible Galaxy]です。 本書のコード例では、構成を適用するために複数の役割を利用しています。

Ansibleが状態を強制していないことは注目に値します。 プレイブックを実行すると、プレイブック内のコマンドのみが実行されます。 Ansibleによって管理されているサーバーに直接変更を加えると、意図しない結果が生じる可能性があります。

Ansibleの詳細については、いくつかのリソースをお勧めします。 Red HatはAnsibleプロジェクトを所有しており、トレーニングオプションを提供しています。 これには、無料の優れた紹介ビデオクラスと、より高度なクラスが含まれます。

テラインベントリ

`+ terraform-inventory `は、Terraformの状態ファイルからリソース情報を取得し、Playbookの実行時にAnsibleが特定のホストをターゲットに使用できる方法で出力する動的インベントリスクリプトです。 それよりも少し複雑になりますが、重要な点は、「 terraform-inventory +」によりTerraformとAnsibleを一緒に使用しやすくなることです。

Git

バージョン管理システムとしてGitを使用します。 Gitの詳細な知識は特に必要ありませんが、https://www.digitalocean.com/community/tutorial_series/introduction-to-git-installation-usage-and-branches [変更、追跡、クローニング]。 TerraformおよびAnsibleファイルをバージョン管理できるため、TerraformモジュールまたはAnsibleロールのバージョンを指定することで、インフラストラクチャのさまざまなバージョンでテストを実行できます。

この本のリポジトリはhttps://github.com [GitHub]でホストされていますが、GitHub、https://about.gitlab.com/ [GitLab]など、独自の展開にGitホスティングサービスを使用できます。 Bitbucket

オプションのツール

DigitalOcean CLIユーティリティ、「+ doctl 」は、多くの場合、リソース情報を作成または取得するためにAPIを介してアカウントにすばやくアクセスするのに役立ちます。 https://github.com/digitalocean/doctl[the README]で ` doctl +`を設定する手順と、https://www.digitalocean.com/community/tutorials/how-で完全な使用情報を見つけることができます。 doctl-the-official-digitalocean-command-line-client [公式ドキュメント]を使用します。

コントローラードロップレットのセットアップ

コントローラーマシンは、ツールの実行に使用するサーバーです。 Ubuntu 18.04 x64(Bionic Beaver)Dropletを使用します。これは、Dropletの作成中に必要なすべてのツールをインストールするように構成します。

_
:別のオペレーティングシステム(ローカルコンピューターのmacOSなど)を使用する方が快適な場合は、http://docs.ansible.com/ansible/latest/installation_guide/intro_installationを満たす限り、代わりに実行できます。 .html#control-machine-requirements [Ansibleのシステム要件]。
_

開始するには、次のものが必要です。

それでは、https://www.digitalocean.com/docs/droplets/how-to/create/ [ドロップレットを作成]に進みます。 次のオプションを使用します。

  • 画像: Ubuntu 18.04 x64。

  • サイズ: 1GB標準ドロップレット。

  • *データセンター地域:*選択。

  • *追加オプション:*プライベートネットワーキング、バックアップ、ユーザーデータ、および監視。

  • * SSHキー*:自分のものを選択します。

ユーザーデータオプションを選択すると、テキストフィールドが開きます。 https://www.digitalocean.com/docs/droplets/resources/metadata/ [ユーザーデータ]は、ユーザーが作成時にDropletに提供できる任意のデータです。 ユーザーデータは、通常クラウドサーバーの最初の起動時にCloudInitによって消費され、ルートユーザーとしてタスクを実行したり、スクリプトを実行したりします。

cloud-configスクリプトを使用して、Python 2.7、 + pip +(Pythonパッケージマネージャー)、Git、 + zip +、Terraform、 + terraform-inventory +、およびAnsibleをインストールします。

_
:必要に応じて、このソフトウェアを手動でインストールすることもできます。 Terraformと `+ terraform-inventory `はGoバイナリで、 ` $ PATH `内に配置する必要があります。 Ansibleは、APTのようなシステムパッケージマネージャーではなくPipでインストールすることをお勧めします。これは、最新の状態を保ち、 ` virtualenv +`内にインストールできるためです。
_

#cloud-config
# Source:  https://git.io/nav-guide-cloud-config

package_upgrade: true

packages:
 - python
 - python-pip
 - git
 - zip
 - jq

runcmd:
 - [curl, -o, /tmp/terraform.zip, "https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip"]
 - [unzip, -d, /usr/local/bin/, /tmp/terraform.zip]
 - [curl, -L, -o, /tmp/terraform-inventory.zip, "https://github.com/adammck/terraform-inventory/releases/download/v0.7-pre/terraform-inventory_v0.7-pre_linux_amd64.zip"]
 - [unzip, -d, /usr/local/bin/, /tmp/terraform-inventory.zip]
 - [pip, install, -U, pip, ansible]
 - [git, clone, "https://github.com/digtialocean/navigators-guide.git"]

ここから、*作成*をクリックします。 Droplet自体はすぐに起動して実行されますが、そのユーザーデータのコマンドは実行が完了するまで少し時間がかかります。 https://www.digitalocean.com/docs/droplets/how-to/connect-with-ssh/ [ドロップレットにログイン]で、 `+ / var / log / cloud-init-output.log +`を確認できます。ステータスを確認します。

最後の手順は、コントローラードロップレットのSSHキーを作成することです。 後でインフラストラクチャの各ノードに配置します。 サーバーにログインしたときにこのワンライナーを実行して、キーを作成し、Dropletのホスト名でコメントすることができます。

ssh-keygen -t rsa -C $(hostname -f)

`+ / home / your_username / .ssh / +`で公開鍵と秘密鍵のペアを見ることができます。

次は何ですか?

コントローラーのドロップレットがセットアップされます。つまり、ツールの使用を開始できます。 次の章では、これらのツールを使用して可用性の高いインフラストラクチャの作成を開始する方法を示します。 そうすることで、AnsibleとTerraformの違いがわかるようになります。