0

我是使用 AWS 尤其是 s3 的新手。我正在使用 aws go 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 标头。但是,我仍然收到错误消息。

4

1 回答 1

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)                                                                                                             
  }  
于 2017-07-20T19:13:48.333 回答