Terraform前書きTerraformは、組織的な方法でインフラストラクチャを構築および管理するためのツールです。他のプロバイダーが提供する多種多様なサービスに加えて、DigitalOceanドロップレットとDNSエントリを管理するために使用できます。使いやすいコマンドラインインターフェイスを介して制御され、デスクトップまたはリモートサーバーから実行できます。Terraformは、アプリケーション環境またはデータセンターを構成するコンポーネントを記述する構成ファイルを読み取ることで機能します。構成に基づいて、実行計画を生成します。実行計画には、目的の状態に到達するために行うことを記述します。その後、インフラストラクチャを構築するための計画が実行されます。構成の変更が発生すると、Terraformは増分計画を生成および実行して、既存のインフラストラクチャを新しく記述された状態に更新できます。このチュートリアルでは、Terraformを使用して、HAProxyサーバーによって負荷分散される2つのNginxサーバーで構成される単純なインフラストラクチャを作成する方法を示します(下の画像を参照)。これは、Terraformの使用を開始するのに役立ち、独自のニーズを満たすDigitalOceanベースのインフラストラクチャを管理および展開するためにどのように使用できるかについてのアイデアを提供します。[インフラストラクチャの例]このチュートリアルに従うために必要なものを見てみましょう。前提条件DigitalOceanアカウントこのチュートリアルはTerraformのDigitalOceanプロバイダーの使用に焦点を当てているため、有効なDigitalOceanアカウントが必要です。[こちらから登録してください]。APIトークンDigitalOceanコントロールパネルを使用して、パーソナルアクセストークンを生成します。[個人アクセストークンを生成する方法]のリンクを参照してください。Tokenをエクスポートします。APIに対する認証を行い、アカウントを制御します。Cloudに追加するDigitalOceanアカウントにパスワードなしのSSHキーをまだ追加していない場合は、https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-dropletsに従って追加してください[このチュートリアル]。+`にあると仮定して、次のコマンドを使用して公開鍵のMD5フィンガープリントを取得します。$2}'これにより、次のようなものが出力されます。md5:+`プレフィックスを除いたものを提供する必要があります(強調表示されたすべての単語を適切な値に置き換えます)。0.1.1を使用して書かれています。Terraformはインストールが非常に簡単で、デスクトップまたはリモートサーバーで実行できます。手順は次のとおりです。ダウンロードTerraformご使用のOSおよびアーキテクチャに適したパッケージをダウンロードします。地形の抽出ダウンロードしたパッケージを選択したディレクトリに解凍します。+`にダウンロードした場合は、次のコマンドを実行して抽出できます。+`ディレクトリにアーカイブ解除されます。+`をPATH環境変数に追加して、簡単にアクセスできるようにすることです。編集用にプロファイルを開きます。~/.bash_profileTerraformのパスをPATHに追加するには、ファイルの最後に次の行を追加します。PATH=$PATH:保存して終了。+`コマンドを見つけることができます。現在のセッションに新しいPATHをロードする場合は、次を入力します。.bash_profileTerraformのインストールを確認するTerraformが正しくインストールされていることを確認するために、実行してみましょう。ターミナルで、Terraformを実行します。terraformパスが適切に設定されている場合、次のような出力が表示されます。versionこれらは、Terraformが受け入れるコマンドです。ここでは簡単に説明しましたが、後でそれらの使用方法について説明します。Terraformがインストールされたので、インフラストラクチャを説明する構成の記述を始めましょう!構成ディレクトリを作成するTerraformでインフラストラクチャを構築する最初のステップは、特定のプロジェクトの構成ファイルを保存するディレクトリを作成することです。ディレクトリの名前は重要ではありませんが、例では「loadbalance」を使用します(名前は自由に変更できます)。+」で終わるテキストファイルです。それらは人間が読める形式であり、コメントをサポートしています。TerraformはJSON形式の構成ファイルもサポートしていますが、ここではそれらについて説明しません。Terraformは、作業ディレクトリ内のすべての構成ファイルを宣言的な方法で読み取るため、リソースと変数の定義の順序は重要ではありません。インフラストラクチャ全体が単一の構成ファイルに存在することもありますが、このチュートリアルではリソースごとに構成ファイルを分離します。現在のディレクトリを新しく作成したディレクトリに変更します。cdこれからは、作業ディレクトリが先ほど変更したディレクトリであると想定します。新しいターミナルセッションを開始する場合は、Terraform構成を含むディレクトリに必ず変更してください。コントロールパネルまたはhttps://github.com/pearkes/tugboat[Tugboat]などの別のAPIツールを使用してください)。Terraformが何をしようとしているかを確認できるように、stdoutへのロギングを有効にすることもできます。それには、次のコマンドを実行します。それでは、Terraform構成の作成に進みましょう。プロバイダー構成の作成Terraformは、同梱の「プロバイダー」を通じてさまざまなサービスプロバイダーをサポートします。APIと対話してインフラストラクチャを構築するために使用するDigitalOceanプロバイダーに興味があります。DigitalOceanプロバイダーを使用するための最初のステップは、適切な資格情報変数を使用してプロバイダーを構成することです。+`というファイルを作成します。provider.tfファイルに次の行を追加します。"${var.do_token}"}保存して終了。最初の4行の内訳は次のとおりです。Token変数「pub_key」:公開キーの場所。したがって、新しいドロップレットにインストールできます。変数「pvt_key」:秘密鍵の場所。Terraformは新しいドロップレットに接続できます変数「ssh_fingerprint」:SSHキーのフィンガープリント次の行は、_do_token_変数に「トークン」を割り当てることにより、DigitalOceanアカウントの資格情報を指定します。実行時に、これらの変数の値をTerraformに渡します。Provider]にあります。DigitalOceanリソース各プロバイダーには独自の仕様があり、通常はそれぞれのサービスプロバイダーのAPIにマップされます。DigitalOceanプロバイダーの場合、3種類のリソースを定義できます。*:DNSレコードNginxサーバーを実行するドロップレットを作成することから始めましょう。+`という新しいTerraform構成ファイルを作成します。www-1.tf以下の行を挿入して、ドロップレットリソースを定義します。]上記の構成では、最初の行は「www-1」という名前の_digitalocean_droplet_リソースを定義しています。残りの行では、液滴の属性を指定します。APIからアクセスできます。その他はすべて自明であるため、各行については説明しません。Terraformは、パブリックIPアドレスやプライベートIPアドレスなど、ドロップレットに関するさまざまな情報を収集します。これらの情報は、構成内の他のリソースで使用できます。Specification]。ファイルの最後に次の行を挿入します。}これらの行は、SSH経由で何かをプロビジョニングしたい場合にTerraformがサーバーに接続する方法を説明しています(秘密鍵変数の使用に注意してください)。接続が設定されたので、「remote-exec」プロビジョニングツールを設定できます。remote-execプロビジョニングツールを使用して、Nginxをインストールします。それを行うには、構成に次の行を追加します。_inline_配列の文字列は、_gin_をインストールするために_root_が実行するコマンドであることに注意してください。Terraformを実行してNginxサーバーを作成する現在、Terraform構成は単一のNginxサーバーを記述しています。テストしてみましょう。プロジェクトのTerraformを初期化します。これにより、構成ファイルが読み取られ、プロバイダーのプラグインがインストールされます。init次の出力が表示されます。実行計画を参照してください)。以下にリストされているすべての変数の値を指定する必要があります。"ssh_fingerprint="すべての変数が正しく設定されている場合、次の行を含む複数行の出力が表示されます。+`の行は、Terraformが「www-1」と呼ばれる新しいドロップレットリソースを作成し、その詳細がそれに続くことを意味します。それがまさに私たちが望んでいることなので、計画を実行しましょう。+`コマンドを実行して、最新計画を実行します。繰り返しますが、以下の変数のすべての値を指定します。"ssh_fingerprint="次の行を含む出力が表示されるはずです(簡潔にするために省略されています)。+」という新しいドロップレットを作成し、その上にNginxをインストールしました。新しいDropletのパブリックIPアドレスにアクセスすると、Nginxのようこそ画面が表示されます。2番目のNginxサーバーの説明Nginxサーバーについて説明したので、2つ目のサーバーを追加するのは非常に簡単です。元の設定ファイルをコピーして、dropletリソースの名前(およびホスト名)を置き換えてみましょう。」に置き換えて(2つあり)、新しいファイルを作成します。+`コマンドは次のとおりです。+`を再度実行すると、それぞれ新しい計画が表示または実行されます。TerraformがNginxのドロップレットをもう1つ作成することは既にわかっているので、後で使用するために保存します。ここでHAProxyドロップレットを設定しましょう。+`という新しいTerraform構成ファイルを作成します。haproxy-www.tf次の行を挿入して、新しい液滴を説明します。最初の部分は、「haproxy-www」という名前が異なることを除いて、Nginxドロップレットの説明と同じです。]次の接続情報を挿入します(Nginxドロップレットと同じ)。}接続が設定されたので、「remote-exec」プロビジョニングツールを設定できます。remote-execプロビジョニングツールを使用して、HAProxyをインストールおよび構成します。それを行うには、構成に次の行を追加します。繰り返しますが、_inline_配列の文字列は、HAProxyをインストールおよび構成するためにrootが実行するコマンドです。file]がダウンロードされます。+`コマンドは、Terraform変数(上記の赤で強調表示)を使用して、HAProxy構成ファイル内の特定の文字列を各ドロップレットの適切なIPアドレスに置き換えます。プロビジョニングされます。最後に、構成変更をロードするためにHAProxyが再起動されます。実用的なケースでは、Terraformシステムに独自の_haproxy.cfg_ファイルがあり、「file」プロビジョニング機能を使用してサーバーにコピーできます。これでHAProxyサーバーについて説明しましたが、Terraformを実行してビルドする必要があります。Terraformを実行してHAProxyサーバーを作成する現在、Terraform構成には、2つのNginxサーバーとHAProxyサーバーが記述されています。+`コマンドを再度実行します。"ssh_fingerprint="次の行を含む複数行の出力が表示されます。digitalocean_droplet.www-2...これは、_www-1_ドロップレットがすでに存在し、Terraformが_haproxy-www_および_www-2_ドロップレットを作成することを意味します。+`を実行して、残りのコンポーネントをビルドしましょう。"ssh_fingerprint="次の行を含む出力が表示されるはずです(簡潔にするために省略されています)。destroyed....この時点で、Terraformは新しいNginxサーバーとHAProxyサーバーを作成しました。haproxy-wwwのパブリックIPアドレスにアクセスすると、Nginxのようこそ画面が表示されます(HAProxyは2つのNginxサーバーの負荷を分散しているため)。*セットアップは完了です!*チュートリアルの残りの部分には、DNSドメインの構成に関する情報とTerraformでのリソースの記録、および他のTerraformコマンドの使用方法に関する情報が含まれています。前述のように、TerraformはDNSドメインを作成し、ドメインを記録することもできます。+`を新しく作成したHAProxyサーバーに向けたい場合、そのためのTerraform構成を作成できます。DNSに既に存在する他のレコードを使用しないでください)DNSを記述する新しいファイルを作成します。vi次のドメインリソースを挿入します。"${digitalocean_droplet.haproxy-www.ipv4_address}"}それから、「。example.com」を「example.com」にポイントするCNAMEレコードを追加しましょう。"@"}保存して終了。その他のTerraformコマンドTerraformには、これまで説明しなかった他のコマンドがいくつかあるため、ここではそれらのほとんどについて説明します。状態を表示Terraformは、プランを実行するたびに状態ファイルを更新するか、状態を「更新」します。Terraformの外部でインフラストラクチャを変更すると、状態ファイルが古くなることに注意してください。環境の現在の状態を表示するには、次のコマンドを使用します。terraform.tfstate状態を更新リソースがTerraformの外部で変更された場合、状態ファイルを更新して最新の状態にすることができます。このコマンドは、プロバイダーから更新されたリソース情報を取得します。"ssh_fingerprint="インフラストラクチャを破壊する生産環境では一般的に使用されませんが、Terraformは作成したインフラストラクチャを破壊することもあります。これは主に、複数回構築および破棄される開発環境で役立ちます。これは2段階のプロセスであり、以下で説明します。インフラストラクチャを破壊する実行計画を作成します。"ssh_fingerprint="Terraformは、インフラストラクチャ内のリソースを削除することを示す、赤でマークされ、マイナス記号が前に付いたリソースを含むプランを出力します。terraform.tfplan破壊計画に示されているように、Terraformはリソースを破壊します。結論Terraformがどのように機能するかを理解したので、便利なサーバーインフラストラクチャを記述する構成ファイルを作成してください。サンプルのセットアップは単純ですが、サーバーの展開を自動化することがいかに簡単かを示しています。PuppetやChefなどの構成管理ツールを既に使用している場合は、Terraformのプロビジョナーでそれらを呼び出して、作成プロセスの一部としてサーバーを構成できます。Terraformにはさらに多くの機能があり、他のプロバイダーと連携できます。Documentation]をチェックして、Terraformを使用して独自のインフラストラクチャを改善する方法の詳細を確認してください。