🔥

terragruntのバージョンを上げたらNoSuchBucketPolicyが出るようになった

2024/01/11に公開

terragrunt initなどで下記のエラーが発生するようになりました。
ERRO[0001] NoSuchBucketPolicy: The bucket policy does not exist

これは.terraformディレクトリがすでにある場合は、発生しないので、人によっては発生したりしなかったりして厄介です。

terragruntのバージョンはv0.31.0 -> v0.54.12にしました。
と言ってもdockerを使ってるのでalpine/terragrunt:1.6.6を使うようにしたところでした。

解決方法としては、適当なs3のバケットポリシーを設定するか、
↓の設定を両方とも追加するかでOKでした。

skip_bucket_root_access = true
skip_bucket_enforced_tls = true

https://terragrunt.gruntwork.io/docs/reference/config-blocks-and-attributes/#remote_state

ただ、最初から、state用のバケットをterragruntが作成してくれるままに任せる場合は、上記の設定はなくても正常に動作します。その場合は、root_access用のポリシーとhttpsを強制するポリシーを自動で追加してくれます。

サンプルコードは下記になります。
https://github.com/na8esin/terragrunt-sample

docker-compose.ymlに下記の設定が入っているため、awsのアクセス方法によっては変える必要があるかもしれません。

volumes:
      - ~/.aws:/root/.aws

自分は事前にホストマシンで、aws sso loginして試しています。

おまけ

検証中にこんな感じのエラーに遭遇しました。

/terraform/environments/stage/frontend-app # terragrunt init
Remote state S3 bucket watanabe-terraform-state does not exist or you don't have permissions to access it. Would you like Terragrunt to create it? (y/n) y
ERRO[0005] BucketRegionError: incorrect region, the bucket is not in 'ap-northeast-1' region at endpoint '', bucket is in 'ap-northeast-2' region

これはすでにap-northeast-2にwatanabe-terraform-stateというバケットが存在してたための様でした。webのマネジメントコンソール上で確認すると確かに存在してました。

ta-watanabe-terraform-stateに変えると発生しなくなりました。

Discussion