インスタンスをリクエストする前に、インスタンスタイプ(t3.mediumなど)が利用可能なアベイラビリティーゾーンを取得する方法はありますか?次のコードを実行しようとしていますが、特定の地域では次のエラーで失敗します。
Error: Error launching source instance: Unsupported: Your requested instance type (t3.micro) is not supported in your requested Availability Zone (us-east-1e). Please retry your request by not specifying an Availability Zone or choosing us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f.
明らかに、サポートされているものの1つに可用性ゾーンを手動で指定できますが、ハードコーディングされている可用性ゾーンを最小限に抑えたいと考えています。
コメントで述べたように、優先タイプが利用できない場合に別のタイプのインスタンスを起動できれば、aws_ec2_instance_type_offering
データソースを使用t2
して、影響を受けるアベイラビリティーゾーンのインスタンスファミリーにフォールバックできます。
許可されるインスタンスタイプに次のテラフォームのコードが出力さアベイラビリティゾーンのマップを、好むt3.micro
が、バックに落ちるt2.micro
のt3
家族は使用できません。
provider "aws" {
region = "us-east-1"
}
data "aws_availability_zones" "all" {}
data "aws_ec2_instance_type_offering" "example" {
for_each = toset(data.aws_availability_zones.all.names)
filter {
name = "instance-type"
values = ["t2.micro", "t3.micro"]
}
filter {
name = "location"
values = [each.value]
}
location_type = "availability-zone"
preferred_instance_types = ["t3.micro", "t2.micro"]
}
output "foo" {
value = { for az, details in data.aws_ec2_instance_type_offering.example : az => details.instance_type }
}
この出力:
foo = {
"us-east-1a" = "t3.micro"
"us-east-1b" = "t3.micro"
"us-east-1c" = "t3.micro"
"us-east-1d" = "t3.micro"
"us-east-1e" = "t2.micro"
"us-east-1f" = "t3.micro"
}
これを出力するだけでなく、アベイラビリティーゾーンを反復処理して、aws_instance
リソースのインスタンスタイプを設定できるはずです。
またはt3
、出力を次のように変更することで、出力をフィルタリングして、インスタンスファミリを提供できるAZのリストだけに減らすこともできます。
output "foo" {
value = keys({ for az, details in data.aws_ec2_instance_type_offering.example : az => details.instance_type if details.instance_type == "t3.micro" })
}
これにより、t3
インスタンスファミリを含まないアベイラビリティーゾーンをスキップして、以下が出力されます。
foo = [
"us-east-1a",
"us-east-1b",
"us-east-1c",
"us-east-1d",
"us-east-1f",
]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加