簡體   English   中英

在AWS上對Terraform下一個可用的CIDR進行Terraform

[英]Terraform next available CIDR on AWS

我想看看我們的Terraform代碼是否有可能以編程方式找出用於VPC的下一個CIDR。

VPC CIDR范圍172.20.1-255.0 / 24

到目前為止我所擁有的:

data "aws_vpcs" "existing_vpcs" {

}

data "aws_vpc" "details" {
  count = "${length(data.aws_vpcs.existing_vpcs.ids)}"
  id = "${element(data.aws_vpcs.existing_vpcs.ids, count.index)}"
}

output "all_vpc_ids" {
  value = "${data.aws_vpcs.existing_vpcs.ids}"
}
output "current_vpc_cidrs" {
  value = "${data.aws_vpc.details.*.cidr_block}"
}
output "Current VPCs" {
  value = "${length(data.aws_vpcs.existing_vpcs.ids)}"
}

這將輸出如下內容:

Outputs:

Current VPCs = 8
all_vpc_ids = [
    vpc-xxx,
    vpc-xxx,
]
current_vpc_cidrs = [
    172.20.1.0/24,
    172.20.5.0/24,
]

我想將變量設置為172.20.2.0/24,因為它在技術上是下一個可用的。

Terraform的數據源功能旨在獲取不經常更改的數據,並且(通常)僅在代表操作員進行故意操作時才會更改。 遺憾的是,下一個“可用的”CIDR塊不是一個很好的候選者,因為創建下一個 VPC的行為會改變結果,導致結果配置永遠不會收斂。

相反,Terraform希望明確地進行這種分配。 在這種情況下,這意味着為您的網絡建立一個明確的編號約定,然后您可以在Terraform配置中描述該約定,允許Terraform根據配置中已有的信息查找或計算合適的VPC。

例如,AWS用戶通常定義一個映射,以便為每個區域和區域可用區域分配一個中心表中的數字(例如,直接在配置中的映射值,或通過數據源訪問的外部系統),然后為通過查詢該表可以發現VPC或子網。

如果您的系統具有更常見的網絡定期創建和銷毀特征而與AWS區域和可用區域沒有直接關系,我建議使用Terraform之外的一些外部軟件來管理子網的分配,然后通過由將該軟件轉換為Terraform作為輸入變量 這樣,可以將決策記錄在該外部系統中(例如,在數據庫中),並且如果需要應用更改則稍后再次調用。

具有異常使用情況的用戶有時也會發現最好將其配置的主要部分分解為可重用模塊,然后動態生成(使用預處理工具)最小根模塊,該模塊使用某些數據或決策調用該模塊在Terraform之外。 這種用法不在Terraform的主要用例范圍內,但它可以使用。 對於非常動態的環境,Terraform可能不適合這項工作。

如果我理解你的問題。 您可以使用帶count cidrnet函數。 自動從VPC網絡地址路徑中選擇。

resource "aws_subnet" "private" {
 count         = "${var.pvt_subnet_count}"
 cidr_block    = "${cidrsubnet(var.network_address_space,8,count.index + 1)}"
 vpc_id        = "${aws_vpc.ozonevpc.id}"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM