使用Terraform在GCE上构建实例之前需要安装并配置GCP

在开始时

曾经只使用Ansible,对于Terraform一无所知的人,会问Terraform是什么?我通过调查来回答这个问题并记录下所做的事情。
我在Mac和CentOS两个环境上运行Terraform,以确保它适用于终端和服务器。
然后,我实际使用Terraform在GCP上构建了一个虚拟机,以确认其运行情况。

记载的构成

以下是按照以下的构成所描述的。

    • Terraform とは?

個人的に Terraform とは?を調べた内容をまとめたもの

実施構成

今回実施する構成 (GCP, stateファイル保存場所など)

Terraform インストール

端末(MacOS)、サーバ(CentOS) の2種類のインストール方法を記載

GCP 向け環境設定

GCP 向けの設定、ステートファイル保存場所の作成

GCP での VM インスタンス構築試験

VM インスタンスを1台構築、変更、削除、ライフサイクルを実際に試した内容

“什么是Terraform?”

摘要

    • Infrastructure as Code (IaC) Tool

 

    • インフラストラクチャ定義ツール

[分類参照: Infrastructure as Code クラウドにおけるサーバ管理の原則とプラクティス O’Reilly Japan]

宣言的 (Declarative) 記載モデル
記述言語は HCL (HashiCorp Language. 独自言語)
リソースをコード(.tf)で定義してを自動化
ステータスはステートファイル(.tfstate)を Terraform が生成・維持して構成管理
開発は HashiCorp 社で、OSS として公開
Enterprise 版がある

Hashicorp による商用サポート
機能の追加

GUI, Workspace などチーム機能, CI/CD 機能, などなど

Sentinel (有償版のみ) があり、Policy as Code 機能の提供
Terraform Cloud という SaaS 版もある (5名までは無料)

様々なインフラに対応している

Terraform 的特点和组成

在HashiCorp日本的GitHub上发布的幻灯片链接非常易于理解。
https://docs.google.com/presentation/d/1Ovdee0FIrJ_h66B5DToQNYKWJ9XRbudS0RCk4d_x1Eg/edit?usp=sharing

与 Ansible 的不同之处

根据参考资料,Ansible是一种命令执行模型,擅长于管理服务器上操作系统之上的配置。根据分类,它被归类为服务器定义工具,与Terraform有所不同。

似乎有人将自信的层级分开使用 [参考:Infrastructure as Code 在云中服务器管理的原则和实践 O’Reilly Japan]

    • インフラストラクチャ定義ツール: Terraform

クラウドなどインフラ全体
高い水準でインフラストラクチャをプロビジョニング、構成/設定する

サーバー定義ツール: Ansible

サーバー自体の細部を扱う (OSより上の構成管理)
ソフトウェアパッケージ、ユーザーアカウントなど、さまざまなタイプの構成/設定が含まれる

如果用容器环境来比喻的话

以我的理解,容器环境大致上是这样的感觉,不过这边没有自动修复等功能(云端基础设施等),而且在镜像创建方面也有各种各样的差异,比如有Packer等工具。

    • Kubernetes ≒ Terraform

宣言モデル. 全体の定義をする

Dockerfile ≒ Ansible

命令実行モデル. 単体の構成管理をする

其他,基础设施定义工具

每个云供应商都推出了以下的配置工具。

クラウドベンダプロビジョニングツールAWSAWS CloudFormationGCPCloud Deployment ManagerAzureAzure Resource Manager

选择上述和Terraform之间的一个选项可能变得很困难。
如果想要使用Terraform不支持的功能,则最好选择各个云供应商提供的工具,否则选择Terraform可能更好。

根据下面的图像,就信息量而言,Terraform似乎更多一些。(截至2021年2月13日)
※ 资源管理器包括了其他意图的搜索趋势(添加Azure后结果下降太多,因此使用这个进行比较)。

スクリーンショット 2021-02-14 10.32.56.png

粗略总结(包含个人感受)

    • クラウドプロビジョニングには Terraform (インフラストラクチャ定義ツール)が便利そう

 

    • サーバ単体のミドルウェア以上は Ansible などで棲み分けで利用が良さそう

 

    Terraform 競合は各クラウドベンダが出しているツールで、特別な事情がなければ Terraform で良さそう

