Terraform:导入存储 class 区域和提供商区域存在差异的 s3 存储桶时出错
Terraform: Error while importing s3 bucket with difference in storage class region and provider region
我正在尝试将 us-east-1
区域中的存储桶导入 ap-south-1
区域中的父模块。我现在不想将存储桶迁移到 ap-south-1
区域,但我希望它的状态位于具有提供程序区域 ap-south-1
的父模块中。我在做这件事时遇到了错误。
命令:
terraform import aws_s3_bucket.cdn staging.domain.com
错误:
terraform import aws_s3_bucket.cdn staging.domain.com [15:02:27]
aws_s3_bucket.cdn: Importing from ID "staging.domain.com"...
Error: aws_s3_bucket.cdn (import id: staging.domain.com): import aws_s3_bucket.cdn (id: staging.domain.com): Error importing AWS S3 bucket policy: BucketRegionError: incorrect region, the bucket is not in 'ap-south-1' region at endpoint ''
status code: 301, request id: , host id:
现在有可能吗?
我认为存储桶的区域 (us-east-1) 与父模块的区域 (ap-south-1) 不匹配。
所以我建议使用多个提供商。
https://www.terraform.io/docs/configuration/providers.html#alias-multiple-provider-instances
1. 为 us-east-1 区域
创建一个 aws 提供商
// default aws provider for parent module
provider "aws" {
...
region = "ap-south-1"
...
}
// add for us-east-1
provider "aws" {
...
region = "us-east-1"
alias = "us-east-1"
...
}
- 将新的 aws 提供商设置为 aws_s3_bucket.cdn
resource "aws_s3_bucket" "cdn" {
...
provider = "aws.us-east-1"
...
}
terraform import -provider=aws.us-east-1 aws_s3_bucket.cdn staging.domain.com
这对我来说有点困难,最终答案是“使用正确的区域”。所以我在 us-west-2 中有一个桶,但我的其他东西在 us-east-1 中。我需要使用:
provider "aws" {
alias = "oregon"
region = "us-west-2"
}
resource "aws_s3_bucket" "tf_logs" {
provider = aws.oregon
bucket = "my-bucket-name"
}
然后成功了。
我发现这个问题的方法是 运行 terraform 和更多日志记录:
TF_LOG=DEBUG terraform import aws_s3_bucket.tf_logs my-bucket-name
然后它给了我一个神秘的“错误请求”,我将其放入 Postman,这给了我这个有用的消息:
HTTP 400 Bad Request
<Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-west-2'</Message>
我正在尝试将 us-east-1
区域中的存储桶导入 ap-south-1
区域中的父模块。我现在不想将存储桶迁移到 ap-south-1
区域,但我希望它的状态位于具有提供程序区域 ap-south-1
的父模块中。我在做这件事时遇到了错误。
命令:
terraform import aws_s3_bucket.cdn staging.domain.com
错误:
terraform import aws_s3_bucket.cdn staging.domain.com [15:02:27]
aws_s3_bucket.cdn: Importing from ID "staging.domain.com"...
Error: aws_s3_bucket.cdn (import id: staging.domain.com): import aws_s3_bucket.cdn (id: staging.domain.com): Error importing AWS S3 bucket policy: BucketRegionError: incorrect region, the bucket is not in 'ap-south-1' region at endpoint ''
status code: 301, request id: , host id:
现在有可能吗?
我认为存储桶的区域 (us-east-1) 与父模块的区域 (ap-south-1) 不匹配。
所以我建议使用多个提供商。 https://www.terraform.io/docs/configuration/providers.html#alias-multiple-provider-instances
1. 为 us-east-1 区域
// default aws provider for parent module
provider "aws" {
...
region = "ap-south-1"
...
}
// add for us-east-1
provider "aws" {
...
region = "us-east-1"
alias = "us-east-1"
...
}
- 将新的 aws 提供商设置为 aws_s3_bucket.cdn
resource "aws_s3_bucket" "cdn" {
...
provider = "aws.us-east-1"
...
}
terraform import -provider=aws.us-east-1 aws_s3_bucket.cdn staging.domain.com
这对我来说有点困难,最终答案是“使用正确的区域”。所以我在 us-west-2 中有一个桶,但我的其他东西在 us-east-1 中。我需要使用:
provider "aws" {
alias = "oregon"
region = "us-west-2"
}
resource "aws_s3_bucket" "tf_logs" {
provider = aws.oregon
bucket = "my-bucket-name"
}
然后成功了。
我发现这个问题的方法是 运行 terraform 和更多日志记录:
TF_LOG=DEBUG terraform import aws_s3_bucket.tf_logs my-bucket-name
然后它给了我一个神秘的“错误请求”,我将其放入 Postman,这给了我这个有用的消息:
HTTP 400 Bad Request
<Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-west-2'</Message>