【LiveLabs】我尝试使用 Terraform 在 Oracle Cloud 上构建计算资源
首先
当在公共云上构建架构时,能够通过Web控制台界面以图形用户界面的形式轻松地进行环境部署是其魅力之一。
然而,如果想要在多个工作负载中重复使用相同的配置,或者在PoC(概念验证)阶段构建环境后要将其发布到生产环境之前避免不必要的收费,使用基于代码的基础设施即代码(IaC,Infrastructure As Code)将是有效的手段。
在Oracle Cloud上,支持使用IaC的开源软件Terraform来构建架构。本次我们希望使用Terraform来启动计算实例。
使用Terraform进行基础设施部署的工作坊。
Livelabs是什么?
Oracle LiveLabs是一项可以从Web浏览器中轻松尝试Oracle的数据库和云服务等的工作坊服务。在这些工作坊中,您还可以免费使用实践环境的沙盒环境。例如,您不需要支付Oracle Database许可证的初始费用,也可以在一定的时间限制内体验使用感受。对于那些通过亲自动手学习技术的工程师来说,这是一个非常有用的服务。

如果硬要提到缺点的话,那可能是所有步骤都没有对应的日文版本吧。
通过在浏览器中启用翻译功能,部分语言可以被翻译,但关键步骤部分无法被翻译,所以对于不懂英语的人来说可能会稍微有些困难。
这次目标是要把步骤翻译成日语并记录下来。
构建的东西

因为在实践操作步骤中没有配置图像,所以在建立后,我添加了配置图像。
这只是在虚拟云网络(VCN)中建立计算机(Compute)的简洁结构。
引言:Terraform 是什么?
Terraform 是由 HashiCorp 使用 Go 语言开发的开源工具,它可以通过代码声明基础架构的配置。在结构化的配置文件中,可以自动管理基础架构配置,无需手动操作。使用 Terraform,可以通过代码声明来进行基础架构的初始配置、更新和销毁。
Terraform 还支持公共云服务提供商如 AWS、Azure、GCP 等,因此非常适合管理多云工作负载的基础架构。此外,使用 Terraform 不需要将屏幕上设置的属性值转化为设计文档,也不需要在修改时更新文档。只需阅读配置文件,就可以一目了然地了解配置内容,这也是它的魅力之一。
Terraform是一个用于高效且优雅地构建和管理基础设施的代码工具。通过使用Terraform文件,可以辅助配置OracleCloud实例。使用Terraform配置文件,您可以定义计算实例的属性。文件还可以与他人共享,以便进行更改和重用。使用Terraform可以使创建多个类似实例的过程变得更加合理化。
建立程序
-
- 创建SSH密钥使用Oracle Cloud Shell
-
- 通过Terraform部署VCN和Compute
- 整理清理
使用Oracle Cloud Shell创建SSH密钥。
SSH(Secure Shell)协议是一种用于从一台计算机安全远程登录到另一台计算机的方法。通过使用加密来保护端点之间的连接,SSH可以在不安全的网络上实现安全的系统管理和文件传输。SSH密钥是安全访问Oracle Cloud Infrastructure计算实例的重要组成部分。
建议使用Oracle Cloud Shell与要创建的OCI计算实例进行交互。Oracle Cloud Shell是基于浏览器的,无需在笔记本电脑上安装或配置软件,且独立于网络设置而工作。

cd .ssh
ssh-keygen -b 2048 -t rsa -f cloudshellkey
建议您将密钥名称命名为cloudshellkey,但您可以自由选择所需的名称。
检查所创建的两个文件。
ls
可以看到两个文件:cloudshellkey 和 cloudshellkey.pub。
要列出公開密钥的内容,可以使用cat命令。
cat cloudshellkey.pub
将公钥内容复制并保存在某个地方,以便将来使用。在以后的实验中,将密钥粘贴到计算实例时,请删除可能在复制过程中添加的硬回车符号。.pub密钥应该只有一行。
2. 使用Terraform来部署VCN和Compute
然后,下载Terraform示例代码。在云Shell中输入以下命令。
curl https://objectstorage.us-ashburn-1.oraclecloud.com/p/W7d4rKt71E8pOkTyB1ca5lbuerxDcyL0ZjuIMIRQ15-i-JW7KJOC6TMKSnD-_bZO/n/ociobenablement/b/lab/o/terraform_demo.zip -o terraform-demo.zip

unzip terraform-demo.zip

先试一试,输入以下命令,查看compute.tf文件。
cd terraform_demo
cat compute.tf
本次我们不会对详细的属性值进行解释,但是您可以确认Compute的配置信息已经定义,包括Shape和启动卷的大小等。
availability_domain = var.availablity_domain_name == "" ? data.oci_identity_availability_domains.ADs.availability_domains[0]["name"] : var.availablity_domain_name
compartment_id = var.compartment_ocid
display_name = "test-instance"
shape = var.instance_shape
fault_domain = "FAULT-DOMAIN-1"
shape_config {
ocpus = var.instance_ocpus
memory_in_gbs = var.instance_shape_config_memory_in_gbs
}
metadata = {
ssh_authorized_keys = var.ssh_public_key == "" ? tls_private_key.public_private_key_pair.public_key_openssh : var.ssh_public_key
}
create_vnic_details {
subnet_id = oci_core_subnet.subnet.id
display_name = "primaryvnic"
assign_public_ip = true
assign_private_dns_record = true
}
source_details {
source_type = "image"
source_id = lookup(data.oci_core_images.InstanceImageOCID.images[0], "id")
boot_volume_size_in_gbs = "50"
}
timeouts {
create = "60m"
}
}
接下来,我们要编辑terraform.tfvars文件。
在这个文件中,我们定义了一个名为”variable”的变量,供其他文件引用。
我们要更新以下变量:-tenancyocid,region,compartmentocid。
sskpublickey保持为空白。
用vi命令编辑文件。
vi terraform.tfvars

在终端中输入vi命令,然后按下i键来编辑文件。
输入个人账户信息到tenancyocid、region和conpartmentocid。
按下Ctrl+C保存并退出文件后,输入”:wq!”。
接下来,使用以下命令对Terraform进行初始化。
terraform init

要显示展开计划,请输入以下命令。
terraform plan
通过这个,将提供由OCI构成的内容的详细信息。
最后,应用计划来创建基础设施。输入以下命令。
terraform apply
在路上,可能会被问到以下问题。
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
請輸入「是」,然後執行。
這個腳本的執行需要一些時間。您可以切換到OCI控制台來監視創建VCN和計算實例。讓我們實際看一下。



整理收拾
使用一条命令即可批量删除这些资源,这也是Terraform的魅力所在。
保持Compute处于启动状态会产生额外的费用,因此在验证结束后应将其删除。
销毁已创建的基础设施,请输入以下命令。
terraform destroy

辛苦了!這樣工作坊就結束了。
最后
请问您对这次体验如何呢?这次我们尝试了通过Cloud Shell执行Terraform来构建资源,但是OCI还提供了一个名为Resource Manager的完全托管服务,您也可以在这里使用Terraform来更轻松地创建、管理和运维资源。下次,我想进行一个关于这项服务的实践指导。