实施构成

这次我们以以下的结构来进行实施。

terraform (1).png
    • Terraform インストール環境

下記2種類

Local-PC(Mac)
Remote-Server (CentOS)

今回、CI-Server での構築はしない (実際 CI/CD 管理では、CIサーバで GitOps などを実施されるようです)

.tfファイル

外部リポジトリで管理する予定(記載範囲外)

ステートファイル(tfstate)

GCS (GoogleCloud Storage) に専用バケットを構築して保存・参照先にする

provider

各プロビジョニング先の provider が必要
今回は hashicorp/google を使用する (init時に自動でインストールされる)

安装 Terraform

执行Terraform及其所需工具的安装。

执行环境 (shí shī

MacBook Air (M1, 2020):假设用于执行terraform的移动设备
CentOS 8:假设用于服务器使用

在Mac上进行安装

如果已经安装了Homebrew和Google Cloud SDK,则只需执行”2. tfenv 安装”即可满足执行Terraform所需的安装内容。

    1. 安装Homebrew

 

    1. 安装tfenv

 

    安装Google Cloud SDK

1. 家制软件 安装

根据Homebrew页面的安装命令进行安装。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

※将要求输入一次密码。

安装完成后,会出现下面的画面,然后将其注册到 sh 的配置文件中。

echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> /Users/[username]/.zprofile
eval $(/opt/homebrew/bin/brew shellenv)

请您最后确认一下版本。

% brew --version
Homebrew 3.0.0
Homebrew/homebrew-core (git revision fdab0; last commit 2021-02-11)

2. 安装 tfenv

由于存在可以管理多个 Terraform 的 tfenv,因此请安装该工具。

brew install tfenv

可以使用 tfenv 来确认当前支持的 terraform 版本。

tfenv list-remote

截至2021年2月11日显示如下。

% tfenv list-remote
0.15.0-alpha20210210
0.15.0-alpha20210127
0.15.0-alpha20210107
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc1
0.14.0-beta2
0.14.0-beta1
0.14.0-alpha20201007
0.14.0-alpha20200923
0.14.0-alpha20200910
0.13.6
...

由于 alpha、beta 和 rc 已被移除,所以需要在此次安装中使用版本0.14.6来进行。

tfenv install 0.14.6

请按照指引选择在使用use命令安装的版本,然后出现下面类似的屏幕。

スクリーンショット 2021-02-11 11.50.57.png
tfenv use 0.14.6

可以确认已经安装并可使用 Terraform 的指定版本。

% terraform version
Terraform v0.14.6
VScode 支援

HashiCorp提供了适用于Terraform的扩展,可以使用。

スクリーンショット 2021-02-11 11.58.57.png

3. 安装Google Cloud SDK

由于本次的目标是在Google Cloud上进行操作,因此需要先安装Google Cloud SDK。

安装方法请参考官方网站并执行。
https://cloud.google.com/sdk/docs/downloads-interactive?hl=ja

为了在zsh中执行,我实际上是通过以下方式安装的。

cd ~
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-324.0.0-darwin-x86_64.tar.gz
tar zxvf google-cloud-sdk-324.0.0-darwin-x86_64.tar.gz
rm google-cloud-sdk-324.0.0-darwin-x86_64.tar.gz
./google-cloud-sdk/install.sh --rc-path ~/.zprofile -q
sed -i -e 's/bash.inc/zsh.inc/g' ~/.zprofile
source ~/.zprofile

进行初期设置。

gcloud init

在 CentOS 上安装

以下是安装Terraform所需的内容。
以下是通过Ansible安装角色的示例。

    1. 安装Terraform

 

    1. 安装Google Cloud SDK

 

    (2021.12.18更新)安装tfenv

1. 在 CentOS 上安装 Terraform。

参考搭配 Terraform 公式网站进行安装
https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/gcp-get-started#install-terraform

以下是ansible role的示例(在CentOS8上进行了验证)。

---
- name: install dnf repository centos8
  shell: "dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo"
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "8"

- name: install terraform centos8
  dnf:
    name: terraform
    state: latest
    enablerepo: "hashicorp"
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "8"

确认已成功安装terraform(版本是2021.02.12)。

% terraform --version
Terraform v0.14.6

2. 安装Google Cloud SDK

---
- name: install yum repository centos8
  yum_repository:
    name: google-cloud-sdk
    description: "Google Cloud SDK repo"
    baseurl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el8-x86_64
    enabled: no
    gpgcheck: yes
    repo_gpgcheck: yes
    gpgkey:
      - https://packages.cloud.google.com/yum/doc/yum-key.gpg
      - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "8"

- name: install google cloud sdk centos8
  dnf:
    name: google-cloud-sdk
    state: latest
    enablerepo: "google-cloud-sdk"
  become: true
  when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "8"

确认已成功安装gcloud(版本为2021.02.12时点)。

% gcloud --version
Google Cloud SDK 327.0.0
alpha 2021.02.05
beta 2021.02.05
bq 2.0.64
core 2021.02.05
gsutil 4.58

3. (2021年12月18日更新) 安装tfenv

以下是在ansible用户目录下安装ansible的tfenv install ansible命令例子。

- name: tfenv / clone tfenv for user
  git:
    repo: 'https://github.com/tfutils/tfenv.git'
    dest: "{{ ansible_user_dir }}/.tfenv"
    version: v2.2.2

- name: tfenv / bash_profile setting for user
  lineinfile:
    dest: "{{ ansible_user_dir }}/.bash_profile"
    line: 'export PATH=$HOME/.tfenv/bin:$PATH'
    backup: yes
  when:
    - '"bash" in ansible_env.SHELL'

- name: tfenv / zprofile setting for user
  lineinfile:
    dest: "{{ ansible_user_dir }}/.zprofile"
    line: 'export PATH=$HOME/.tfenv/bin:$PATH'
    backup: yes
  when:
    - '"zsh" in ansible_env.SHELL'

Google Cloud Platform(GCP)环境配置

准备和配置用于操作 GCP 的 Terraform

执行环境

以下是GCP环境的详细信息:
https://qiita.com/suzuyui/items/947867f52897417ee31b

项目和VPC已经创建完成。
本次将在服务项目中使用GCE构建1台虚拟机。
※本次操作与单独项目除了涉及子网记录方法与角色增加之外没有其他差异。

执行项目

按照下面的顺序进行实施

    1. 创建适用于Terraform的服务账号

 

    1. 创建并配置tfstate文件保存的GCS存储桶

 

    初始化Terraform

创建用于terraform的服务帐户。

创建一个用于操作GCP的Service Account,并将其配置给Terraform。

对于内容的制作,按照 Terraform 的教程内容进行(这是基于使用 GCP Web 控制台的设定)。

1.1. 请选择您在上一步创建的项目。

设置具有在gcloud中构建VM实例项目和其IAM权限的用户帐户。

gcloud config set account [PROJECT_USER_ACCOUNT]
gcloud config set project [PROJECT_ID]

如果您尚未登录,请先执行”gcloud auth login”。

1. 在“服务帐户”下,选择“新建服务帐户”。给它起一个你喜欢的名称。

创建适用于Terraform的服务账号

gcloud iam service-accounts create terraform --display-name "Terraform"

1.3. 分配 Editor 角色 / 对于角色,选择 “项目 -> Editor”。

给所创建的服务帐号授予编辑角色(保持参考目标不变,在每个环境中分配适当的角色)。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
  --member serviceAccount:terraform@[PROJECT_ID].iam.gserviceaccount.com \
  --role roles/editor

1.4 创建和下载Json键 / 将”键类型”保留为JSON。单击”创建”以创建键并将键文件保存到您的系统中。

生成服务账号的密钥(请参阅)。

gcloud iam service-accounts keys create terraform_serviceacoount_credential.json \
  --iam-account terraform@[PROJECT_ID].iam.gserviceaccount.com

在执行的文件夹中会生成一个名为terraform_serviceaccount_credential.json的文件。

如果正在使用共享虚拟私有云(VPC),还可以在共享 VPC 的一侧授予子网使用角色。

gcloud config set account [HOST_PROJECT_USER_ACCOUNT]
gcloud config set project [HOST_PROJECT_ID]
gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
  --member serviceAccount:terraform@[PROJECT_ID].iam.gserviceaccount.com \
  --role roles/compute.networkUser

1.5. 创建main.tf

在中国,只需要一种选项来改写以下内容:指定GCP的身份验证凭据(创建的服务帐户密钥)和要操作的项目。

provider "google" {
  credentials = file("terraform_serviceacoount_credential.json")

  project     = "[PROJECT_ID]"
}

以上是,terraform已经完成了对实际项目的指定和认证设置的配置。

在Google云存储(GCS)中创建并配置tfstate文件保存的存储桶。

为了能够共享使用状态文件(tfstate),创建一个用于保存在GCS中的存储桶并将其设置给Terraform。

鉴于上述URL中的“高度推荐”,建议在GCS存储桶上启用对象版本控制,
因此需要进行版本控制和生命周期设置。
参数是将存储类别设置为STANDARD,地区设置为us-west1,以符合免费配额(参考月度5G)。

    • [PROJECT-ID] : 対象プロジェクトのID

 

    [BUCKET_NAME] : 保存するバケット名。GCP全体でユニークな必要がある。
gsutil mb -p [PROJECT-ID] -c STANDARD -l us-west1 -b on gs://[BUCKET_NAME]/
gsutil versioning set on gs://[BUCKET_NAME]/
gsutil lifecycle set terraform-state-bucket_lifecycle.json gs://[BUCKET_NAME]/
{"rule": [{"action": {"type": "Delete"}, "condition": {"numNewerVersions": 5}}]}

指定上述创建的存储桶作为后端。

terraform {
  backend "gcs" {
    bucket  = "[BUCKET_NAME]"
    prefix  = "terraform/state"
  }
}

以上で、trraformの背後設定が完了しました。

3. 初始化 Terraform

执行Terraform初始化并进行必要插件的安装等操作

terraform init

在下面可以看到执行结果。可以确认已经安装了与GCP相关的Provider插件。

スクリーンショット 2021-02-11 13.30.36.png

经过上述步骤,已完成使用Terraform控制GCP的设置。

在GCP上进行VM实例构建试验

我们可以在GCP上构建一个VM实例,并验证其运行情况。

执行项目

按照下列顺序进行实施

    1. 虚拟机实例定义

 

    1. Terraform计划

 

    1. Terraform执行

 

    1. Terraform销毁

 

    生命周期

1. 虚拟机实例定义

创建一个用于构建一个虚拟机的资源定义文件。

暫且先不將檔案分開,而是將內容附加在 main.tf 中執行這次的測試。

resource "google_compute_instance" "vm_instance" {
  name         = "terraform-create-sv01"
  machine_type = "f1-micro"
  zone         = "us-west1-b"

  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
    }
  }
  network_interface {
    subnetwork = "projects/[HostProjectName]/regions/us-west1/subnetworks/private-subnet01"
    access_config {
    }
  }
}

