Last active
July 20, 2019 00:19
-
-
Save jboelter/6f5bd598673eb0e606f10660495fc175 to your computer and use it in GitHub Desktop.
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
// Uses the default AWS SDK Credentials; e.g. via the environment | |
// AWS_REGION=region AWS_ACCESS_KEY_ID=key AWS_SECRET_ACCESS_KEY=secret | |
package main | |
import ( | |
"flag" | |
"fmt" | |
"io" | |
"log" | |
"os" | |
"time" | |
"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() { | |
var bucket string | |
var key string | |
var debug bool | |
flag.StringVar(&bucket, "bucket", "", "s3 bucket") | |
flag.StringVar(&key, "key", "", "s3 key (path)") | |
flag.BoolVar(&debug, "debug", false, "show aws sdk debug output") | |
flag.Parse() | |
if len(bucket) == 0 || len(key) == 0 { | |
flag.Usage() | |
os.Exit(-1) | |
} | |
cfg := aws.NewConfig() | |
if debug { | |
log := log.New(os.Stderr, "", log.LstdFlags) | |
cfg = cfg.WithLogger( | |
aws.LoggerFunc(func(args ...interface{}) { log.Println(args) }), | |
).WithLogLevel(aws.LogDebugWithSigning) | |
} | |
awsSession := session.New(cfg) | |
fmt.Fprintf(os.Stderr, "attempting to download s3://%v/%v\n", bucket, key) | |
start := time.Now() | |
s3Svc := s3.New(awsSession) | |
result, err := s3Svc.GetObject(&s3.GetObjectInput{ | |
Bucket: aws.String(bucket), | |
Key: aws.String(key), | |
}) | |
if err != nil { | |
fmt.Fprintln(os.Stderr, err) | |
os.Exit(1) | |
} | |
n, err := io.Copy(os.Stdout, result.Body) | |
result.Body.Close() | |
if err != nil { | |
fmt.Fprintln(os.Stderr, err) | |
os.Exit(2) | |
} | |
if n != aws.Int64Value(result.ContentLength) { | |
fmt.Fprintf(os.Stderr, "bytes written (%v) != ContentLength (%v)\n", n, aws.Int64Value(result.ContentLength)) | |
os.Exit(3) | |
} | |
fmt.Fprintf(os.Stderr, "wrote %v bytes to stdout in %v\n", n, time.Now().Sub(start)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment