使用Terraform管理BBC最佳实践
所有文档
menu

弹性裸金属服务器

使用Terraform管理BBC最佳实践

产品详情自助选购

概览

百度太行·弹性裸金属服务器BBC(Baidu Baremetal Compute)是用户可以在云环境中独享的高性能服务器,用户拥有完全的物理设备管理权限,同时可以结合弹性公网IP EIP、负载均衡BLB等服务进行灵活组网,实现与云服务器BCC内网互通,并使用百度智能云领先的监控、运维服务实现对实例的全方位管理。选择BBC产品,用户可以将精力集中到服务器所承载的业务本身上,把服务器供应、交付与运维放心交由百度智能云的专业团队处理。

Terraform是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源,帮助开发者自动化地创建、更新百度智能云的云基础设施资源,并进行版本控制。本文介绍如何使用Terraform管理BBC实例以及自定义镜像。

配置步骤

环境准备

  1. Terraform:是一种安全有效地构建、更改和版本控制基础设施的工具。它以配置文件为驱动,您在文件中定义各种组件,Terraform会基于该文件完成所有组件的创建、变更和管理。目前百度智能云已与 Terraform集成,您可通过Terraform来创建、管理CFC、BOS、VPC、BCC、BBC等多种百度智能云资源,具体请参考Terraform BaiduCloud Provider
  2. 新建工作目录,在工作目录中新建version.tf文件和main.tf文件,version.tf代码如下

    版本信息可参考baidubce/terraform-provider-baiducloud

    terraform {
      required_providers {
        baiducloud = {
          source = "baidubce/baiducloud"
          version = "1.15.6"
        }
      }
    }
  1. 配置百度智能云的账号信息,可使用以下两种方式的任意一种

    • 创建环境变量,用于存放身份认证信息。

      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所在的地域。
      }
  2. 执行以下命令初始化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会根据当前配置文件中的信息列出资源变更计划,如图所示

image.png

  • 执行命令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 planterraform 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以及其他云上资源的生命周期。

相关产品

弹性裸金属服务器BBC

上一篇
操作指南
下一篇
API参考