Terraform を使用すると、さまざまなクラウド リソースを簡単に管理できます。この記事では、それを使用してデジタル オーシャンで仮想マシン (別名、ドロップレット) を作成 (および破棄) する方法について説明します。

Terraform をインストールする

テラフォーム ダウンロード. これは、zip ファイルにラップされた単一の実行可能ファイルです。
ダウンロードしたら、unzip を使用して実行可能ファイルを抽出し、
簡単に実行できるように PATH 変数内の場所に移動します。 私にとってこれは:

$ unzip terraform_0.11.8_darwin_amd64.zip $ sudo mv テラフォーム /usr/local/bin/ 

次に、プログラムを実行できることを確認するために、バージョン番号を確認しました。

$ テラフォーム --バージョン テラフォーム v0.11.8 

Terraform 構成ファイルを準備する

do という名前の新しいディレクトリ (Digital Ocean と同様) を作成し、そこに do.tf というファイルを作成しました。
私が見る限り、ファイルの名前は問題ではありません。以下の内容を追加しました。 例/テラフォーム/do/do1.tf

プロバイダ「デジタルオーシャン」{ トークン = "..." } リソース「digitalocean_droplet」「ウェブ」{ 名前 = "tf-1" 画像 = "ubuntu-18-04-x64" 地域 = "nyc1" サイズ = "512MB" } 

3 つのドットの代わりに、トークンの値は、私が生成した Digital Ocean API トークンでした。 «name» はインスタンスの名前になります。それは何でもかまいません。
«image»、«region»、および «size» の可能な値は、curl を使用して Digital Ocean API 経由で取得できます。 ファイルを取得したら、Terraform を初期化する必要があります。Digital Ocean に必要なプラグインをダウンロードし、
説明を出力します。

$テラフォーム初期化 プロバイダ プラグインを初期化しています... - https://releases.hashicorp.com で利用可能なプロバイダー プラグインを確認しています... - プロバイダー "digitalocean" (0.1.3) のプラグインをダウンロードしています... 次のプロバイダーには、構成にバージョンの制約はありません。 そのため、最新バージョンがインストールされました。 重大な問題を含む可能性のある新しいメジャー バージョンへの自動アップグレードを防ぐには バージョン = "..." 制約を 構成内の対応するプロバイダー ブロックと、制約文字列 以下に提案します。 * provider.digitalocean: バージョン = "~> 0.1" Terraform が正常に初期化されました! これで、Terraform の使用を開始できます。「terraform plan」を実行してみてください インフラストラクチャに必要な変更。すべての Terraform コマンド 今すぐ動作するはずです。 Terraform のモジュールまたはバックエンド構成を設定または変更したことがある場合は、 このコマンドを再実行して、作業ディレクトリを再初期化します。忘れたらその他 コマンドはそれを検出し、必要に応じてそうするように通知します。 

次に、構成を「適用」します。 以下を実行すると、構成情報が表示され、承認を待ちます。

$テラフォーム適用 

これを実行すると、作業を進めるだけです。

$ terraform apply -auto-approve 

Digital Ocean インスタンスの作成には 30 ~ 40 秒かかります。最後に、Digital Ocean から、新しいDroplet にユーザー «root» として
ログインするためのワンタイム パスワードが記載された電子メールが送信されます。
新しいドロップレットがリストされていることも確認できます。 Terraform は、作成した構成の状態を格納する terraform.tfstate というファイルも作成します

ドロップレットを削除

ドロップレットを使用した後、ドロップレットを破棄したい場合があります。次のコマンドを使用して実行できます。

$テラフォーム破壊 

または、承認する前に変更を確認したくない場合は、これを選択します。

$ terraform destroy -auto-approve 

SSHキーでDigital Ocean Dropletを作成

電子メールで新しいインスタンスのパスワードを取得するのは不便で、少し安全ではありません。 ssh キー
をまだ持っていない場合はペアを作成し、[セキュリティ] タブで Digital Ocean にアップロードできます。
各 ssh キーには、 Digital Ocean API経由でのみ取得できる Digital Ocean の内部 ID があります。(私のは 5 桁の数字ですが、最近では 8 桁の数字を取得する人もいます。)
その ID を構成ファイルに追加できます (実際には、ID のリストを追加できます)。対応する公開鍵が » に追加されます 例/テラフォーム/do/do2.tf

