【2019年12月版本】在GCP中,Terraform曾是一个泥潭,现在在Azure中寻求复仇?

让我们尝试进行Azure的Terraform教程。 Azure de Terraform .)

是的,大家都对经常沉迷于 Terraform 的我非常熟悉。但是我发现了 Azure 的官方教程,所以我必须去尝试一下这个了☆

    Azure 上の Terraform のドキュメント

我尝试了下面的快速入门指南。

    Install and configure Terraform to provision Azure resources

有关Terraform安装的问题

实际上,就像上面点击开始页面所显示的那样,Cloud Shell 已经安装了 Terraform。
如果只是尝试一下或者是小规模的基础设施的话,你可以在 Cloud Shell 上进行 git clone,然后即时进行 terraform init 和 apply 还是可以的。(不过,这可能需要正确设置后端,所以这个方案的复杂程度可能会更高。)

考虑到自己的环境中存在从0.11到0.12的破坏性更新,因此我使用tfenv。实际上,我认为对于即将开始使用Terraform的新手来说,tfenv是必备工具。

请从以下的git仓库安装tfenv。
使用方式与nvm等工具基本相同,通过list-remote确认版本发布后,使用install进行安装,使用list确认已安装版本,然后使用use进行切换。

这次我会轻易地安装”最新版本”。

$ tfenv install latest
...

$ tfenv list
* 0.12.18 (set by /home/xxxxxx/.tfenv/version)
  0.12.2
  0.11.13

安装后似乎可以使用,以后我想继续使用0.12.18进行工作。

2. Azure 账户设置

按照教程的指示,确保通过Terraform可以访问Azure账户。请先执行az login。

首先需要获取订阅。

$ az account list --query "[].{name:name, subscriptionId:id, tenantId:tenantId}"
...

我认为会显示一个订阅列表。
将该subscriptionId放入环境变量中,并使用az命令设置要引用的订阅。

$ export SUBSCRIPTION_ID=xxxxxx-xxxxxx-xxxx-xxxx-xxxxxxxxxxx
$ az account set --subscription="${SUBSCRIPTION_ID}"

接下来创建适用于Terrform的角色。

$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"
...

{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxx",
  "displayName": "xxxxxxxxxxxxxxxxxxxxxxx",
  "name": "http://xxxxxxxxxxxxxxxxxxxxxxx",
  "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "tenant": "xxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

创建一个名为setenv.sh的脚本,将这些值放入环境变量中。

#!/bin/sh
echo "Setting environment variables for Terraform"
export ARM_SUBSCRIPTION_ID=xxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
export ARM_CLIENT_ID=xxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
export ARM_CLIENT_SECRET=xxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
export ARM_TENANT_ID=xxxxxxx-xxxx-xxxx-xxxxxxxxxxxx

# Not needed for public, required for usgovernment, german, china
export ARM_ENVIRONMENT=public

我已经不知道如何管理这个setenv.sh了…(毫无疑问,它就像核燃料棒一样…)

好的,一切准备就绪! de, !)

3. 资源准备完成

我们试试只创建一个”资源组”吧。

provider "azurerm" {
}
resource "azurerm_resource_group" "rg" {
        name = "testResourceGroup"
        location = "westus"
}

保存文件后,我们开始Terraform项目!

$ terraform init
...

在这里将进行后端设置和插件安装。

4. 开始行动!

在快速启动中,我们直接进行了应用,但这是不允许的。
首先,让我们确认执行计划。

$ terraform plan --out plan.out
...

所以,执行计划的消息将显示在 plan.out 中,并生成一个实际应用的脚本?

如果确认内容无误,就应用这个 plan.out 文件。

$ terraform apply plan.out
Acquiring state lock. This may take a few moments...
azurerm_resource_group.rg: Creating...
azurerm_resource_group.rg: Creation complete after 3s [id=/subscriptions/xxxxx-xxxx-xxxx-xxxxxxxx/resourceGroups/testResourceGroup]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Releasing state lock. This may take a few moments...

好的!看起来申请已经成功了。
我们在Azure Portal上确认一下吧。

testResourceGroup - Microsoft Azure.png

看起来像个真男人。做得很认真呢!

5. 撤退!

由于已经确认了Terraform的操作情况,我将撤销TestResourceGroup!

$ terraform destroy
...
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes
...
azurerm_resource_group.rg: Destruction complete after 1m5s

Destroy complete! Resources: 1 destroyed.

请确定后再回答“是”,我会确认的。
它将删除在test.tf中定义的所有资源。

6. 如果在云端 Azure 上使用 Storage 存储 tfstate 的话

本次將 tfstate 儲存在本地,但這樣存在問題,因此希望使用遠端的某個地方……正好應該使用 Azure 的儲存空間。(其實這是理所當然的流程吧。。。)

请按照下面的教程步骤进行操作。(简略)

    Tutorial: Store Terraform state in Azure Storage

因为可以在Azure门户上创建存储,所以我考虑贴那边的屏幕截图,但是这个脚本就是完整地列在那里,所以用这个已经足够了……而且这样做更快。


虽然匆忙进行了Azure官方教程的试用,但我确认了Terraform + Azure似乎基本可行。
接下来将面对各个服务的设置之战,这是一片泥沼,但我希望能坚持下去!

这次就到这里吧。

广告
将在 10 秒后关闭
bannerAds