Reputation: 3314
I am trying to upload file bytes to S3 AWS, using the goamz/s3 package in Go (lang).
When running the following code:
var (
awsAuth aws.Auth
region aws.Region
connection s3.S3
bucket *s3.Bucket
)
func init() {
// Set up the AWS S3 Connection config.
awsAuth = aws.Auth{
AccessKey: os.Getenv("ACCESS_KEY"), // change this to yours
SecretKey: os.Getenv("SECRET_KEY"),
}
fmt.Println("AWS: ", awsAuth)
region := aws.EUWest
connection := s3.New(awsAuth, region)
bucket = connection.Bucket(os.Getenv("S3_BUCKET")) // change this your bucket name
}
func uploadToS3(filename string, byteArray *[]byte) error {
var err error
//should check if file already uploaded, encrypted by this password
fmt.Printf("[uploadToS3] starting upload of %s\n", filename)
err = bucket.Put(filename, *byteArray, "text/plain; charset=utf-8", s3.PublicRead)
if err != nil {
fmt.Printf("[uploadToS3] error uploading: %s\n", err)
return err
} else {
fmt.Printf("[uploadToS3] done uploading %s\n", filename)
return nil
}
return nil // redundancy
}
I get the error
[uploadToS3] error uploading: Put /filename: unsupported protocol scheme ""
Judging from unsupported protocol scheme while creating ec2 Security group it seems that the cause is an incorrect region, however it is not the case as it is being set in init()
.
Any thoughts would be greatly appreciated.
Upvotes: 5
Views: 11113
Reputation: 2454
I experienced this issue with the SDK V2 while setting up an AWS config to allow me to specify the AWS endpoint (I point my service to localstack during integration tests).
I resolved it by using a custom endpoint resolver.
conf, err := config.LoadDefaultConfig(
ctx,
config.WithRegion(region),
config.WithRetryMaxAttempts(3),
config.WithEndpointResolver(aws.EndpointResolverFunc(func(_, region string) (aws.Endpoint, error) {
if internal.AwsEndpoint != "" {
return aws.Endpoint{
PartitionID: "aws",
URL: internal.AwsEndpoint,
SigningRegion: region,
}, nil
}
// returning EndpointNotFoundError will allow the service to fallback to it's default resolution
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
})),
)
...
client := s3.NewFromConfig(conf, func(o *s3.Options) {
o.UsePathStyle = true
})
Upvotes: 1
Reputation: 3314
To anyone who might have the same issue. It is an error you get when the bucket name is not set. Seems stupid, but I was running this inside docker, and had forgot to tell docker what the enviroment variable was that held the bucket name. Therefore when I did echo $S3_BUCKET
on my terminal, I got the bucket name, and therefore thought all was good. However I didn't test that inside the docker container. Fool on me.
Upvotes: 5