プロバイダ「デジタルオーシャン」{ トークン = "..." } リソース「digitalocean_droplet」「ウェブ」{ 名前 = "tf-1" 画像 = "ubuntu-18-04-x64" 地域 = "nyc1" サイズ = "512MB" ssh_keys = [12345] } 

ドロップレットを作成します。

$ terraform apply -auto-approve 

ドロップレットのリストから IP アドレスを取得します

ssh [email protected] 

または、次のフラグを使用して、ssh の質問を回避します。

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=n [email protected] 

新しく作成されたドロップレットの IP を取得します

Web インターフェースから IP を取得することは依然として自動化を妨げているため、Terraform 構成ファイルにさらに小さな変更を加える必要があります。新しいインスタンスの IPv4 アドレスを含む出力属性を宣言します。 例/terraform/do/do3.tf

プロバイダ「デジタルオーシャン」{ トークン = "..." } リソース「digitalocean_droplet」「ウェブ」{ 名前 = "tf-1" 画像 = "ubuntu-18-04-x64" 地域 = "nyc1" サイズ = "512MB" ssh_keys = [12345] } 出力 "ip" { 値 = "${digitalocean_droplet.web.ipv4_address}" } 

これらの行を追加するときにドロップレットがすでに存在する場合は、実行する必要があります

$テラフォームリフレッシュ 

それはすでにIPアドレスを出力しますが、実行することもできます

Terraform 出力 IP 

これには、IP アドレスのみが含まれます。自動化されたスクリプトで使用する方がはるかに優れています。 この構成ファイルを使用して新しいドロップレットを作成すると、IP がデフォルトの出力に含まれます。 variable «digitalocean_token» {
description = «これは、マシンのセットアップに使用される Digitalocean API トークンです。»
}
変数 «digitalocean_region» {
説明 = «例: nyc1、nyc2、ams2、ams3、fra2»
デフォルト = «fra1»
}
変数 «digitalocean_dokku_size» {
説明 = «インスタンス サイズ: 512mb、1gb、2gb、4gb …»
デフォルト = «2gb»
}
変数 «digitalocean_volume_size» {
description = «永続データ用の永続ボリュームを添付します。ここでそのボリュームのサイズを指定できます»
default = «100»
} variable «digitalocean_dokku_domain_tld» {
description = <<EOF
この dokku インストールのメイン TLD のように: example.com
そのドメインのサブドメインは dokku とアプリに使用されます。
注: このドメインは、DIGITALOCEAN ドメインでセットアップする必要があります。
EOF
} variable «digitalocean_dokku_subdomain» {
description = <<EOF指定
したドメインのサブドメインを書き込みます: var.digitalocean_dokku_domain
これは dokku のインストールに使用され、そのドメインのサブドメインは dokku で実行されているアプリに使用されます。
たとえば、次のように記述します: ‘dokku-test.something’ は dokku server => ‘dokku-test.something.example.com’
EOFになります
} variable «initial_ssh_key» {
description = «初期セットアップ時にサーバーにインストールされる公開 SSH キー»
} # DigitalOcean プロバイダー
プロバイダーを構成する «digitalocean» {
token = «${var.digitalocean_token}»
} リソース «digitalocean_ssh_key» «pihvi» {
name = «Pihvi.io デプロイ キー»
public_key = «${var.initial_ssh_key}»
} # 永続データ
リソースのボリュームを追加 «digitalocean_volume» «dokku_persistent_data» {
region = «${var.digitalocean_region}»
name = «persistent-${replace(«${var.digitalocean_dokku_subdomain}.${var.digitalocean_dokku_domain_tld}»,» .»,»-«)}»
サイズ = «${var.digitalocean_volume_size}»
説明 = «${var.digitalocean_dokku_subdomain} の永続データ.${var.digitalocean_dokku_domain_tld}»
} # 新しい Dokku
Droplet リソースを作成します «digitalocean_droplet» «dokku» {
# dokku の推奨インストールは Ubuntu です
image = «ubuntu-16-04-x64» # これもマシン
名のホスト名と FQDN = «${var.digitalocean_dokku_subdomain}.${var.digitalocean_dokku_domain_tld}»
region = «${var.digitalocean_region}»
size = «${var.digitalocean_dokku_size}»
ssh_keys = [ «${digitalocean_ssh_key.pihvi.id}» ]
ipv6 = true # 永続ボリュームをアタッチする
volume_ids = [«${digitalocean_volume.dokku_persistent_data.id}»] user_data = <<EOF
#cloud-config
manage-resolv-conf: true
resolv_conf:
nameservers:
— ‘8.8.8.8’
— ‘8.8.4.4’
EOF
} # 安全なシステム アップデート用にフローティング IP を追加
リソース «digitalocean_floating_ip» «dokku» {
droplet_id = «${digitalocean_droplet.dokku.id}»
region = «${digitalocean_droplet.dokku.region}»
} # IPv4 を有効にする (フローティング IP アドレスを使用)
リソース «digitalocean_record» «dokku_ipv4» {
domain = «${var.digitalocean_dokku_domain_tld}»
type = «A»
name = «${var.digitalocean_dokku_subdomain}»
value = «${digitalocean_floating_ip. dokku.ip_address}»
} # IPv6 を有効にする (非フローティング IP アドレス)
# フローティング IPv6 を有効にするには、以下に投票してください: https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/10513887-floating-ip-ipv6
リソース «digitalocean_record» « dokku_ipv6» {
ドメイン = «${var.digitalocean_dokku_domain_tld}»
タイプ = «AAAA»
名前 = «${var.digitalocean_dokku_subdomain}»
値 = «${digitalocean_droplet.dokku.ipv6_address}»
} # すべてのサブドメイン
リソース «digitalocean_record» «dokku_subdomains»の
CNAME
を有効にする.${var.digitalocean_dokku_domain_tld}.» }

