代码之家  ›  专栏  ›  技术社区  ›  sanket kurane

Terraform文件使用循环在多个区域中创建多个s3存储桶,我想根据区域附加自定义存储桶策略

  •  0
  • sanket kurane  · 技术社区  · 2 年前

    Terraform文件使用循环在多个区域中创建多个s3存储桶,我想根据区域附加自定义存储桶策略。

    我可以使用下面的代码创建bucket,但没有附加策略。

    variable "bucket_prefix" {
      default = "sankethcl1234"
    }
    
    # Create S3 buckets in us-east-1
    provider "aws" {
      alias  = "us-east-1"
      region = "us-east-1"
    }
    
    # Create S3 buckets in us-west-1
    provider "aws" {
      alias  = "us-west-1"
      region = "us-west-1"
    }
    
    # Create 2 S3 buckets in us-east-1
    resource "aws_s3_bucket" "sankethcl1234_us_east_1" {
      count    = 2
      provider = aws.us-east-1
      bucket   = "${var.bucket_prefix}-us-east-1-${count.index + 1}"
      acl      = "private"
    }
    
    # Define a bucket policy for S3 buckets in us-east-1
    resource "aws_s3_bucket_policy" "sankethcl1234_us_east_1" {
      count  = 2
      bucket = aws_s3_bucket.sankethcl1234_us_east_1[count.index].id
      policy = templatefile("${path.module}/bucket_policy_east.json", { bucket_name = aws_s3_bucket.sankethcl1234_us_east_1[count.index].id })
    }
    
    # Create 2 S3 buckets in us-west-1
    resource "aws_s3_bucket" "sankethcl1234_us_west_1" {
      count    = 2
      provider = aws.us-west-1
      bucket   = "${var.bucket_prefix}-us-west-1-${count.index + 1}"
    }
    
    # Define a bucket policy for S3 buckets in us-west-1
    resource "aws_s3_bucket_policy" "sankethcl1234_us_west_1" {
      count  = 2
      bucket = aws_s3_bucket.sankethcl1234_us_west_1[count.index].id
      policy = templatefile("${path.module}/bucket_policy_west.json", { bucket_name = aws_s3_bucket.sankethcl1234_us_west_1[count.index].id })
    }
    

    请帮助我上传以下策略错误

    错误:放入S3 Bucket(sankethcl234-us-est-1-2)策略:操作错误S3:PutBucketPolicy,https响应错误StatusCode:301,RequestID:DNG0HE3RABQTZNJ6,HostID:mmJps0saH/1+HskYQPtwXG71ofDOUSXm95JKy4dZY5IpDpI5xuFFO3L1jU+NuyMJ49THk5rPkUs=,api Error PermanentRedirect:必须使用指定的终结点对您试图访问的Bucket进行寻址。请将所有未来的请求发送到此端点。使用aws_s3_bucket_policy.sankethcl234_us_east_1[1], 在主.tf第49行,在资源“aws_s3_bucket_policy”“sankethcl234_us_east_1”中: 49:资源“aws_s3_bucket_policy”“sankethcl234_us_east_1”{

    错误:放入S3存储桶(sankethcl234-us-est-1-1)策略:操作错误S3:PutBucketPolicy,https响应错误StatusCode:301,RequestID:DNG5Z9NBPMXZAHEH,HostID:TVe1g0aYuuDF/6cT/KC/iGJOmwnDvsLdjkRhte6AwpHdqzewWsV/MUVed+B/Z0wohPXTnOlLp8I=,api错误PermanentRedirect:必须使用指定的终结点对您试图访问的存储桶进行寻址。请将所有未来的请求发送到此端点。使用aws_s3_bucket_policy.sankethcl234_us_east_1[0], 在主.tf第49行,在资源“aws_s3_bucket_policy”“sankethcl234_us_east_1”中: 49:资源“aws_s3_bucket_policy”“sankethcl234_us_east_1”{

    错误:放入S3 Bucket(sankethcl1234-us-west-1-2)策略:操作错误S3:PutBucketPolicy,https响应错误StatusCode:301,RequestID:G4B8RZYRDH20298A,HostID:bDgPRXI49MSxEdesSpIBueXVnvV1LHD5guBm+H3vi1wJNgtOjrZEGiFjAgofJFlWQO5UUn4YfM=,api错误PermanentRedirect:必须使用指定的终结点寻址您试图访问的Bucket。请将所有未来的请求发送到此端点。使用aws_s3_bucket_policy.sankethcl234_us_west_1[1], 在主.tf第77行,在资源“aws_s3_bucket_policy”“sankethcl234_us_west_1”中: 77:资源“aws_s3_bucket_policy”“sankethcl234_us_west_1”{

    错误:放入S3 Bucket(sankethcl234-us-west-1-1)策略:操作错误S3:PutBucketPolicy,https响应错误StatusCode:301,RequestID:G4BC4QJP0YQ6NPHS,HostID:HSHXH4p3Has2DEC0GoQpzecRjMdUhd//9FpdFiyq1oT+FnOEyvIvKXcg8GJlTj2TsDG781tEM=,api Error PermanentRedirect:必须使用指定的终结点对您试图访问的Bucket进行寻址。请将所有未来的请求发送到此端点。使用aws_s3_bucket_policy.sankethcl234_us_west_1[0], 在主.tf第77行,在资源“aws_s3_bucket_policy”“sankethcl234_us_west_1”中: 77:资源“aws_s3_bucket_policy”“sankethcl234_us_west_1”{

    我尝试创建s3 bucket,但json中的策略无法上传。

    1 回复  |  直到 2 年前
        1
  •  2
  •   Marko E    2 年前

    每个资源,包括bucket策略,都必须使用相同的提供程序配置才能附加到相应的bucket。否则,terraform将尝试将它们附加到使用非别名提供者的bucket(即。, provider "aws" )。换句话说:

    resource "aws_s3_bucket" "sankethcl1234_us_east_1" {
      count    = 2
      provider = aws.us-east-1
      bucket   = "${var.bucket_prefix}-us-east-1-${count.index + 1}"
      acl      = "private"
    }
    
    resource "aws_s3_bucket_policy" "sankethcl1234_us_east_1" {
      provider = aws.us-east-1
      count    = 2
      bucket   = aws_s3_bucket.sankethcl1234_us_east_1[count.index].id
      policy   = templatefile("${path.module}/bucket_policy_east.json", { 
        bucket_name = aws_s3_bucket.sankethcl1234_us_east_1[count.index].id 
      })
    }
    
    resource "aws_s3_bucket" "sankethcl1234_us_west_1" {
      provider = aws.us-west-1
      count    = 2
      bucket   = "${var.bucket_prefix}-us-west-1-${count.index + 1}"
    }
    
    resource "aws_s3_bucket_policy" "sankethcl1234_us_west_1" {
      provider = aws.us-west-1
      count    = 2
      bucket   = aws_s3_bucket.sankethcl1234_us_west_1[count.index].id
      policy   = templatefile("${path.module}/bucket_policy_west.json", { 
        bucket_name = aws_s3_bucket.sankethcl1234_us_west_1[count.index].id
      })
    }
    

    然后,您将对所有希望在其中包含bucket和bucket策略的区域执行相同的操作。