请参考Terraform官方网站获取有关记录方法的详细信息。

    • 記載内容

name: VMインスタンス名
machine_type: マシンタイプ

https://cloud.google.com/compute/docs/machine-types

zone: VM作成ゾーン
boot_disk/initialize_params/image: イメージ名

https://cloud.google.com/compute/docs/images#gcloud

gcloud compute images listで一覧取得可能で、該当するイメージ名を指定する

network_interface/subnetwork: VMで設定するサブネット

ここでは共有VPCサブネットを指定するためprojectsから指定している
共有 VPC で利用許可された privete-subnet01 というサブネットを利用して作成する例となっている

2. 地球形态规划

你可以事先确认实际要进行哪些更改。
在计划中不会进行更改(干运行)。

terraform plan

执行结果如下所示,可以看到 VM 被以 + 号添加。

スクリーンショット 2021-02-14 14.17.12.png

如果在terraform plan过程中出现错误

如果出现类似以下的错误,请执行gcloud auth application-default login操作。

Error: Attempted to load application default credentials since neither `credentials` nor `access_token` was set in the provider block.  No credentials loaded. To use your gcloud credentials, run 'gcloud auth application-default login'.  Original error: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
gcloud auth application-default login

3. 应用 terraform

执行更改的应用
实际上创建了虚拟机