デジタルオーシャンのロゴ DigitalOcean は、最も使いやすいクラウド仮想マシン プロバイダーの 1 つです。迅速にプロビジョニングされたコンピューティング環境が必要な場合、DigitalOcean 仮想マシンは通常 60 秒以内に利用可能になります。多くの場合、ユーザー インターフェイス (UI) を使用する代わりに、自動化することをお勧めします。 Terraform は、DigitalOcean などのプロバイダーを使用して、DigitalOcen UI を使用せずにリソースをプロビジョニングできるようにするコード言語としてのインフラストラクチャです。この記事では、Terraform を使用して DigitalOcean ドロップレット (仮想マシン) をプロビジョニングする方法について説明します。

Terraform のインストール

Terraform は、Windows と Linux を問わず、多数のプラットフォームで利用できます。最も簡単な方法は、以下のリンクから実行可能ファイルをダウンロードし、実行可能ファイルをシステム パスに配置して、どこからでも参照できるようにすることです。 https://www.terraform.io/downloads.html

DigitalOcean から API キーを作成する

Terraform が DigitalOcean と通信するには、DigitalOcean プロバイダーで使用する API キーを生成する必要があります。次の手順では、特に Terraform で使用するための新しい API キーを作成する方法について概説します。他の API キーを使用することもできますが、必要に応じてアクセスを簡単に無効にするために、できる限りキーを再利用しないことをお勧めします。

  1. DigitalOcean コントロール パネルにログインします。
  2. API セクションに移動します。
  3. 「新しいトークンを生成」をクリックします。
  4. トークン名を入力し、トークンに読み取り権限と書き込み権限の両方を許可します。
  5. API キーは二度と表示されないのでコピーします。これを Terraform に使用します。

新しい個人用アクセス トークンを生成します。

入門

Terraform セットアップの最初のステップは、新しい構成を初期化することです。まず、Terraform 構成を格納するディレクトリを作成します。

mkdir digitalocean-terraform cd digitalocean-terraform

次に、digitalocean.tfvars以前に生成した API キーを保持するために使用するファイルを作成する必要があります。これは、資格情報をハードコーディングしないためのベスト プラクティスです。推奨されるバージョン管理を使用する場合、ファイルまたは特定のファイルを無視.tfvarsして、これらの資格情報がバージョン管理履歴に保存されないようにすることができます。

touch digitalocean.tfvars

内にdigitalocean.tfvars、 という名前の単純な変数を作成しますapi_token。これは後で Terraform スクリプト内で使用されます。

api_token = 12345123213412425

ドロップレット リソース ファイルの作成

Terraform と DigitalOcean の構成がセットアップされたので、Terraform 構成ファイルを作成しましょう。ファイルdigitalocean.tfを作成し、以下の定型コードを使用して開始します。構成でプロバイダーと資格情報を使用できるようにするには、そのデータを取得する場所を指定する必要があります。

variable "api_token" { default = "" } provider "digitalocean" { token = var.api_token }

