Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

时间:2023-01-31 16:07:53

一,引言

  本篇文章中,我门将学习如何利用 Terraform 将 文件以及文件夹上传到 Azure Blob Storage,这个对于我们来说很方便,可以将一些不重要的内容也存储在源代码管理工具中!

开始今天的内容之前,我们先来看看今天的主角 Terraform ----- fileset Function

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

根据官方的介绍,我们可以看到 fileset 枚举一组给定路径和模式的常规文件名。该路径会自动从生成的文件名集中删除,任何仍包含路径分隔符的结果始终返回正斜杠 ( /) 作为路径分隔符以实现跨系统兼容性。

--------------------Azure Terraform 系列--------------------

1,Azure Terraform(一)入门简介

2,Azure Terraform(二)语法详解

3,Azure Terraform(三)部署 Web 应用程序

4,Azure Terraform(四)状态文件存储

5,Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源

6,Azure Terraform(六)Common Module

7,Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

8,Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

9,Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布

10,Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境

11,Azure Terraform(十一)Azure DevOps Pipeline 内的动态临时变量的使用

12,Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

二,正文

Terraform 代码

创建资源组,存储账户,具体的 TF 代码这里就不列出了!

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

我们利用 azurerm_storage_blob 将用于将根目录下的 file_uploads 文件夹中的内容上传到 Azure Blob Storage 。然后就可以使用 for_each + fileset 组合函数来遍历特定文件夹的所有内容。

resource "azurerm_storage_blob" "storageBlob" {
  for_each               = fileset(path.module, "../file_uploads/*")
  name                   = trim(each.key, "../file_uploads/")
  storage_account_name   = local.storage_account_name
  storage_container_name = local.storage_account_container_name
  type                   = "Block"
  source                 = each.key
}

根目录待上传的文件

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

Terraform Apply 执行部署计划

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

登录 Azure Portal ,找到 “” 的 Storage Account,选择 “ Data storage =》Containers”

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

查看红色圈中的 Container 里是否有 Terraform 上传的文件

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

如果想知道更改文件名或删除/添加文件是否有效呢?测试更改文件中的内容是否有效?这也可以实现!只需要添加 content_md5 语法,它还会每次检查文件的 MD5 总和。

resource "azurerm_storage_blob" "storageBlob" {
  for_each               = fileset(path.module, "../file_uploads/*")
  name                   = trim(each.key, "../file_uploads/")
  storage_account_name   = local.storage_account_name
  storage_container_name = local.storage_account_container_name
  type                   = "Block"
  content_md5            = filemd5(each.key)
  source                 = each.key
}

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

Bingo!!! 成功。

温馨提示:做完实验,记得 "terraform destroy" 销毁资源

三,结尾

  今天我们算是温习了一下 Terraform 创建 Storage Account,Blob Storage 等语法,同时也学习了新的语法 "fileset" 上传文件,这样是得我们以后可以将一些非重要的文件通过代码管理工具控制起来,极大的方便了整个项目开发过程中文件管理的问题。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,望包含,并且指出不足之处!!!!!

参考链接:Terraform Function ----- fileset

github:https://github.com/yunqian44/Azure.CopyFile.TF

作者:Allen 

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。