使用Terraform管理BBC最佳实践
概览
百度太行·弹性裸金属服务器BBC(Baidu Baremetal Compute)是用户可以在云环境中独享的高性能服务器,用户拥有完全的物理设备管理权限,同时可以结合弹性公网IP EIP、负载均衡BLB等服务进行灵活组网,实现与云服务器BCC内网互通,并使用百度智能云领先的监控、运维服务实现对实例的全方位管理。选择BBC产品,用户可以将精力集中到服务器所承载的业务本身上,把服务器供应、交付与运维放心交由百度智能云的专业团队处理。
Terraform是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源,帮助开发者自动化地创建、更新百度智能云的云基础设施资源,并进行版本控制。本文介绍如何使用Terraform管理BBC实例以及自定义镜像。
配置步骤
环境准备
- Terraform:是一种安全有效地构建、更改和版本控制基础设施的工具。它以配置文件为驱动,您在文件中定义各种组件,Terraform会基于该文件完成所有组件的创建、变更和管理。目前百度智能云已与 Terraform集成,您可通过Terraform来创建、管理CFC、BOS、VPC、BCC、BBC等多种百度智能云资源,具体请参考Terraform BaiduCloud Provider。
-
新建工作目录,在工作目录中新建version.tf文件和main.tf文件,version.tf代码如下
terraform {
required_providers {
baiducloud = {
source = "baidubce/baiducloud"
version = "1.15.6"
}
}
}
-
配置百度智能云的账号信息,可使用以下两种方式的任意一种
-
创建环境变量,用于存放身份认证信息。
export ALICLOUD_ACCESS_KEY="************" #替换为百度智能云账号的AK信息。 export ALICLOUD_SECRET_KEY="************" #替换为百度智能云账号的SK信息。 export ALICLOUD_REGION="bj" #替换为您BBC所在的地域。
-
在provider中声明AK SK等信息, 可放入main.tf文件中
provider "baiducloud" { access_key = "************" #替换为百度智能云账号的AK信息。 secret_key = "************" #替换为百度智能云账号的SK信息。 region = "bj" #替换为您BBC所在的地域。 }
-
-
执行以下命令初始化Terraform运行环境
terraform init
BBC配置步骤
编辑Terraform配置文件main.tf,在文件中指定镜像、安全组、子网、套餐和BBC的元信息。参考配置和步骤如下:
更多参数信息可参考baidu provider官方文档
1、镜像
镜像提供了创建和启动BBC实例所需的信息,是您使用实例时帮助您提供业务应用环境的一个参数文件。以GPU类型的实例为例,镜像中可以包含您使用实例需要的操作系统、GPU驱动等信息,并整合了您所需要的相关运算平台的最新版本适配。
说明:由于镜像中包含了云服务的基本组件,因此在您创建BBC实例时,您必须填入镜像相关参数。
用户可通过在main.tf文件中进行镜像的查询,参考如下代码:
data "baiducloud_bbc_images" "bbc_images" {
image_type = "BbcSystem"
os_name = "CentOS"
filter {
name = "id"
values = ["m-i2aoqIlx"]
}
}
filter可以帮助我们过滤我们想要的镜像,在name中填入key,然后声明values即可。
2、安全组
可新建安全组或者是使用现有的安全组作为BBC创建时的参数
- 新建安全组参考如下代码
resource "baiducloud_security_group" "default" {
name = "security_group_name"
description = "security group created by terraform"
vpc_id = "your vpc id"
}
resource "baiducloud_security_group_rule" "default2" {
security_group_id = baiducloud_security_group.default.id
remark = "remark"
protocol = "tcp"
port_range = "22"
direction = "ingress"
}
- 可使用如下代码进行安全组的查询,并使用filter在结果中进行过滤
data "baiducloud_security_groups" "sg" {
filter {
name = "name"
values = ["默认安全组"]
}
}
3、子网
可新建子网或者是使用现有的子网作为BBC创建时的参数
- 新建子网参考如下代码
resource "baiducloud_subnet" "default" {
name = "subnet_name"
# 注意和BBC要同一个区
zone_name = "cn-bj-d"
cidr = "192.168.1.0/24"
vpc_id = "your vpc id"
}
- 可使用如下代码进行子网的查询,并使用filter在结果中进行过滤
data "baiducloud_subnets" "subnets" {
filter {
name = "zone_name"
values = ["cn-bd-b"]
}
filter {
name = "name"
values = ["系统预定义子网B"]
}
}
4、套餐
可使用如下代码进行套餐的查询,并使用filter在结果中进行过滤
data "baiducloud_bbc_flavors" "bbc_flavors" {
filter {
name = "flavor_id"
values = ["BBC-I5-HC03S"]
}
}
5、配置BBC
BBC的配置代码可使用之前步骤中查询到或创建的资源的信息作为参数,示例代码使用的是现有的镜像、安全组、子网、套餐等信息,也可根据实际情况新建这些资源,参考代码如下:
resource "baiducloud_bbc_instance" "bbc_instance" {
name = "terraform-bbc-test"
# 套餐信息
flavor_id = "${data.baiducloud_bbc_flavors.bbc_flavors.flavors.0.flavor_id}"
# 镜像信息
image_id = "${data.baiducloud_bbc_images.bbc_images.images.0.id}"
# raid类型
raid = "NoRaid"
root_disk_size_in_gb = 40
# 购买数量,最大为2
purchase_count = 1
# 可用区name
zone_name = "cn-bd-b"
# 子网id
subnet_id = "${data.baiducloud_subnets.subnets.subnets.0.subnet_id}"
# 与实例关联的安全组列表
security_groups = [
"${data.baiducloud_security_groups.sg.security_groups.0.id}",
]
# 付费方式Postpaid为后付费,Prepaid为预付费,预付费同时需要填入reservation参数
payment_timing = "Postpaid"
# 为BBC绑定标签
tags = {
"testKey" = "testValue"
}
# BBC实例描述
description = "terraform-test"
}
6、创建资源计划并执行
- 执行命令terraform plan,Terraform会根据当前配置文件中的信息列出资源变更计划,如图所示
- 执行命令terraform apply,根据提示输入yes,即自动执行资源创建,直到BBC实例进入运行中的状态。
目前后付费的BBC创建时间较长,时间在15-30分钟不等,请耐心等待
7、测试验证
可通过下面的代码查询BBC实例的详细信息
data "baiducloud_bbc_instances" "default" {
internal_ip = baiducloud_bbc_instance.bbc_instance.internal_ip
}
或者登录百度智能云BBC控制台界面,能够看到BBC资源成功创建。
至此,通过Terraform成功创建出百度智能云上的BBC资源。
BBC更新
可修改main.tf中BBC资源中的参数值进行BBC的更新,目前支持更新的字段有:description(描述)、name(实例名称)、security_groups(安全组)、admin_pass(管理密码)、action(状态,目前只支持stop和start)
字段修改完成后,执行terraform plan
和terraform apply
命令创建资源计划并执行,即可完成资源的更新。
删除BBC
可使用如下命令进行资源的删除:
#命令默认会释放当前main.tf中的所有资源
terraform destroy
#可以通过 -target 选项销毁特定的资源,格式为:-target=<资源类型>.<资源名称>,例如:
terraform destroy -target baiducloud_bbc_instance.bbc_instance
由BBC创建自定义镜像
在main.tf中加入如下代码,然后执行Terraform apply进行资源变更。示例代码使用了之前步骤中创建的资源,也可使用现有资源,填入instance_id即可。
resource "baiducloud_bbc_image" "test-bbc-image" {
image_name = "terraform-bbc-image-test"
instance_id = baiducloud_bbc_instance.bbc_instance.id
}
删除自定义镜像
#可以通过 -target 选项销毁特定的资源,格式为:-target=<资源类型>.<资源名称>,例如:
terraform destroy -target baiducloud_bbc_image.test-bbc-image
总结
借助Terraform,您可以基于IaC(基础设施即代码)的方式配置BBC实例,并且快速配置子网、安全组、自定义镜像等多种资源,实现BBC的的快速建立。同时,基于IaC的方式,可以让资源管理能够进行版本控制,资源变更全流程可追溯,高效便捷的管理BBC以及其他云上资源的生命周期。