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

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

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

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

私たちのツールベルト

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

Terraform

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

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

We’ll be using Terraform to create our infrastructure — that is, creating Droplets, Reserved IPs, Firewalls, Block Storage Volumes, and DigitalOcean Load Balancers — but we won’t be using it to configure those resources. そこで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スクリプトを使用してPython2.7をインストールします。 pip (Pythonパッケージマネージャー)、Git、 zip、テラフォーム、 terraform-inventory、およびAnsible。

:必要に応じて、このソフトウェアを手動でインストールすることもできます。 テラフォームと terraform-inventory あなたの中に配置する必要があるGoバイナリです $PATH. APTのようなシステムパッケージマネージャーの代わりに、Ansible with 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の違いがわかり始めます。