Closed27

TerraformでAWSリソースを作成するときに調べたこと

baticabatica

terraform apply時に「The role defined for the function cannot be assumed by Lambda.」エラー

エラー内容

Error: updating Lambda Function (Lambda関数名) configuration: operation error Lambda: UpdateFunctionConfiguration, https response error StatusCode: 400, RequestID: XXXXXXX, InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.

原因

IAMロール名を変更後、Lambda関数を定義しているtfファイルに反映していなかったため。

解決方法

IAMロールを変更後の名前で定義し直し、再度terraform apply実施。エラーが解消されることを確認。

参考

https://www.aipacommander.com/entry/2019/12/22/232449

baticabatica

git pull実行時にinvalid pathエラー

エラー内容

error: invalid path 'ファイルパス'
Merge with strategy ort failed.

環境

  • 作業PC:Windows 11

原因

WindowsとMac(or Linux)のファイルシステム(文字コード?)の違い。
恐らく、リモートリポジトリにある「invalid path」エラーが出力されるファイルは、
Mac OS(or Linux)で作成されたと思われる。

解決方法

以下コマンド実施。

$ git config --global core.protectNTFS false

参考

https://scrapbox.io/Mijinko/Windows版Gitのerror:_invalid_pathを解決する

baticabatica

git fetchしてもリモート追跡ブランチが作成されない

原因

最初のクローン時に --depth=1 を指定してクローンしており、shallowクローンとなっているため。

解決方法

以下コマンド実施。

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

参考

https://zenn.dev/snowcait/articles/d44d6b2bed2e4b29ada4

baticabatica

terraform plan時に「Provider configuration not present」エラー

エラー内容

│ Error: Provider configuration not present
│
│ To work with module.XXX.aws_wafv2_web_acl.XXXX its original provider
│ configuration at
│ module.XXX.provider["registry.terraform.io/hashicorp/aws"].virginia is
│ required, but it has been removed. This occurs when a provider
│ configuration is removed while objects created by that provider still exist
│ in the state. Re-add the provider configuration to destroy
│ module.XXX.aws_wafv2_web_acl.XXXX, after which you can remove the
│ provider configuration again.

原因

  • main.tfのproviderではなく、module毎のproviderの記載を読み込んでいたため
  • module毎のproviderの記載はコメントアウトされていた

解決方法

  • module毎のproviderの記載のコメントアウトを外して、再度apply実行。正常に実行されることを確認。
baticabatica

経緯

  • AWS WAFをterraformで作成したい。cloudfrontの前にWAFを置くには、「米国東部 (バージニア北部) リージョン」で作成する必要がある
  • AWS WAFのresourceにproviderを記載し、 terraform plan を実施したところ、上記エラーが発生
  • 以下URLを参考に .terraform/providers フォルダ配下を削除し、 terraform initterraform plan を実施したがエラーに変化無し

参考

https://qiita.com/kinchiki/items/215e1387b040b3118d96

baticabatica

TerraformでAWS WAF作成時に「WAFInvalidParameterException: Error reason: You have a duplicate priority. Priorities must be unique., field: RULE, parameter: X」エラー

エラー内容

 Error: updating WAFv2 WebACL (XXXXXXXX): WAFInvalidParameterException: Error reason: You have a duplicate priority. Priorities must be unique., field: RULE, parameter: X

原因

  • エラー内容の通り、WebACLの優先度(priority)が重複している

解決方法

  • priorityが重複しないように修正する

before

  rule {
    name     = "Example0Roule"
    priority = 1
  
    action {
      allow {}
    }

    statement {
      ・・・
  }
}

rule {
    name     = "Example1Roule"
    priority = 1
  
    action {
      allow {}
    }

    statement {
      ・・・
  }
}

after

  rule {
    name     = "Example0Roule"
    priority = 0
  
    action {
      allow {}
    }

    statement {
      ・・・
  }
}

rule {
    name     = "Example1Roule"
    priority = 1
  
    action {
      allow {}
    }

    statement {
      ・・・
  }
}
baticabatica

ACM証明書作成時に参考にしたドキュメント

参考

  • 「aws_acm_certificate_validation」の記述内容が古いため、最新ドキュメントを合わせて参照する

https://dev.classmethod.jp/articles/acm-cert-by-terraform/

  • 「aws_acm_certificate_validation」の新しい記述内容について

https://dev.classmethod.jp/articles/terraform-aws-certificate-validation/
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/acm_certificate_validation

  • Certificate Transparency(証明書の透明性)について
    • 設定されていないとブラウザで「保護されていない通信」と表示されてしまう。

https://www.websecurity.digicert.com/ja/jp/theme/ssl-certificate-transparency
https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-concepts.html#concept-transparency

baticabatica

CloudFrontにACM SSL証明書を紐づけた後terraform applyすると「cloudfront_default_certificate」がリプレースされる

原因

cloudfront_default_certificateがtrueになっているため。
CloudFrontのデフォルトの証明書を使用しようとしてしまう。

解決方法

cloudfront_default_certificateをfalseにする。

resource "aws_cloudfront_distribution" "frontend" {
(中略)
  viewer_certificate {
    cloudfront_default_certificate = false
(中略)
  }
(中略)
}

参考

https://katsuya-place.com/terraform-cloudfront/

このスクラップは2023/05/09にクローズされました