💻

[Terraform]profileよりも変数設定を優先する。

2021/12/03に公開

事象内容

ARN名など合っているはずなのにも関わらず、ValidationErrorが発生してしまう問題
原因はterraformで設定しているprofile誤りでした。。
(正しいprofile情報を設定することで正常に通りました。)
このようなミスが多いので気をつけよう。

発生条件

  • 0.12系から1.Xにterraformをバージョンアップ
  • AWS SSO のプロファイルでの実行時
  • アクセスキーのプロファイルであれば問題なし(試していないがおそらくスイッチロールのプロファイルでも問題ないかと思われ)
  • state rm してからimportしてもNG(ただstateファイルをみるとimport自体はできているという。)

エラー内容

│ Error: error retrieving ALB (arn:aws:elasticloadbalancing:ap-northeast-1:[AWSアカウントID]:loadbalancer/app/alb/XXXXXXXXX): ValidationError: 'arn:aws:elasticloadbalancing:ap-northeast-1:XX' is not a valid load balancer ARN
│ 	status code: 400, request id: d4a459e0-4706-4b57-a299-4582aed7b255
│
│   with module.elb.aws_lb.web-elb[0],
│   on elb/main.tf line 1, in resource "aws_lb" "main":
│    1: resource "aws_lb" "main" {

原因

多分これだよね。。(一応コメントしてみたけど)

AWS SSOのプロファイルでもregion情報は記載してあるのに。。

回避方法

AWS SSOのプロファイルでの実行時のみ発生するので
アクセスキーを設定した場合、そっちの認証情報が優先されることを利用する。

  • 一時認証払い出し
  • 変数設定
export AWS_ACCESS_KEY_ID="AXX"
export AWS_SECRET_ACCESS_KEY="****"
export AWS_SESSION_TOKEN="***"

で設定してから

terraform plan
terraform apply

など成功するようになった。

毎回実行時に読み込み直さないといけないのは面倒だが、現状他回避方法見つからず。。

GitHubで編集を提案

Discussion