一,引言

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

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

根据官方的介绍,我们可以看到 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 代码这里就不列出了!

我们利用 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
}

根目录待上传的文件

Terraform Apply 执行部署计划

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

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

如果想知道更改文件名或删除/添加文件是否有效呢?测试更改文件中的内容是否有效?这也可以实现!只需要添加 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
}

Bingo!!! 成功。

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

三,结尾

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

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

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

作者:Allen

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

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage的更多相关文章

  1. ios开发网络学习十二:NSURLSession实现文件上传

    #import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @&q ...

  2. 超大文件上传到Azure Linux虚拟机最佳实践

    客户在实际进行迁移的时候,往往碰到需要将本地数据中心的超大文件,比如单个200GB的文件,或者总共1TB的无数文件上传到Azure上的情况,尤其是传到Azure的Linux虚拟机的场景,这种场景包括: ...

  3. Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题 swfUpload多文件上传

    Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题(转) 我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的.通过使用某些技术手段,比如jqu ...

  4. JavaEE系列之(二)commons-fileupload实现文件上传、下载

    一.文件上传概述     实现Web开发中的文件上传功能,需要两步操作:     1.在Web页面中添加上传输入项 <form action="#" method=" ...

  5. selenium+java利用AutoIT实现文件上传

    转自https://www.cnblogs.com/yunman/p/7112882.html?utm_source=itdadao&utm_medium=referral 1.AutoIT介 ...

  6. Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题

    一.angular2实现文件上传前端 Angular2使用ng2-file-upload上传文件,Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng ...

  7. 第二百七十三节,Tornado框架-文件上传

    Tornado框架-文件上传 第一.普通表单上传文件 self.request.files["fafafa"] 获取上传文件信息,参数["上传文件框的name名称&quo ...

  8. [转]利用 Commons-Fileupload 实现文件上传

    转载 Java Web开发人员可以使用Apache文件上传组件来接收浏览器上传的文件,该组件由多个类共同组成,但是,对于使用该组件来编写文件上传功能的Java Web开发人员来说,只需要了解和使用其中 ...

  9. Spring Mvc 笔记二之异常和文件上传

    spring mvc的异常与文件上传 1.异常: spring注解版的异常有局部异常和全局异常                1.局部异常对单个controller有效;(在controller类写一 ...

  10. java网络编程(7)——利用tcp实现文件上传

    其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是 ...

随机推荐

  1. 真正“搞”懂HTTP协议02之空间穿梭

    时隔四年,这个系列鸽了四年,我终于觉得我可以按照自己的思路和想法把这个系列完整的表达出来了. 想起四年前,那时候还是2018年的六月份,那时候我还工作不到两年,那时候我翻译了RFC2616的部分内容, ...

  2. C#11之原始字符串

    最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串. 在使用C#11的原始字符串时,发现的一些有意思的东 ...

  3. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  4. 【DL论文精读笔记】AlexNet

    1.1引言 1.2数据集 就是ImageNet,当时计算机视觉最大的数据集 1.3结构 采用双GPU结构实现,并行处理图像,2-3,5-全连接部分中间还将特征图共享 最后全连接层输出的4096的语义信 ...

  5. (Java)设计模式:创建型

    前言 这篇内容是从另一篇:UML建模.设计原则 中分离出来的,原本这个创建型设计模式是和其放在一起的 但是:把这篇创建型设计模式放在一起让我贼别扭,看起来贼不舒服,越看念头越不通达,导致老衲躺在床上脑 ...

  6. 学习ASP.NET Core Blazor编程系列十四——修改

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. 第二十五节:scrapy爬虫识别验证码(四)手绘验证码识别

    一.介绍 今天主要介绍的是微博客户端在登录时出现的四宫格手绘验证码,不多说直接看看验证码长成什么样.        二.思路 1.由于微博上的手绘验证码只有四个宫格,且每个宫格之间都有有向线段连接,所 ...

  8. 【每日一题】【动态规划】2022年1月30日-NC127 最长公共子串

    描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 方法1:dp数组存子串 import java.util.*; public ...

  9. 【每日一题】【递归实现、自下而上、优化】-2022年1月12日-NC68 跳台阶

    描述一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果). 数据范围:0 \leq n \leq 400≤n≤40要求:时间复杂度: ...

  10. WCH以太网相关芯片资料总结

    网络产品线产品分类 1.接口控制类.CH395Q           http://www.wch.cn/search?t=all&q=395CH395LCH392F            h ...