VPC & Subnet
每当一个账户在区域创建时,都会拥有一个AWS VPC(Virtual Private Cloud)
跟随区域,跟随AWS账户默认创建,用于保护每个账户的私有资源访问权限
例如不同的账户可能创建在同一台物理服务器上,但是不同的账号间的资源访问是互相隔离的
控制台可以看到默认创建的VPC
VPC代表了公司的网络架构,包括网络配置、路由、防火墙等
VPC由不同的Availability Zone组成,具体指代实际的物理服务器所在的数据中心
例如 我在中国区,可能会有华南、华中、华北3个数据中心都有虚拟服务器运行,那么就会有3个Availability Zone,也就会有3个subnet
当我们需要从外部访问资源时,需要配置一个公共IP地址,可以使用Internet Gateway
当我们需要控制外部对VPC访问权限,可以配置防火墙
配置外部访问
设置防火墙规则和安全组
VPC -> SECURITY
添加VPC资源
资源命名规则: aws_[resource_name]
所有的语法示例都能在文档中找到
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc
代码示例
1 |
|
通过执行如下命令应用到AWS
1 | terraform apply |
执行命令以后可以预览terraform的执行计划,然后输入yes确认该计划
DataSource
假如我们需要从已有的VPC中创建subnet,则需要先拉取AWS已有的VPC信息,然后引用其id
示例
1 | # 拉取aws数据 |
执行 terraform apply
修改 & 删除资源
继续以AWS VPC为例
修改
使用关键字tags,它存在于所有的资源中
例如,指定VPC名称
在应用tf文件的时候,~代表资源修改,+代表新增
并且在执行计划中有8个属性保持不变
将会在控制台显示名称
如果删除掉tags,那么在执行计划中会以-显示
删除
修改tf
*推荐使用配置文件的方式,配置文件方便代码管理
如果把*.tf中的subnet删除,执行 terraform apply,则意味着删除该subnet
执行计划如下
可以看到整个资源都标有-,因为这个资源即将被删除
terraform destroy
执行
1 | terraform destroy -target [resource_type] [resource_name] |
例如
1 | terraform destroy -target aws_subnet dev-subnet-2 |
可以看到执行计划也是类似的
对比差异
检查aws和tf文件的差异
1 | terraform plan |
示例
总结
- provider: 用于导入一组或一段代码,类似import library
- resource: 类似于从库中调用一段函数
- data: 类似于返回已经存在的资源的函数
需要注意的是,这里的用户必须具有创建资源所必须的权限
另外,terraform在apply相同的tf文件的时候,会自动检查所有组件的状态
如果组件已经存在,则terraform不会再执行操作
也就是说每当应用相同的配置时,总会得到一样的结果。用户不需要记住当前组件的状态,也不会意外地破坏某些原有的组件。