Last active
September 11, 2020 07:43
-
-
Save santosh/3cc0c0cd84de6df1d3511ad70c548969 to your computer and use it in GitHub Desktop.
Some fiddling with AWS Go's SDK. Experiments done with S3.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
svc := s3.New(sess) | |
if len(os.Args) != 4 { | |
exitErrorf("Bucket, item, and other bucket names required\nUsage: bucket item other-bucket") | |
} | |
bucket := os.Args[1] | |
item := os.Args[2] | |
other := os.Args[3] | |
source := bucket + "/" + item | |
_, err := svc.CopyObject(&s3.CopyObjectInput{ | |
Bucket: aws.String(other), | |
CopySource: aws.String(source), | |
Key: aws.String(item), | |
}) | |
if err != nil { | |
exitErrorf("Unable to copy item from bucket %q to bucket %q, %v", bucket, other, err) | |
} | |
err = svc.WaitUntilObjectExists(&s3.HeadObjectInput{Bucket: aws.String(other), Key: aws.String(item)}) | |
if err != nil { | |
exitErrorf("Error occured while waiting for item %q to be copied to bucket %q, %v", bucket, item, other, err) | |
} | |
fmt.Printf("Item %q successfully copied from bucket %q to bucket %q\n", item, bucket, other) | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
svc := s3.New(sess) | |
if len(os.Args) != 2 { | |
exitErrorf("Bucket name missing\nUsage %s bucket_name", os.Args[0]) | |
} | |
bucket := os.Args[1] | |
_, err := svc.CreateBucket(&s3.CreateBucketInput{ | |
Bucket: aws.String(bucket), | |
}) | |
if err != nil { | |
exitErrorf("Unable to create bucket %q, %v", bucket, err) | |
} | |
// Wait until bucket is crated before finishing | |
fmt.Printf("Waiting for bucket %q to be created...\n", bucket) | |
err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{ | |
Bucket: aws.String(bucket), | |
}) | |
if err != nil { | |
exitErrorf("Error occured while waiting for bucket to be created, %v", bucket) | |
} | |
fmt.Printf("Bucket %q successfully created\n", bucket) | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
svc := s3.New(sess) | |
if len(os.Args) != 3 { | |
exitErrorf("Bucket and object name required\nUsage: %s bucket_name object_name", os.Args[0]) | |
} | |
bucket := os.Args[1] | |
obj := os.Args[2] | |
_, err := svc.DeleteObject(&s3.DeleteObjectInput{Bucket: aws.String(bucket), Key: aws.String(obj)}) | |
if err != nil { | |
exitErrorf("Unable to delete object %q from bucket %q, %v", obj, bucket, err) | |
} | |
err = svc.WaitUntilObjectNotExists(&s3.HeadObjectInput{Bucket: aws.String(bucket), Key: aws.String(obj)}) | |
fmt.Printf("Object %q successfully deleted\n", obj) | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
"github.com/aws/aws-sdk-go/service/s3/s3manager" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
downloader := s3manager.NewDownloader(sess) | |
if len(os.Args) != 3 { | |
exitErrorf("bucket and item name required\nUsage %s bucket_name item", os.Args[0]) | |
} | |
bucket := os.Args[1] | |
item := os.Args[2] | |
file, err := os.Create(item) | |
if err != nil { | |
exitErrorf("Unable to open file %q, %v", item, err) | |
} | |
defer file.Close() | |
numBytes, err := downloader.Download(file, | |
&s3.GetObjectInput{ | |
Bucket: aws.String(bucket), | |
Key: aws.String(item), | |
}) | |
if err != nil { | |
exitErrorf("Unable to download item %q, %v", err) | |
} | |
fmt.Println("Downloaded", file.Name(), numBytes, "bytes") | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
svc := s3.New(sess) | |
if len(os.Args) != 2 { | |
exitErrorf("Bucket name required\nUsage: %s bucket_name", os.Args[0]) | |
} | |
bucket := os.Args[1] | |
resp, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{Bucket: aws.String(bucket)}) | |
if err != nil { | |
exitErrorf("Unable to list items in bucket %q, %v", bucket, err) | |
} | |
for _, item := range resp.Contents { | |
fmt.Println("Name: ", *item.Key) | |
fmt.Println("Last Modified:", *item.LastModified) | |
fmt.Println("Size: ", *item.Size) | |
fmt.Println("Storage class:", *item.StorageClass) | |
} | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3" | |
) | |
// list buckets | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
svc := s3.New(sess) | |
result, err := svc.ListBuckets(nil) | |
if err != nil { | |
exitErrorf("Unable to list buckets, %v", err) | |
} | |
fmt.Println("Buckets:") | |
for _, b := range result.Buckets { | |
fmt.Printf("* %s created on %s\n", aws.StringValue(b.Name), aws.TimeValue(b.CreationDate)) | |
} | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3/s3manager" | |
) | |
func main() { | |
sess := session.Must(session.NewSessionWithOptions(session.Options{ | |
SharedConfigState: session.SharedConfigEnable, | |
Config: aws.Config{Region: aws.String("ap-south-1")}, | |
})) | |
// create S3 service client | |
uploader := s3manager.NewUploader(sess) | |
if len(os.Args) != 3 { | |
exitErrorf("bucket and file name required\nUsage %s bucket_name filename", os.Args[0]) | |
} | |
bucket := os.Args[1] | |
filename := os.Args[2] | |
file, err := os.Open(filename) | |
if err != nil { | |
exitErrorf("Unable to open file %q, %v", err) | |
} | |
defer file.Close() | |
_, err = uploader.Upload(&s3manager.UploadInput{ | |
Bucket: aws.String(bucket), | |
Key: aws.String(filename), | |
Body: file, | |
}) | |
if err != nil { | |
exitErrorf("Unable to upload %q to %q, %v") | |
} | |
fmt.Printf("Successfully uploaded %q to %q\n", filename, bucket) | |
} | |
func exitErrorf(msg string, args ...interface{}) { | |
fmt.Fprintf(os.Stderr, msg+"\n", args...) | |
os.Exit(1) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment