Home

Awesome

gocloud-blob

Opinionated methods and tools for working with gocloud.dev/blob instances.

Documentation

Documentation is incomplete at this time.

Tools

$> make cli
go build -mod vendor -ldflags="-s -w" -o bin/copy-uri cmd/copy-uri/main.go
go build -mod vendor -ldflags="-s -w" -o bin/copy cmd/copy/main.go
go build -mod vendor -ldflags="-s -w" -o bin/read cmd/read/main.go

copy

$> ./bin/copy -h
Usage of ./bin/copy:
  -acl string
    	An optional AWS S3 ACL to assign to the file being copied.
  -source-path -source-uri
    	The path (relative to -source-uri) for the file to copy.
  -source-uri string
    	A valid gocloud.dev/blob.Bucket URI.
  -target-path -target-uri
    	The path (relative to -target-uri) where the target file should be copied.
  -target-uri string
    	A valid gocloud.dev/blob.Bucket URI.

copy-uri

$> ./bin/copy-uri -h
  -acl string
    	An optional AWS S3 ACL to assign to the file being copied.
  -filename -source-uri
    	The final filename of the file to copy. If empty the basename of the -source-uri flag value will be used.
  -mode string
    	Valid options are: cli, lambda. (default "cli")
  -show-progress
    	Show copy progress.
  -source-uri string
    	The URI of the file to copy.
  -target-uri string
    	A valid gocloud.dev/blob.Bucket URI.

For example:

$> ./bin/copy-uri \
	-source-uri https://static.sfomuseum.org/media/189/736/720/3/1897367203_lt3HuJ5ALbY4SDoxTd4oi7abOF7gQZKM_c.jpg \
	-target-uri cwd://

$> ll 1897367203_lt3HuJ5ALbY4SDoxTd4oi7abOF7gQZKM_c.jpg 
-rw-r--r--  1 user  staff  342776 Apr 12 17:00 1897367203_lt3HuJ5ALbY4SDoxTd4oi7abOF7gQZKM_c.jpg

Lambda

The copy-uri can also be run as a Lambda function.

$> make lambda
if test -f bootstrap; then rm -f bootstrap; fi
if test -f copy_uri.zip; then rm -f copy_uri.zip; fi
GOARCH=arm64 GOOS=linux go build -mod vendor -ldflags="" -tags lambda.norpc -o bootstrap cmd/copy-uri/main.go
zip copy_uri.zip bootstrap
  adding: bootstrap (deflated 62%)
rm -f bootstrap

Install and configure the Lambda function as necessary. The following environment variables need to be configured:

KeyValueNotes
BLOB_MODElambda
BLOB_TARGET_URIA valid gocloud.dev/blob URI. For example s3blob://{S3_BUCKET}?region={S3_REGION}&prefix={S3_PREFIX}/&credentials={CREDENTIALS}

If you are using the s3blob:// URI scheme {CREDENTIALS} is expected to be a aaronland/go-aws-session credentials string:

LabelDescription
anon:Empty or anonymous credentials.
env:Read credentials from AWS defined environment variables.
iam:Assume AWS IAM credentials are in effect.
sts:{ARN}Assume the role defined by {ARN} using STS credentials.
{AWS_PROFILE_NAME}This this profile from the default AWS credentials location.
{AWS_CREDENTIALS_PATH}:{AWS_PROFILE_NAME}This this profile from a user-defined AWS credentials location.

Environment variables are mapped to command line flags as followed. For any given command line flag it is:

For example the -target-uri flag becomes the BLOB_TARGET_URI environment variable.

Docker

$> make docker
docker buildx build --platform=linux/amd64 -t gocloud-blob .
[+] Building 36.1s (14/14) FINISHED                                                                                                                              docker:deskt         
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/jvr88erchuxoddhbwdhwv7xap
$> docker run --platform=linux/amd64 gocloud-blob \
	/usr/local/bin/copy-uri \
	-source-uri https://static.sfomuseum.org/media/189/736/720/3/1897367203_lt3HuJ5ALbY4SDoxTd4oi7abOF7gQZKM_c.jpg \
	-target-uri file:///tmp/

See also