
# IaC概述
#### IaC简介
基础设施即代码（Infrastructure as Code，简称IaC）是一种以YAML作为输入，经由云原生环境管理服务、IaC执行引擎、Operator平台解析和执行，实现环境自动部署以及管理动态基础设施的方法。它强调一致，可重复的供给和变更系统及其配置。当代码发生变更后，可以进行自动化测试，测试完成后可自动化的应用变更到运行系统中。使用基础设施即代码的方法，可以使用敏捷工程的优秀实践（如测试驱动开发，持续集成，持续发布）来更加快速安全的变更基础设施。
#### IaC3.0支持的部署模式
IaC3.0支持如下两种场景的部署模式。
- IaC Spec包 同一个服务下所有微服务的IaC代码在一个仓中管理，打包生成IaC Spec的包，可以实现服务下所有的微服务在同一个服务环境下一键部署。
  
- IaC Patch包 微服务的IaC代码单独管理，通过IaC Spec包创建了服务环境之后，可以通过微服务级别的IaC Patch包进行微服务的独立部署。
  
 
#### IaC代码结构介绍
IaC代码支持单文件描述结构、多文件描述结构以及带global的多文件描述结构，具体介绍请参见[IaC代码结构介绍](https://support.huaweicloud.com/devg-appstage/appstage_06_0063.html)。
- 单文件描述结构：在IaC主体描述文件meta.yaml中进行变更流程编排同时定义所有资源。
- 多文件描述结构：通过引入resources.yaml和文件引用语法，将单文件结构改造为多文件描述目录结构，避免诸多资源的描述都集中于meta.yaml，而造成文件内容过长难以管理。
- 带global的多文件描述结构：为解决不同规格目录间配置复用问题，IaC3.0支持带global的多文件描述结构。
带global的多文件描述结构为IaC3.0的典型目录结构，IaC Spec目录结构请参见[IaC Spec包典型目录结构](https://support.huaweicloud.com/devg-appstage/appstage_06_0033.html)。
#### IaC代码开发介绍
在一次完整的业务变更中，往往会涵盖多种类型、多个模块的变更，如集群扩容、申请ELB、创建数据库、软件升级等等。在IaC的语境下，每一个变更本质上都是IaC资源的变更。在一次完整的业务变更中，部分资源的变更依赖于其他资源的变更，如为一个微服务创建NUWA实例之前往往需要先创建该微服务的数据库。
通过IaC代码对各资源在具体变更过程中的依赖关系、先后顺序进行代码化描述。本质上就是描述各模块、各资源之间的依赖关系。在变更过程中，IaC将根据由依赖关系生成的有向无环图顺序执行各资源的变更过程。
IaC代码开发主要围绕声明资源和变更流程编排两个方面展开。
- [在IaC代码中声明资源](https://support.huaweicloud.com/devg-appstage/appstage_06_0035.html)
  - 定义component：定义component是IaC将一个环境的资源组织起来的方式，将同一类资源组织起来成为一个component。
  
  - 定义资源：一个component下可以定义多个资源，所有的资源描述都存放于resources.yaml中。
   
- [在IaC代码中定义流水线](https://support.huaweicloud.com/devg-appstage/appstage_06_0075.html)
  component间的编排在IaC Spec包中的meta.yaml文件中描述，用户可以根据自己的需求定义整个环境在变更时的执行过程。
  
 
