Terraform(Backend)适配华为云&OBS心得
前一阵,在网上闲逛时,偶然发现华为云发布一些列的对接华为云的任务(https://developer.huaweicloud.com/programs/opensource/contributing/)。在任务中,我找了一个比较简单的任务入手。那就是Terraform(Backend)适配OBS开源验证任务。
1 任务流程
1.1 任务的目的
本任务的主要目的是让Terraform支持华为云OBS服务,利用S3 Backend将 Terraform state 文件存储在华为云OBS桶中,拓展OBS服务的影响力。方便Terraform的用户使用华为云服务时能够顺利对接OBS服务。
1.2 报名流程
- 在喜欢的任务上进行报名,填写自己的申请,留下自己的邮箱,之后华为官方会发送任务计划书到邮箱内。
- 开通开发者空间,进行实名认证,加入沃土云创计划个人方向。
- 进入激励管理》开源共创,进入任务,此时在需求分析节点,提交之前发送到邮箱内的任务计划书。
- 提交任务计划书之后,审批后进入开发阶段,阅读任务计划书,了解需要开发的内容。
- 此时需要申领服务器,主要是Gaussdb,华为云CCE(类似k8s),CodeArts(ci/cd)。
- 开发完整之后,在CCE上进行验证,在CodeArts上进行部署。
- 测试完成后,可以申请任务验收。将自己的代码分支博文等信息打包成zip文件进行上传。
- 后面就是等发钱啦。
1.3 开发代码
不涉及
1.4 上云第一步-购买OBS
- 在华为云官网,点击产品,选择对象存储服务OBS,点击购买
- 选择以下选项,进行提交
区域:广州(选离自己最近的城市)
资源包类型:标准存储多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.com/blogs/442623
3 资源清单
3.1 CCE
产品名称 |
集群类型 |
集群版本 |
集群规模 |
云容器引擎CCE |
Turbo集群 |
V1.29 |
50 |
3.2 ECS
产品名称 |
CPU架构 |
实例类型 |
公共镜像 |
镜像版本 |
弹性云服务器 |
鲲鹏计算 |
鲲鹏通用计算增强型 |
Huawei Cloud EulerOS |
Huawei Cloud EulerOS 2.0标准版 64位 ARM版(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
因为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
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桶
4.5 执行 terraform init 命令
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
报错:
terraform init -migrate-state
terraform import huaweicloud_compute_instance_v2.my_instance 6153e8bd-2db4-4174-b724-2ad5f62157e0
- 点赞
- 收藏
- 关注作者
评论(0)