2016-04-07 20 views
0

Resmi Golang AWS SDK ile S3'e dosya yüklemeye çalıştığım bir sorun yaşıyorum.AWS S3 Golang SDK - dosya yükleme - yanlış bölge

Kuzey Kaliforniya bölgesinde (us-west-1) olduğu belirtilen bir kovayı hedefliyorum. S3 kaşifinde görebiliyorum; teşekkür ederim,

creds := credentials.NewStaticCredentials(aws_access_key_id, aws_secret_access_key, token) 
_,err := creds.Get() 

config := &aws.Config{ 
    Region   :aws.String("us-west-1"), 
    Endpoint  :aws.String("s3.amazonaws.com"), 
    S3ForcePathStyle:aws.Bool(true), 
    Credentials  :creds, 
    //LogLevel  :0, 
} 

s3_client := s3.New(session.New(config)) 

params := &s3.PutObjectInput{ 
    Bucket  :aws.String(p_bucket_name_str),   
    Key   :aws.String(p_target_file__s3_path_str), 
    ACL   :aws.String("public-read"), 
    Body   :file_bytes, 
    ContentLength:aws.Int64(size), 
    ContentType :aws.String(file_type), 
    Metadata  :map[string]*string{ 
     "Key":aws.String("MetadataValue"), 
    }, 
} 

result,err := p_s3_client.PutObject(params) 

Herhangi bir öneri veya büyük yardımcı olacağını saptamak:

BucketRegionError: incorrect region, the bucket is not in 'Northern California' region 

Bu benim bağlantı kuruyorum nasıl: Ben koymak işlemini çalıştırdığınızda ancak aşağıdaki hatayı alıyorum . Bu çalışmayı daha kullanışlı hale getirmek için aws-sdk-goaws-sdk-go, s3manager aracı sunar.

+1

olarak belirtmek zorundasınız. Kovanınızın içte olduğundan emin misiniz? – 0x434D53

+0

Kepçe için AWS web aracı kontrol panelinde, bana Kuzey Kaliforniya'yı anlatıyor ... Amazon masalarında kontrol ettim ve Kuzey Kaliforniya haritaları bize-batı-1 ile eşleşiyor. Bu, aynı zamanda, web tarayıcısı üzerinden kova dosyalarına erişirken URL kalıbındaki bölge ... – deepblue

+0

Bize-west-1, us-west-2, us-east-1 bölgelerini denedim ve her üçü de aynı yanıtı döndürdüm "BucketRegionError: yanlış bölge, kova 'us-west-1' bölgesinde değil" (bölge bize-batı-1/us-west-2/us-doğu-1) – deepblue

cevap

1

. Bir dosya aşağıdaki gibi yükleyebilirsiniz: Eğer kova us-west-1 bölgede var ve isteğiniz us-east-1 bölgeye yapılıyor düşünüyorum çünkü bu hatayı görüyorsanız

creds := credentials.NewStaticCredentials(AccessKey, SecretKey, "") 
sess := session.New(&aws.Config{ 
    Credentials: creds, 
    Region:  &Region, 
}) 

uploader := s3manager.NewUploader(sess) 
uploader.Upload(&s3manager.UploadInput{ 
    ACL:   aws.String(acl), 
    Bucket:  aws.String(bucket), 
    Key:   aws.String(key), 
    ContentType: aws.String(contentType), 
    Body:  r, 
}) 
+0

Bu yöntemi bugün aradım ve gereken kod miktarını azaltırken yine de aynı hata yanıtını döndürür. :( – deepblue

1

. Gitmek için AWS SDK için s3.amazon.com son noktası us-east-1 bölgesini eşler. Eğer doğru bölge isteğiniz çalışmaya başlaması gerektiğini sizin yapılandırmasındaki Endpoint değeri kaldırmak sahip olduktan sonra

kova başlığında x-amz-bucket-region

ile aslında bölgeyi doğrulamak için kıvırın komutunu curl -I "https://<bucketname>.s3.amazonaws.com" kullanın. SDK, sağlanan bölgeye göre uç nokta URL'sini otomatik olarak belirleyecektir. Endpoint değeri, SDK'nın hizmet için arayacağı URL'yi geçersiz kılar.

SDK, bölgeleri farklı bir bölgede bulunduğunda bölgeyi otomatik olarak değiştirmez ve istek s3.amazon.com uç noktasına yapıldığında isteği yeniden gönderir.

0

Hata, bitiş noktası nedeniyle. Bitiş noktası "s3.amazonaws.com" varsayılan olarak us-east-1 bölgesi içindir. us-west-1 için kepçe oluşturmak istiyorsanız, son noktayı "s3-us-west-1.amazonaws.com"