スクリプトが構成されたので、terraform initコードを実行できます。これで、Terraform メタデータが作成され、プロバイダーがインストールされます。コマンド出力に、使用するためにダウンロードされているプロバイダーが表示されます。.tfvarsさらに、以前にファイルで指定された資格情報を使用するようにプロバイダーに指示しました。 terraform init コードを実行すると、Terraform メタデータが作成され、プロバイダーがインストールされます。

ドロップレット コマンドの入力

この場合、単純なドロップレット リソースをプロビジョニングします。使用するパラメーターがいくつかあります。データセンターで利用可能な最も安いプランを使用NYC1し、将来的にドロップレットをより柔軟にするいくつかのオプションを追加したいと考えています.

  • 液滴画像: ubuntu-18.04-x64
  • 領域: NYC1
  • サイズ: s1-vcpu1-1gb

基本属性ができたので、このドロップレットの Terraform 構成を作成しましょう。

resource "digitalocean_droplet" "web" { image = "ubuntu-18-04-x64" name = "test-web-vm" region = "nyc1" size = "s-1vcpu-1gb" monitoring = true ipv6 = true private_networking = true }

ここで追加する追加コマンドは、監視、ipv6、およびプライベート ネットワーク用です。監視とは、DigitalOcean クラウド コンソール内から CPU やメモリなどのメトリックを取得することを意味します。その後、これらのメトリックにアラートを設定できるため、将来的に非常に役立ちます. IPv6 は、ドロップレットが IPv6 からアクセスできることを意味し、ドロップレットの将来性を保証するのに役立ちます。最後に、プライベート ネットワーキングは、10.x.x.xドロップレットが他のドロップレットからアクセスできるアドレスを取得するが、パブリック インターネットからはアクセスできないことを意味します。 もう 1 つ非常に便利な機能があり、それはユーザー データです。Linux の場合、これにより、パッケージの更新など、VM のプロビジョニングで特定のコマンドを実行できます。この属性を追加することで、この権限を Terraform 構成に含めることができます。

resource "digitalocean_droplet" "web" { image = "ubuntu-18-04-x64" name = "test-web-vm" region = "nyc1" size = "s-1vcpu-1gb" monitoring = true ipv6 = true private_networking = true user_data = "#cloud-confignpackage_update: truenpackage_upgrade: true" }

で多くのことを開始する場合はuser_data、YAML ファイル内にデータを保存し、それをリソース宣言内に含めることができます。 file("user-data.yml")

ドロップレットのデプロイ

Terraform 構成の準備ができたので、次のコードを実行してドロップレットをデプロイしましょう。

terraform apply -var-file="digitalocean.tfvars


Deploy the droplet.
.tfstateまた、新しいファイルが作成されていることに気付くかもしれません。これにより、Terraform が認識している環境の現在の状態がキャプチャされます。このドロップレット構成を再度デプロイしようとしても、Terraform はドロップレットが作成されたことを既に認識しているため、デプロイしません。このファイルを削除すると、Terraform がリソースの存在を認識できなくなり、再作成が試行されます。

まとめ

この記事からわかるように、Terraform を使用して DigitalOcean でリソースを作成するのは、すばやく簡単です。DigitalOcean プロバイダーを使用してプロビジョニングできるリソースは他にもたくさんあります。 この構成をコードとして使用すると、Terraform を使用して DigitalOcean 内で環境全体を迅速かつ簡単にプロビジョニングできます。たとえば、まったく新しい開発環境が必要で、単純なデプロイ コマンドを使用して Terraform 構成で事前にマップしている場合は、すぐに使用できるまったく新しい開発環境を用意できます。 Terraform と DigitalOcean を組み合わせることで、インフラストラクチャを保護するだけでなく、バ​​ージョン管理を可能にするだけでなく、一貫性とセキュリティを強化する強力な組み合わせが可能になります。 次を読む

  • › イベント計画に Microsoft Excel テンプレートを使用する方法
  • › Instagramでフォロワーを削除する方法
  • › Windows 11 タスクバーにポップアップ ヒントを表示する準備をする
  • › AMD の新しい RX 7000 GPU は本当に良くて本当に安い
  • › すべてのデバイスで Google からサインアウトする方法
  • › 天文学者が地球に最も近いブラックホールを発見 (まだ遠い)


Leave a comment

Your email address will not be published. Required fields are marked *