2017-07-12 3 views
0

Je suis nouveau à travailler avec AWS en particulier s3. J'utilise le aws go sdk. J'essaie de définir des règles de cycle de vie de seau dans la méthode ci-dessous;AWS: PutBucketLifecycleConfigurationRequest renvoie NonImplemented

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 
} 

et appelant la méthode ci-dessus dans un test:

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) 
} 

Je continue à obtenir une erreur NotImplemented. Pourquoi cela arriverait-il? Au départ, je n'avais pas ajouté un en-tête content-md5 que j'avais ajouté après avoir lu la documentation putbucketlifecycle. Cependant, j'ai toujours une erreur.

Répondre

0

Je n'ai pas besoin de calcul de l'en-tête MD5. Cependant, j'ai remarqué que j'avais besoin de définir un préfixe, qui est spécifié dans la documentation. En outre, quelle version du SDK utilisez-vous? Voici un exemple de travail ci-dessous

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)                            
    }