Terraform(Backend)适配华为云&OBS心得

举报
yd_235395946 发表于 2024/12/17 17:27:28 2024/12/17
【摘要】 本任务的主要目的是让Terraform支持华为云OBS服务,利用S3 Backend将 Terraform state 文件存储在华为云OBS桶中,拓展OBS服务的影响力。方便Terraform的用户使用华为云服务时能够顺利对接OBS服务。

前一阵,在网上闲逛时,偶然发现华为云发布一些列的对接华为云的任务(https://developer.huaweicloud.cn/programs/opensource/contributing/)。在任务中,我找了一个比较简单的任务入手。那就是Terraform(Backend)适配OBS开源验证任务

1 任务流程

1.1 任务的目的

本任务的主要目的是让Terraform支持华为云OBS服务,利用S3 Backend将 Terraform state 文件存储在华为云OBS桶中,拓展OBS服务的影响力。方便Terraform的用户使用华为云服务时能够顺利对接OBS服务。

1.2 报名流程

  1. 在喜欢的任务上进行报名,填写自己的申请,留下自己的邮箱,之后华为官方会发送任务计划书到邮箱内。
  2. 开通开发者空间,进行实名认证,加入沃土云创计划个人方向。
  3. 进入激励管理》开源共创,进入任务,此时在需求分析节点,提交之前发送到邮箱内的任务计划书。
  4. 提交任务计划书之后,审批后进入开发阶段,阅读任务计划书,了解需要开发的内容。
  5. 此时需要申领服务器,主要是Gaussdb,华为云CCE(类似k8s),CodeArts(ci/cd)。
  6. 开发完整之后,在CCE上进行验证,在CodeArts上进行部署。
  7. 测试完成后,可以申请任务验收。将自己的代码分支博文等信息打包成zip文件进行上传。
  8. 后面就是等发钱啦。

1.3 开发代码

        不涉及

    1.4 上云第一步-购买OBS

    • 在华为云官网,点击产品,选择对象存储服务OBS,点击购买

    图片1.png

    • 选择以下选项,进行提交
      区域:广州(选离自己最近的城市)
      资源包类型:标准存储多AZ
      规格:按照自己需要的大小(我选的是40G

    1.5 上云第二步-购买ECS

    •     选择以下选项,进行提交

           区域:广州(选离自己最近的城市)

          计费模式:按需计费

          可用区:随机分配

          CPU架构:鲲鹏计算 鲲鹏通用计算增强型

          选个差不多配置的就行了(我选的是 kc1.xlarge.4 | 4vCPUs | 16GiB

          操作系统:公共镜像 Huawei Cloud EulerOS (Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB)

          存储和备份按默认就行

    1.6 新建节点

        不涉及

    1.7 配置CodeArts

        不涉及

    2 验收材料

    1. 开源软件fork地址:不涉及

    2. 开源软件修改记录(可以有多个修改记录):

    不涉及

    3. 推送上游社区PR(包括代码、文档、可以有多个):

    不涉及

    4. 验证DEMO地址:

    不涉及

    5. 验证DEMO修改记录(可以有多个修改记录,只包含和本任务验证强相关的提交记录,比如添加依赖、增加配置文件、演示开源软件功能使用的代码等):

    不涉及

    6. 博客地址:https://bbs.huaweicloud.cn/blogs/442623 

    3 资源清单

    3.1 CCE

    产品名称

    集群类型

    集群版本

    集群规模

    云容器引擎CCE

    Turbo集群

    V1.29

    50

    3.2 ECS

    产品名称

    CPU架构

    实例类型

    公共镜像

    镜像版本

    弹性云服务器

    鲲鹏计算

    鲲鹏通用计算增强型

    Huawei Cloud EulerOS

    Huawei Cloud EulerOS 2.0标准版 64ARM(10GiB)

    3.3 OBS

    产品名称

    资源包类型

    桶类别

    对象存储服务OBS

    存储包

    标准存储多AZ


    4 测试结果

    4.1 验证思路

    使用https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/26

    中方案一:通过 S3 兼容 API 验证方案是指利用 OBS 提供的 S3 兼容 API 进行交互。

    配置Terraform 远程存储后端为兼容S3的OBS。

    4.2 安装Terraform

    uname -a

    image.png

    因为Huawei Cloud EulerOS 架构为aarch64,所以只能二进制方式安装:

    wget https://releases.hashicorp.com/terraform/1.10.2/terraform_1.10.2_linux_arm64.zip

    unzip terraform_1.10.2_linux_arm64.zip

    mv terraform /usr/local/bin/

    terraform --version

    image (1).png

    4.3 terraform块中配置backend

    state.tf

    provider "aws" {

      region = "cn-south-1"

     

      endpoints {

        s3 = "https://obs.cn-south-1.myhuaweicloud.com"  # 指定华为云 OBS 端点

      }

    }

     

    terraform {

      backend "s3" {

        bucket   = "terraformobs"

        key      = "env/dev/terraform.tfstate"

        region   = "cn-south-1"

        access_key = "xxx"

        secret_key = "xxx"

     

        skip_region_validation      = true

        skip_metadata_api_check     = true

        skip_credentials_validation = true

        skip_requesting_account_id  = true

     

        # 显式指定华为云 OBS 端点

        endpoint = "https://obs.cn-south-1.myhuaweicloud.com"

      }

    }

     

    4.4 在华为OBS中创建terraformobs

    image (2).png

    4.5 执行 terraform init 命令

    image (3).png

    4.6 导入华为云ECS资源

    huaweicloud.tf

    provider "huaweicloud" {

      region      = "cn-south-1"

      access_key  = "xxx"

      secret_key  = "xxx"

     

      endpoints = {

        s3 = "https://obs.cn-south-1.myhuaweicloud.com"  # 指定华为云 OBS 端点

      }

    }

     

    terraform {

      backend "s3" {

        bucket   = "terraformobs"

        key      = "env/dev/terraform.tfstate"

        region   = "cn-south-1"

        access_key = "RK8FRQWPH9NRNLGPKOCZ"

        secret_key = "yoMSl6qHIiogyYThtsUSgdgy3pfOInJ9wwkUUyYk"

     

        skip_region_validation      = true

        skip_metadata_api_check     = true

        skip_credentials_validation = true

        skip_requesting_account_id  = true

        skip_s3_checksum = true

     

        # 显式指定华为云 OBS 端点

        endpoint = "https://obs.cn-south-1.myhuaweicloud.com"

      }

      required_providers {

        huaweicloud = {

          source = "huaweicloud/huaweicloud"

          version = ">= 1.36.0"

        }

      }

    }

     

    resource "huaweicloud_compute_instance_v2" "my_instance" {

      name              = "testcce-91932"

      image_id          = "CCE_images_HCE20-Node-24.7.0-common-arm64-460c1be6-20240829155358"

      flavor_id         = "dde298f1-493f-417c-9132-828e7b6e5783"

      security_groups   = ["testcce-cce-node-5n03r"]

      availability_zone = "cn-south-1"

     

      network {

        uuid = "55534eaa-533a-419d-9b40-ec427ea7195a"

      }

    }

     

    有关报错参考:https://github.com/hashicorp/terraform/issues/34086

    terraform init -upgrade

    image (4).png

    报错:

    image (5).png

    terraform init -migrate-state

    image (6).png

    terraform import huaweicloud_compute_instance_v2.my_instance 6153e8bd-2db4-4174-b724-2ad5f62157e0

    image (7).png

    image (8).png

     

     

    【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。