【最佳实践】通过Terraform 管理OSS资源

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.Terraform简介    Terraform 是一个开源的自动化的资源编排工具,支持多家云服务提供商。阿里云作为第三大云服务提供商,terraform-alicloud-provider 已经支持了超过 90 多个 Resource 和 Data Source,覆盖20多个服务和产品,吸引了越来越多的开发者加入到阿里云Terraform生态的建设中。

1.Terraform简介

   Terraform 是一个开源的自动化的资源编排工具,支持多家云服务提供商。阿里云作为第三大云服务提供商,terraform-alicloud-provider 已经支持了超过 90 多个 Resource 和 Data Source,覆盖20多个服务和产品,吸引了越来越多的开发者加入到阿里云Terraform生态的建设中。

  HashiCorp Terraform 是一个IT基础架构自动化编排工具,可以用代码来管理维护 IT 资源。Terraform的命令行接口 (CLI) 提供一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储帐户和网络接口。Terraform 的命令行接口(CLI)提供一种简单机制,用于将配置文件部署到阿里云或任何其他支持的云并对其进行版本控制。

  Terraform是一个高度可扩展的工具,通过 Provider 来支持新的基础架构。您可以使用Terraform来创建、修改、删除ECS、VPC、RDS、SLB等多种资源。

2.OSS的Terraform Module都能够提供哪些操作?

  目前阿里云已经将OSS的module发布到了GitHub上。目前OSS提供的主要功能有Bucket管理,以及日常的文件对象管理。例如:

  • Bucket 管理功能:
1.创建Bucket
2.设置Bucket ACL
3.设置Bucket CORS
4.设置Bucket Logging
5.设置Bucket 静态网站托管
6.设置Bucket Referer
7.设置Bucket  Lifecycle
  • Object管理功能:
1.文件上传
2.设置文件服务端加密方式
3.设置ACL
4.设置对象元数据信息

1.OSS Module在GitHub上下载地址:GitHub下载地址
2.OSS Terraform Module介绍:Module介绍

  接下来我们就从简单的示例 开始了解,Terraform是如何管理Bucket和文件对象。

3.安装Terraform

  在使用Terraform的简单模板语言定义、预览和部署云基础结构前,您需要安装预配置Terraform。

【安装步骤】如下:

1.前往 Terraform官网 下载适用于您的操作系统的程序包;
2.将程序包解压到/usr/local/bin。如果将可执行文件解压到其他目录,则需要将路径加入到全局变量:
3.运行 terraform 验证路径配置。

将显示可用的Terraform选项的列表,类似如下所示,表示安装完成。
username:~$ terraform
Usage: terraform [-version] [-help] <command> [args]

4.为提高权限管理的灵活性和安全性,建议您创建RAM用户,并为其授权。

**注意**:请不要使用主账号进行操作!!!

  常见的terraform命令是 terraform init, terraform plan, terraform apply

4.创建配置文件

  需要为每个terraform项目创建1个独立的执行目录。所以,我们创建terraform-test目录。该目录下所有*.tf 文件都会被terraform加载,因此,在初始化配置之前需要有1个.tf文件。

mkdir terraform-test
cd terraform-test

  Terraform在运行时,会读取该目录空间下所有.tf以及.tfvars 文件。因此,没有必要将所有配置信息写在1个配置文件中。用户可以按照实际用途将配置信息写入到不同的文件中。例如:

provider.tf                -- provider 配置
terraform.tfvars           -- 配置 provider 要用到的变量
varable.tf                  -- 通用变量
resource.tf                 -- 资源定义
data.tf                     -- 包文件定义
output.tf                    -- 输出

Step1:如下我们将创建provider.tf 文件存放用户的身份认证信息。

provider "alicloud" {
    region           = "cn-hanghzou"
    access_key  = "your-access-key-here"
    secret_key   = "your-secret-key-here"
}

 说明:以下示例中都会用到provider.tf文件,请不要删除该文件。此外,建议将AK信息单独存放到provider.tf文件,不建议将AK信息与对象操作放在同一个tf文件中。

Step2:我们以创建1个Bucket为例。如下我们创建1个test.tf文件,内容如下:

resource "alicloud_oss_bucket" "bucket-acl"{
  bucket = "figo-chen-2020"
  acl = "private"
}

4.1配置文件介绍

4.1.1"alicloud_oss_bucket"介绍

  您可以从该链接查看到bucket所有配置信息。 如果bucketfigo-chen-2020不存在,则运行 terraform apply 后将自动创建该bucket。若已经存在Bucket,则强制进行重命名操作。

注意:资源的操作行为与Terraform的状态有关。若无,则创建该Bucket,若有,则强制进行重命名操作。重命名操作会被拆分为“删除+新建”2个操作步骤。

5.初始化工作目录

  新建terraform工作目录,并创建配置文件后。terraform applyterraform plan 等命令是无法执行的。需要先进行初始化操作。

