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

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

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

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

私たちのツールベルト

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

Terraform

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

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

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

Terraformについて詳しく知りたい場合は、次のリソースをお勧めします。

Ansible

Ansible は、構成管理ツールであり、システムの変更を長期にわたって整合性を維持する方法で体系的に処理できます。 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を表示したりします。 プレイブックは、簡単に共有するための役割としてパッケージにすることができます。 ロールのメインのパブリックリポジトリはAnsibleGalaxyです。 この本のコード例は、構成を適用するために複数の役割を利用しています。

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

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

terraform-在庫

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

ギット

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

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

オプションのツール

DigitalOceanCLIユーティリティdoctlは、APIを介してアカウントにすばやくアクセスし、リソース情報を作成または取得するのに役立つことがよくあります。 doctlのセットアップ手順は、プロジェクトのREADME にあり、完全な使用法情報は、公式ドキュメントにあります。

コントローラドロップレットの設定

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

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

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

次に、ドロップレットを作成します。 次のオプションを使用します::

  • 画像: Ubuntu18.04×64。
  • サイズ:1GBの標準液滴。
  • データセンターリージョン:お好みで。
  • 追加オプション:プライベートネットワーク、バックアップ、ユーザーデータ、および監視。
  • SSHキー:自分のものを選択します。

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

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

:必要に応じて、このソフトウェアを手動でインストールすることもできます。 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"]

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

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

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

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

次は何ですか?

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