Skip to content

Instantly share code, notes, and snippets.

@ritesh
Created January 16, 2018 19:09
Show Gist options
  • Save ritesh/9f7101fa4bf93447a35601684c1c0ba4 to your computer and use it in GitHub Desktop.
Save ritesh/9f7101fa4bf93447a35601684c1c0ba4 to your computer and use it in GitHub Desktop.
Get brian lambda AWS go
package main
import (
"errors"
"log"
"math/rand"
"net/http"
"strconv"
"time"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
const (
BrianBucket = "brian-bucket-205477"
)
var (
ErrBrian = errors.New("could not compute brian")
)
// Handler is the Lambda function handler
// It uses Amazon API Gateway request/responses provided by the aws-lambda-go/events package,
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
// stdout and stderr are sent to AWS CloudWatch Logs
log.Printf("Processing Lambda request %s\n", request.RequestContext.RequestID)
log.Printf(request.Path)
if request.HTTPMethod == http.MethodGet {
url, err := fetchBrian()
if err != nil {
log.Printf("couldn't get a brian %s", err)
return events.APIGatewayProxyResponse{}, ErrBrian
}
return events.APIGatewayProxyResponse{Body: "Here's a signed Brian: " + url, StatusCode: 200}, nil
}
return events.APIGatewayProxyResponse{}, ErrBrian
}
func fetchBrian() (string, error) {
//Do some S3 magic here to generate a URL
//Cache some of these
sess, err := session.NewSession(&aws.Config{
Region: aws.String("eu-west-1")})
if err != nil {
log.Fatal("couldn't create session!")
}
brianNum := "brian" + strconv.Itoa(int(rand.Int31n(94))+1) + ".png"
svc := s3.New(sess)
obj, _ := svc.GetObjectRequest(&s3.GetObjectInput{
Bucket: aws.String(BrianBucket),
Key: aws.String(brianNum)})
if err != nil {
log.Println("couldn't get s3 object")
return "", err
}
urlstr, err := obj.Presign(1 * time.Minute)
if err != nil {
log.Println("Failed to sign request", err)
return "", err
}
return urlstr, nil
}
func main() {
lambda.Start(Handler)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment