开发者社区> 陈鹏飞Figo Chen> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 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相关配置操作示例

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Terraform玩转SLS数据加工自动化部署
本文主要介绍Terraform的安装、阿里云Terraform Provider的安装以及如何使用Terraform管理SLS数据加工。
173 0
AHAS-流量防护应用权限管理 最佳实践
流量防护子账号权限细粒度控制:不同子账号 只可见对其授权的应用。 AHAS应用防护以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保障业务的稳定性,提供更专业稳定的流量防护手段、秒级的流量水位分布分析功能,是阿里巴巴双十一技术体系中的核心组件,同时也是开源框架Sentinel的商业化产品。
172 0
使用Terraform玩转SLS告警
Terraform是有HashiCorp公司开源的IT基础架构的自动化编排工具,“Write,Plan and Create Infrastructure as Code”,Terraform的命令行接口(CLI)提供了一种简单的机制,用于将配置文件部署到阿里云或者其他任意支持的云上,并对其进行版本控制。 SLS告警告警是一站式告警监控、降噪、事务管理、通知分派的智能运维平台。包含日志/时序存储、告警监控、告警管理、通知管理等模块;强大的功能当然也有自动化配置的需求,本文将介绍如何使用Terraform进行简单的配置,即可完成在无界面的告警配置。
417 0
Terraform 自动化执行云资源访问授权
Terraform 自动化执行云资源访问授权,解决云产品初始化需要手工点击授权问题。
299 0
Terraform云资源管理
本方案适合Terraform的迁移用户或准备使用Terraform的用户,可以帮助客户在阿里云安全、高效地预配和管理云基础产品。用户在正式使用前,对Terraform模块与实际使用模块的基本验证,用于对管理和维护IT资源的日常操作的验证。
1207 0
小微企业阿里云最佳实践系列(二):RDS 数据库与DMS 数据库管理(数据管理)
概述 阅读对象 本博文主要写给创业团队、技术团队人数 < 5 人、没有专业运维等小微企业作为参考,需要掌握基础的服务器管理、软件开发等经验。 博文主要内容 在上一篇博文中主要介绍了 ECS 服务器与 RDS 数据库,在本篇重点为大家讲解我们的数据如何进行管理、在日常的管理过程中存在哪些风险、遇到突然事件如何通过日志分析问题以及解决问题。
1298 0
小微企业阿里云最佳实践系列(二):RDS 数据库与DMS 数据库管理(数据管理)
在上一篇博文中主要介绍了 ECS 服务器与 RDS 数据库,在本篇重点为大家讲解我们的数据如何进行管理、在日常的管理过程中存在哪些风险、遇到突然事件如何通过日志分析问题以及解决问题。
2832 0
Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践。最后我为团队选择了这个git分支管理实践 A successful Git branching model ,网上有不少参考这篇文章写的中文版gitflow实践,推荐一个中文版的Git 最佳实践:分支管理。
11910 0
《配置管理最佳实践》——第1章 源代码管理 1.1为什么源代码管理如此重要
源代码管理之所以如此重要是因为既要保证资产是安全的,又要允许通过受控、可靠的配置库对其进行访问。源代码管理提供了管理源代码和把工件组装成系统的工具和方法。在配置管理术语中,我们称其为配置项(CI, Configuration Item)。
2009 0
30
文章
0
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载