ナビゲーターガイド:初期環境設定

[。注意]##

Note:これは、DigitalOcean Solutions Engineersが提供するナビゲーターガイドブックの内容の初期リリースバージョンです。 この本の目標は、ビジネス顧客がインフラストラクチャのニーズを計画し、その過程で実例を提供し、技術的なニュアンスと、ある決定を他の決定より良くする「理由」を含めることです。

この本と付随するコードは、GitHubリポジトリで公開されます。 これは初期リリースであるため、本はまだ完成しておらず、リポジトリはまだ公開されていませんが、しばらくお待ちください!

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

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

ツールベルト

主にTerraformAnsibleterraform-inventory、およびGitを使用します。

テラフォーム

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

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

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

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

アンシブル

Ansibleconfiguration managementツールであり、システムの整合性を長期にわたって維持する方法で、システムへの変更を体系的に処理できます。 Ansibleのモジュールの標準ライブラリは広範であり、そのアーキテクチャにより、独自のプラグインも作成できます。

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

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

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

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

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

テラインベントリ

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

Git

バージョン管理システムとしてGitを使用します。 特にGitについての深い知識は必要ありませんが、committing changes, tracking, and cloningを理解する必要があります。 TerraformおよびAnsibleファイルをバージョン管理できるため、TerraformモジュールまたはAnsibleロールのバージョンを指定することで、インフラストラクチャのさまざまなバージョンでテストを実行できます。

この本のリポジトリはGitHubでホストされていますが、GitHub、GitLabBitbucketなど、独自のデプロイメントに任意のGitホスティングサービスを使用できます。

オプションのツール

DigitalOcean CLIユーティリティdoctlは、APIを介してアカウントにすばやくアクセスし、リソース情報を作成または取得するのに役立つことがよくあります。 the project READMEdoctlを設定する手順と、そのofficial documentationに完全な使用法情報があります。

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

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

Note:別のオペレーティングシステム(ローカルコンピューターのmacOSなど)を使用する方が快適な場合は、Ansible’s system requirementsを満たしている限り、代わりにそれを実行できます。

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

ユーザーデータオプションを選択すると、テキストフィールドが開きます。 User dataは、ユーザーが作成時にドロップレットに提供できる任意のデータです。 ユーザーデータは、通常クラウドサーバーの最初の起動時にCloudInitによって消費され、ルートユーザーとしてタスクを実行したり、スクリプトを実行したりします。

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

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

ここから、Createをクリックします。 Droplet自体はすぐに起動して実行されますが、そのユーザーデータのコマンドは実行が完了するまで少し時間がかかります。 log into the Droplet/var/log/cloud-init-output.logを見て、そのステータスを確認できます。

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

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

公開鍵と秘密鍵のペアは/home/your_username/.ssh/で確認できます。

次は何ですか?

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