terraform apply

执行结果如下所示

スクリーンショット 2021-02-14 14.20.16.png

输入一个值:显示“と出る”后,输入“yes”。

スクリーンショット 2021-02-14 14.22.02.png
スクリーンショット 2021-02-11 13.55.58.png

在执行terraform apply时,观察到当前状态文件锁定中的情况。

运行 terraform apply 命令时查看后端桶,可以发现已创建了锁文件。

% gsutil ls gs://[BUCKET_NAME]/terraform/state/
gs://[BUCKET_NAME]/terraform/state/default.tflock
gs://[BUCKET_NAME]/terraform/state/default.tfstate
% gsutil ls gs://[BUCKET_NAME]/terraform/state/
gs://[BUCKET_NAME]/terraform/state/default.tfstate

改变

进行操作以更改资源并确认功能 (参考)。

在之前的文件中添加一行tags = [“web”, “dev”]

resource "google_compute_instance" "vm_instance" {
  name         = "terraform-create-sv01"
  machine_type = "f1-micro"
  zone         = "us-west1-b"

+ tags         = ["web", "dev"]
  #...

完成更改后,使用Terraform apply 来确认操作是否有效。

terraform apply

以下是示例输出。

スクリーンショット 2021-02-14 14.32.58.png

确认可以看到已追加的标签处为“+”。
确认后,请输入“yes”以应用并执行应用。

4. 取消Terraform配置

执行已创建资源的删除
实际上虚拟机会被删除

terraform destroy
スクリーンショット 2021-02-14 14.39.31.png
スクリーンショット 2021-02-14 14.42.55.png

則以上,該刪除也已經完成

5. 生命周期

5.1 默认行为

作为确认需要重新构建的操作,执行对虚拟机实例进行重命名。
在更改虚拟机名称(更改.tf文件中的name:)后,当前虚拟机将被删除并添加一个新名称的虚拟机。
(参考)

由于在前一阶段已进行删除,因此在执行terraform apply以构建VM实例的情况下,再执行以下操作。

resource "google_compute_instance" "vm_instance" {
-  name         = "terraform-create-sv01"
+  name         = "terraform-create-sv02"
  #...

在上述更改后进行terraform apply的结果如下:
-/+ destroy and then create replacement的含义是,在删除之后进行替换创建操作。

スクリーンショット 2021-02-14 14.50.55.png

在输入下述内容之后,可以看到terraform-create-sv01被销毁,然后terraform-create-sv02被创建的过程。

スクリーンショット 2021-02-14 14.55.25.png

如果想要改变上述的操作,需要执行lifecycle的描述。
lifecycle有以下三种类型,可以分别尝试一下。

    • lifecycle

create_before_destroy
prevent_destroy
ignore_changes

5.2 先创建后销毁

在创建新的可交换对象后,删除旧对象。
由于在一段时间内会出现重复存在的情况,因此需要理解资源,并确保不会出现冲突或重复等问题。
※参考(https://www.terraform.io/docs/language/meta-arguments/lifecycle.html#create_before_destroy)

本文中的范例如下:
重新更名,并追加了生命周期(将整个google_compute_instance部分再次列出)。

resource "google_compute_instance" "vm_instance" {
  name         = "terraform-create-sv01"
  machine_type = "f1-micro"
  zone         = "us-west1-b"

  tags         = ["web", "dev"]

  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
    }
  }
  network_interface {
    subnetwork = "projects/[HostProjectName]/regions/us-west1/subnetworks/private-subnet01"
    access_config {
    }
  }

  lifecycle {
    create_before_destroy = true
  }
}

经过应用上述的结果如下,
可以确认在创建替换并销毁的情况下和默认情况下输出有所改变。

スクリーンショット 2021-02-14 15.01.31.png

实际操作也是按照下列顺序进行的:开始于”创建中…”,完成后开始”销毁中…”的过程可见。

スクリーンショット 2021-02-14 15.07.52.png

5.3 防止销毁

当将该元参数设置为true时,只要参数存在于配置中,Terraform会拒绝计划破坏与资源相关联的基础设施对象的操作。这对于数据库实例等非常有用。但是,如果资源块本身从配置中删除了,那么无法阻止资源的破坏。 (参考)

我們將更改以下內容,以確認其行為:名稱和生命周期。

resource "google_compute_instance" "vm_instance" {
-  name         = "terraform-create-sv01"
+  name         = "terraform-create-sv02"
  #...
  lifecycle {
-   create_before_destroy = true
+   prevent_destroy = true
  }
}

执行计划或应用会产生以下输出:
错误:实例无法销毁

スクリーンショット 2021-02-14 15.15.23.png

忽略变化

使用特定的属性名称列表,可以忽略对指定属性的更改。
可以确保不影响即将发生更改的数据。
还可以使用特殊关键词”all”代替列表,以忽略所有属性的更改。
(参考)

以下是举例说明。

尝试使用标签进行测试。
在执行前,仅将tags设置为[“web”, “dev”],
然后添加”ignoretest”,将tags设置为[“web”, “dev”, “ignoretest”]。
在生命周期中,通过将ignore_changes设置为tags,忽略tags的变化。

resource "google_compute_instance" "vm_instance" {
  name         = "terraform-create-sv01"
  machine_type = "f1-micro"
  zone         = "us-west1-b"

  tags         = ["web", "dev", "ignoretest"]

  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
    }
  }
  network_interface {
    subnetwork = "projects/[HostProjectName]/regions/us-west1/subnetworks/private-subnet01"
    access_config {
    }
  }

  lifecycle {
    ignore_changes = [
      # Ignore changes to tags, e.g. because a management agent
      # updates these based on some ruleset managed elsewhere.
      tags,
    ]
  }
}