Terraform init

  执行 terraform init命令后,会在当前目录创建.terraform目录。并依据 *.tf文件中的配置信息下载对应的插件。

   示例输出信息如下:

root@figo-hangzhou:~/terraform-test# terraform  init

Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "alicloud" (1.24.0)...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.alicloud: version = "~> 1.24"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

6.执行Terraform命令

  1. 新建配置文件,并执行初始化后,就可以执行相关Terraform命令了。Terraform提供了预览功能,允许在正式执行之前查看将要执行那些操作。

terraform plan

  输出信息如下:

root@figo-hangzhou:~/terraform-test# terraform  plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + alicloud_oss_bucket.bucket-acl
      id:                <computed>
      acl:               "private"
      bucket:            "figo-chen-2020"
      creation_date:     <computed>
      extranet_endpoint: <computed>
      intranet_endpoint: <computed>
      location:          <computed>
      logging_isenable:  "true"
      owner:             <computed>
      referer_config.#:  <computed>
      storage_class:     <computed>


Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

  2.若要执行工作目录中的配置文件,请运行如下命令:

terraform apply

  输出信息如下:

root@figo-hangzhou:~/terraform-test# terraform  apply

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + alicloud_oss_bucket.bucket-acl
      id:                <computed>
      acl:               "private"
      bucket:            "figo-chen-2020"
      creation_date:     <computed>
      extranet_endpoint: <computed>
      intranet_endpoint: <computed>
      location:          <computed>
      logging_isenable:  "true"
      owner:             <computed>
      referer_config.#:  <computed>
      storage_class:     <computed>


Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

alicloud_oss_bucket.bucket-acl: Creating...
  acl:               "" => "private"
  bucket:            "" => "figo-chen-2020"
  creation_date:     "" => "<computed>"
  extranet_endpoint: "" => "<computed>"
  intranet_endpoint: "" => "<computed>"
  location:          "" => "<computed>"
  logging_isenable:  "" => "true"
  owner:             "" => "<computed>"
  referer_config.#:  "" => "<computed>"
  storage_class:     "" => "<computed>"
alicloud_oss_bucket.bucket-acl: Creation complete after 1s (ID: figo-chen-2020)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

  如上已经成功的创建了 figo-chen-2020 这个bucket,并且ACL是Private。

  3.若要显示删除已存在的资源,请运行如下命令:

terraform  destroy

7.Bucket相关配置操作示例

7.1设置Bucket Access-log示例:

resource "alicloud_oss_bucket" "that"{
  bucket = "figo-chen-2019"
  acl = "private"
}

resource "alicloud_oss_bucket" "bucket-logging" {
  bucket = "figo-chen-2018"
  acl = "private"

  logging {
    target_bucket = "${alicloud_oss_bucket.that.bucket}"
    target_prefix = "log/"
  }

  logging_isenable = true
}

说明:若Bucket不是通过terraform创建。则通过 如下命令导入现有的Bucket。

terraform import alicloud_oss_bucket.bucket bucket-name

1.编辑mail.tf文件,在此文件中编辑导入Bucket的ACL等其他信息。例如:

resource "alicloud_oss_bucket" "bucket"{
  bucket = "test-hangzhou-2025"
  acl = "private"
}

2.执行terraform import命令,如下是导入“test-hangzhou-2025”这个bucket的命令:

terraform import alicloud_oss_bucket.bucket test-hangzhou-2025

8.其他Bucket配置操作示例:

9.Object相关配置操作示例

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
6月前
|
存储 缓存 安全
oss跨域资源共享(CORS Configuration)
oss跨域资源共享(CORS Configuration)
573 4
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
50 2
|
4月前
|
存储 JSON 自然语言处理
OSS数据源一站式RAG最佳实践
本文介绍了如何使用OpenSearch LLM智能问答版通过OSS数据源一站式构建RAG系统。
7167 11
|
3月前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
|
4月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之多个业务流程上传同名资源到同一个OSS(对象存储服务)URL,会产生什么问题
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
6月前
|
存储 缓存 安全
对象存储OSS产品常见问题之拥有两个相同的标准资源存储包延期抵用如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
|
6月前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
116 0
|
6月前
|
存储 运维 监控
运维编排最佳实践:将运维编排任务执行记录投递到OSS/SLS
运维编排服务(Operation Orchestration Service),简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从...
运维编排最佳实践:将运维编排任务执行记录投递到OSS/SLS
|
6月前
|
存储 缓存 前端开发
使用CDN来加速OSS上存储的文件资源分发
本文为真实设备电商行业的实践,在网站有大量产品图片上传的场景下,用OSS配合CDN加速,提高了用户的访问速度、站点稳定性,并且提供了节省成本的思路。
733 1
使用CDN来加速OSS上存储的文件资源分发

相关产品

  • 对象存储
  • 推荐镜像

    更多
    下一篇
    无影云桌面