AWS:PutBucketLifecycleConfigurationRequest返回NotImplemented

时间:2017-07-12 06:54:31

标签: amazon-s3 aws-sdk-go

我不熟悉AWS特别是s3。我正在使用aws去sdk。我正在尝试在下面的方法中设置存储桶生命周期规则;

func SetLifecycle(svc *s3.S3, bucket , id , status, md5 string) (*s3.PutBucketLifecycleConfigurationOutput, error) {

    input := &s3.PutBucketLifecycleConfigurationInput{
        Bucket: aws.String(bucket),
        LifecycleConfiguration: &s3.BucketLifecycleConfiguration{
            Rules: []*s3.LifecycleRule{
                {
                    ID:     aws.String(id),
                    Status: aws.String(status),
                },
            },
        },
    }
    req, resp := svc.PutBucketLifecycleConfigurationRequest(input)
    req.HTTPRequest.Header.Set("Content-Md5", string(md5))

    err := req.Send()

    return resp, err
}

在测试中调用上述方法:

func (suite *HeadSuite) TestLifecycleSet() {

      assert := suite
    //acl := map[string]string{"Authorization": ""}

    bucket := GetBucketName()
    err := CreateBucket(svc, bucket)


    content := strings.NewReader("Enabled")
    h := md5.New()
    content.WriteTo(h)
    sum := h.Sum(nil)
    b := make([]byte, base64.StdEncoding.EncodedLen(len(sum)))
    base64.StdEncoding.Encode(b,sum)

    md5 := string(b)

    _, err = SetLifecycle(svc, bucket, "rule1", "Enabled", md5)
    assert.Nil(err)
}

我一直收到错误NotImplemented。为什么会这样?我最初没有添加我在阅读putbucketlifecycle文档后添加的content-md5标头。但是,我仍然会收到错误。

1 个答案:

答案 0 :(得分:0)

我不需要计算MD5标头。但是,我注意到我需要设置一个前缀,这在文档中指定。此外,您使用的是哪个版本的SDK? 这是下面的一个工作示例

  input := &s3.PutBucketLifecycleConfigurationInput{                                                                       
    Bucket: aws.String(bucket),                                                                                            
    LifecycleConfiguration: &s3.BucketLifecycleConfiguration{                                                              
      Rules: []*s3.LifecycleRule{                                                                                          
        {                                                                                                                  
          Prefix: aws.String(prefix),                                                                                       
          Status: aws.String(status),                                                                                      
          ID:     aws.String(id),                                                                                          
          Expiration: &s3.LifecycleExpiration{                                                                             
            Days: aws.Int64(1),                                                                                            
          },                                                                                                               
        },                                                                                                                 
      },                                                                                                                   
    },                                                                                                                     
  }                                                                                                                        
  req, resp := svc.PutBucketLifecycleConfigurationRequest(input)                                                           
  if err := req.Send(); err != nil {                                                                                       
    panic(err)                                                                                                             
  }