地形における多重環境?いいえ心配、使用するワークスペース
7116 ワード
インフラストラクチャを管理したり、変更したり、削除したりするときは、terraformから始めるのは簡単です.だけで終わるファイルを作成します.必要なリソースの説明を含むtf.
たとえば、GCPクラウドプロバイダーで小さなインフラストラクチャを作成したいなら、ベースホスト. は、VPC です
ファイアウォール我々はちょうどいくつかを作成する必要があります.tfファイル:
これは、新しい設定のために実行する最初のコマンド、または指定されたGitリポジトリ内の既存の構成のチェックアウトを行った後です.
initコマンドは以下のようになります. Terraformプロバイダー/プラグインをダウンロードしてインストールする バックエンド(定義されている場合)を初期化する モジュール(定義されている場合)をダウンロードしてインストールする
terraform v 0から .11 +ではなく、計画を行うし、それを適用するあなたが対話的な使用にあるならば、現在、あなたはちょうどterraform適用を実行する必要があります.コマンドは、計画を作成し、ユーザーを促し、yesが書かれている場合は、terraformは、計画を適用し、すべての変更を行います. ニース、あなたはすでにあなたのインフラを作成することができますが、1つだけの環境で、単独で動作します.
会社やOSSプロジェクトでは、単独では動作しませんので、ローカルにTfStateを格納し、リモートでそれを格納するために「クラウド」で共有しておく必要があります.
情報やリマインダーの場合は、TTFフォームは、TorraFormを適用したときのインフラストラクチャのスナップショットです.デフォルトでは、tfstateは局所的にterraformに保存されます.tfstateファイル.しかし、私たちがチームで働くとき、リモートでTFTStateを保存しなければなりません.
我々は現在、バケツS 3にTFTSTATEを保存して、それを暗号化するためにバックエンドリソースを作成します.
バックエンド.tf :
tfstateファイルの前に作成したので、ローカル状態をリモート状態に変換する必要があります.
terraformワークスペース機能の前に、複数の環境で処理するために、ソリューションは環境/クラウドプロバイダーアカウントごとに1つのフォルダーを作成し、それを置くことでした.tfファイル.ソリューションは便利ではなく、重複して簡単にメンテナンスできます.tfファイル.
terraform v 0以降.10 +は、インフラストラクチャリソース/環境の複数の異なるセットを管理するために、我々はterraformワークスペースを使用することができます.
ワークスペースのための地形形式のCLIはいくつかのコマンドを提供します:
あなたが見たように、地形のワークスペースで、我々は簡単に頭痛なしでいくつかの/複数の環境を管理します.
読んでくれてありがとう.
たとえば、GCPクラウドプロバイダーで小さなインフラストラクチャを作成したいなら、
ファイアウォール我々はちょうどいくつかを作成する必要があります.tfファイル:
bastion-host.tf
vpc.tf
variables.tf
output.tf
main.tf
firewall.tf
ベースホスト.tf :resource "google_compute_instance" "mservice_bastion" {
name = "mservice-bastion"
machine_type = "n1-standard-1"
zone = var.gcp_zone
tags = ["ssh-mservice"]
allow_stopping_for_update = true
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
subnetwork = module.vpc.subnetwork
access_config {
// Ephemeral IP
}
}
metadata = {
service = "mservicebastion"
}
service_account {
scopes = [
"userinfo-email",
"compute-rw",
"storage-rw",
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/cloud-platform.read-only",
"https://www.googleapis.com/auth/cloudplatformprojects",
"https://www.googleapis.com/auth/cloudplatformprojects.readonly",
]
}
}
VPCtf :resource "google_compute_network" "tag_network" {
name = var.gcp_vpc_name
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "tag_subnetwork" {
name = var.gcp_vpc_subnet_name
ip_cidr_range = "10.1.0.0/16"
region = var.gcp_region
network = google_compute_network.tag_network.self_link
secondary_ip_range {
range_name = format("%s-pod-range", var.cluster_name)
ip_cidr_range = "10.2.0.0/20"
}
secondary_ip_range {
range_name = format("%s-svc-range", var.cluster_name)
ip_cidr_range = "192.168.0.0/24"
}
}
ファイアウォール.TFresource "google_compute_firewall" "mservice_allow_ssh" {
name = "mservice-allow-ssh"
network = module.vpc.network_name
direction = "INGRESS"
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["ssh-mservice"]
}
変数.TFvariable "gcp_project" {
type = string
default = "falkinton-0991"
}
variable "gcp_region" {
type = string
default = "us-central1"
}
variable "gcp_zone" {
type = string
default = "us-central1-a"
}
variable "gcp_network" {
type = string
default = "mservice-network"
}
variable "gcp_subnetwork" {
type = string
default = "mservice-subnetwork"
}
variable "cluster_name" {
type = string
default = "falkinton-test"
}
メイン.tf :provider "google" {
project = var.gcp_project
region = var.gcp_region
zone = var.gcp_zone
}
provider "google-beta" {
project = var.gcp_project
region = var.gcp_region
zone = var.gcp_zone
}
今、我々はterraform(最初の時間だけ)を初期化して、計画を生成して、それを適用する必要があります.$ terraform init
Initializing the backend...
Initializing provider plugins...
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
initコマンドは、含まれるワーキングディレクトリを初期化します.tf設定ファイル.これは、新しい設定のために実行する最初のコマンド、または指定されたGitリポジトリ内の既存の構成のチェックアウトを行った後です.
initコマンドは以下のようになります.
terraform v 0から
tfstateはリモートに保存する必要があります
会社やOSSプロジェクトでは、単独では動作しませんので、ローカルにTfStateを格納し、リモートでそれを格納するために「クラウド」で共有しておく必要があります.
情報やリマインダーの場合は、TTFフォームは、TorraFormを適用したときのインフラストラクチャのスナップショットです.デフォルトでは、tfstateは局所的にterraformに保存されます.tfstateファイル.しかし、私たちがチームで働くとき、リモートでTFTStateを保存しなければなりません.
我々は現在、バケツS 3にTFTSTATEを保存して、それを暗号化するためにバックエンドリソースを作成します.
バックエンド.tf :
terraform {
backend "gcs"{
bucket = "tagx"
prefix = "tf-tagx-state"
}
}
我々がTfstateを置くGCSバケット資源を作成するとき、我々はversioningを起動させました.エラーやコピーペーストではありません.ステートファイルのバージョン管理を有効にすることをお勧めします.GCPバケツは、Terraformがそれのためにバックエンドを持っているので、あなたがてこ入れすることができるその能力を持ちます.突然、あなたの状態ファイルが壊れたと想像してください.状態ファイルのバージョン管理のおかげで、古い状態を使用して呼吸することができます.tfstateファイルの前に作成したので、ローカル状態をリモート状態に変換する必要があります.
terraform state push
ワークスペース
terraformワークスペース機能の前に、複数の環境で処理するために、ソリューションは環境/クラウドプロバイダーアカウントごとに1つのフォルダーを作成し、それを置くことでした.tfファイル.ソリューションは便利ではなく、重複して簡単にメンテナンスできます.tfファイル.
terraform v 0以降.10 +は、インフラストラクチャリソース/環境の複数の異なるセットを管理するために、我々はterraformワークスペースを使用することができます.
ワークスペースのための地形形式のCLIはいくつかのコマンドを提供します:
$ terraform workspace list // The command will list all existing workspaces
$ terraform workspace new <workspace_name> // The command will create a workspace
$ terraform workspace select <workspace_name> // The command select a workspace
$ terraform workspace delete <workspace_name> // The command delete a workspace
CLIを使えば、次のようにワークスペースを簡単に作成、選択、リストできます.$ terraform workspace new dev
Created and switched to workspace 'dev'
$ terraform workspace new preprod
Created and switched to workspace 'preprod'
$ terraform workspace new prod
Created and switched to workspace 'prod'
「dev」ワークスペースを選択しますterraform workspace select dev
このワークスペースの設定を使用すると、terraform適用が正常に実行されると、tfstateはGCPバケットの良い環境フォルダに保存されます.env:/
dev/
state.tfstate
preprod/
state.tfstate
prod/
state.tfstate
完璧なので、環境ごとにtfstateを分離するのがベストプラクティスです.あなたが見たように、地形のワークスペースで、我々は簡単に頭痛なしでいくつかの/複数の環境を管理します.
読んでくれてありがとう.
Reference
この問題について(地形における多重環境?いいえ心配、使用するワークスペース), 我々は、より多くの情報をここで見つけました https://dev.to/gelopfalcon/multiple-environments-in-terraform-no-worries-use-workspaces-1004テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol