0

Auto-Scaling グループと、それを AWS でサポートするために必要なすべてのインフラストラクチャをプロビジョニングする Terraform モジュールがあります。通常、Terraform はインフラストラクチャ コードの変更を検出するのに非常に優れています。しかし、今日、Terraform がロード バランサーを管理している場合、リージョンを変更するとエラーが発生することに気付きました。

エラーを再現するための最小限の例を作成しました (この例には有効な AWS プロファイルが必要です)

# =========================================================================================
#                 PROVIDER

provider "aws" {
  region  = "${var.aws-region}"
  profile = "${var.aws-profile}"
}

# =========================================================================================
#                 VARIABLES

variable "aws-region" {
  description = "The AWS region"
  type        = "string"
  default = "eu-west-3"
}

variable "aws-profile" {
  description = "The name of the AWS shared credentials account."
  type        = "string"
}

# =========================================================================================
#                 LOAD BALANCER

resource "aws_lb" "alb" {
  name                       = "load-balancer"
  internal                   = false
  load_balancer_type         = "application"
  enable_deletion_protection = false
  subnets                    = ["${aws_subnet.subnet-1.id}", "${aws_subnet.subnet-2.id}"]

}

# =========================================================================================
#                 NETWORKING

resource "aws_vpc" "vpc" {
  cidr_block           = "10.0.0.0/16"
}

resource "aws_subnet" "subnet-1" {
  vpc_id            = "${aws_vpc.vpc.id}"
  cidr_block        = "10.0.0.0/24"
  availability_zone = "${var.aws-region}a"
}

resource "aws_subnet" "subnet-2" {
  vpc_id            = "${aws_vpc.vpc.id}"
  cidr_block        = "10.0.1.0/24"
  availability_zone = "${var.aws-region}b"
}


resource "aws_internet_gateway" "ig" {
  vpc_id = "${aws_vpc.vpc.id}"
}

エラーを再現するには:

  • 1) 走るterraform init; terraform apply
  • 2) 地域を変更する
  • 3) 手順 1) を繰り返すと、エラーが発生します。

エラーは次のとおりです。

エラー: 状態の更新エラー: 1 個のエラーが発生しました:
* module.asg-local.aws_lb.alb: 1 個のエラーが発生しました:
* module.asg-local.aws_lb.alb: aws_lb.alb: ALB の取得中にエラーが発生しました:
ValidationError:
'arn:aws:elasticloadbalancing:us-east-1:199344973012:loadbalancer/app/rafa-lizzie-alb/ccbf16e255c2f904' は有効なロード バランサー ARN ステータス コードではありません: 400、リクエスト ID: 8b28f0d8-2ec2-11e9- 896a-4ffb7ae94bb8

リージョンを変更することはあまり一般的ではないことは承知していますが、いずれにしても発生する可能性がありますよね? これが Terraform の予想される動作なのか、それともバグなのかについても知りたいです。

4

1 に答える 1

1

これは予期される動作です。何が起こっているかというと、plan/apply を実行すると、すべてのリソースがその状態を「更新」しようとします。プロバイダーのリージョンを変更したため、リソース (間違ったリージョン) を取得して状態を「更新」することができません。

基本的に「-refresh=false」を渡して実行を計画および適用することにより、この動作をバイパスできます。

于 2021-06-24T19:42:10.060 に答える