以下是进行了上述更改后执行 terraform apply 的示例。
没有更改。基础设施是最新的。标签已更改但被忽略。

スクリーンショット 2021-02-14 21.43.42.png

我已经试验并确认了从创建虚拟机实例到删除、重建以及防止删除等生命周期管理方面的操作。

最后

我调查了 Terraform 并进行了环境搭建,包括VM实例的建立和管理。

据说GCP创建了一个名为Terraformer的工具,用于创建基于现有资源的Terraform文件,我很想尝试一下。

另外,还计划对组织、项目和VPC等基本部分进行IaC化以及进行GKE构建。

请提供参考资料。

GitHub: hashicorp-japan/terraform-workshop-jp
https://github.com/hashicorp-japan/terraform-workshop-jp
https://docs.google.com/presentation/d/1Ovdee0FIrJ_h66B5DToQNYKWJ9XRbudS0RCk4d_x1Eg/edit?usp=sharing

GitHub:hashicorp-japan/terraform-workshop-jp
https://github.com/hashicorp-japan/terraform-workshop-jp
https://docs.google.com/presentation/d/1Ovdee0FIrJ_h66B5DToQNYKWJ9XRbudS0RCk4d_x1Eg/edit?usp=sharing

Hashicorp 学习 / 入门 – 谷歌云
https://learn.hashicorp.com/tutorials/terraform/google-cloud-platform-build#setting-up-gcp

基础设施即代码(Infrastructure as Code)是云计算中服务器管理的原则与实践。该书名为《Infrastructure as Code》由Kief Morris撰写,监译者为宫下剛輔,译者为长尾高弘。您可以在以下链接找到该书:https://www.oreilly.co.jp/books/9784873117966/。

实现基础设施即代码的Terraform和Ansible——各自的专长领域和用途选择

学习 Terraform 的基础知识,通过 Google Cloud Platform – 作者: 卡尔和空 – 链接:https://techbookfest.org/product/6331235183886336

Terraform 语言 – 生命周期元参数
https://www.terraform.io/docs/language/meta-arguments/lifecycle.html

土壤塑造语言 – 生命周期元参数
https://www.terraform.io/docs/language/meta-arguments/lifecycle.html

bannerAds