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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 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,搭建一个在线教育视频课程分享网站。
相关文章
|
7月前
|
存储 弹性计算 安全
对象存储OSS快速上手——ossutil工具管理OSS
本实验是对象存储OSS进阶实验。通过本实验,用户可学会如何使用ossutil工具在Linux环境下用命令管理oss,完成文件上传下载等操作。
1164 0
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
17天前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
1月前
|
弹性计算 开发工具 对象存储
ECS实例通过OSS内网地址访问OSS资源
ECS实例通过OSS内网地址访问OSS资源
38 0
|
2月前
|
JSON 数据中心 数据格式
Terraform 系列 - 批量创建资源时如何根据某个字段判断是否创建
Terraform 系列 - 批量创建资源时如何根据某个字段判断是否创建
|
2月前
|
存储 安全 数据中心
Terraform 系列 -Terraform Cloud 比 Terraform OSS 有哪些增强?
Terraform 系列 -Terraform Cloud 比 Terraform OSS 有哪些增强?
|
3月前
|
DataWorks 对象存储 数据安全/隐私保护
dataworks多个业务流程上传同名资源到同一个oss url会有什么问题?
【1月更文挑战第20天】【1月更文挑战第98篇】dataworks多个业务流程上传同名资源到同一个oss url会有什么问题?
111 1
|
4月前
|
Serverless 对象存储 数据安全/隐私保护
在阿里云函数计算(FC)中使用云对象存储服务(OSS)时,需要为FC实例授予对OSS资源的访问权限
在阿里云函数计算(FC)中使用云对象存储服务(OSS)时,需要为FC实例授予对OSS资源的访问权限
370 1
|
4月前
|
存储 运维 数据中心
Terraform的自动化管理
Terraform的自动化管理
25 0
|
5月前
|
对象存储
谷粒商城--品牌管理(OSS、JSR303数据校验)-3
谷粒商城--品牌管理(OSS、JSR303数据校验)
34 0

相关产品

  • 对象存储
  • 推荐镜像

    更多