Terraform 将 S3 存储桶名称附加到端点 URL?

问题描述 投票:0回答:1

我在通过 terraform 定义的 localstack 中设置了一个非常简单的 S3:

provider "aws" {
  region                  = "us-east-1"  # Change to your desired region
  access_key              = "test"       # Access key for LocalStack
  secret_key              = "test"       # Secret key for LocalStack
  skip_credentials_validation = true
  skip_requesting_account_id = true
  skip_metadata_api_check     = true

  endpoints {
    s3 = "http://locahost:4566"
  }
}
resource "aws_s3_bucket" "images_bucket" {
  bucket = "images-bucket"
  acl    = "private"

  tags = {
    Environment = "Development"
  }
}

我知道 S3 服务可用并且正在运行,因为我可以通过终端呼叫

awslocal s3api create-bucket --bucket sample-bucket
。然而,当我运行
terraform apply
并说“是”时,它告诉我它正在“创建”S3 存储桶 20 秒左右,然后抛出:

 Error: Error creating S3 bucket: RequestError: send request failed
│ caused by: Put "http://images-bucket.localhost:4566/": dial tcp: lookup images-bucket.127.0.0.1 on [2603:7000:4df0:8610::1]:53: no such host
│ 
│   with module.S3_module.aws_s3_bucket.images_bucket,
│   on S3/main.tf line 1, in resource "aws_s3_bucket" "images_bucket":
│    1: resource "aws_s3_bucket" "images_bucket" {

在我看来,terraform 以某种方式将存储桶名称附加到定义的端点的前面。我不确定这就是错误的原因,但考虑到

terraform
的定义是如此基本,这似乎很可能。为什么要将存储桶名称添加到端点前面?我怎样才能防止这种情况发生?

我可以在另一篇post中看到其他人对此有疑问。那里的答案建议将(terraform 等效项)

s3_force_path_style = true
添加到提供者定义中。这仍然会引发相同的错误,但现在路径为
http://localhost:4566/images-bucket

需要明确的是,我还在此端点定义了一系列其他资源,并且它们工作正常。

Docker ps
确认端口已正确映射。

amazon-s3 terraform localstack
1个回答
0
投票

在这种情况下,您可以将 S3 端点用作:

s3 = "http://localhost.localstack.cloud"

在 LocalStack 中,S3 的工作方式与其他服务不同,尤其是其端点的设置方式。您可以在 S3 文档中找到此内容:https://docs.localstack.cloud/user-guide/aws/s3/

© www.soinside.com 2019 - 2024. All rights reserved.