summaryrefslogtreecommitdiff
path: root/mkpipeline
diff options
context:
space:
mode:
authorNick White <git@njw.name>2019-07-19 16:22:33 +0100
committerNick White <git@njw.name>2019-07-19 16:22:33 +0100
commit56687b56558ced34b35955163bd5dd3697d578e8 (patch)
treee840fbefb3c6b76557a517759782ce61da4026b4 /mkpipeline
parent69ab835ebcc7efb9162741e3f0f04f22d1ed4708 (diff)
rename setupawspipeline to mkpipeline
Diffstat (limited to 'mkpipeline')
-rw-r--r--mkpipeline/main.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/mkpipeline/main.go b/mkpipeline/main.go
new file mode 100644
index 0000000..572ef76
--- /dev/null
+++ b/mkpipeline/main.go
@@ -0,0 +1,72 @@
+package main
+
+import (
+ "log"
+ "os"
+
+ "github.com/aws/aws-sdk-go/aws"
+ "github.com/aws/aws-sdk-go/aws/awserr"
+ "github.com/aws/aws-sdk-go/aws/session"
+ "github.com/aws/aws-sdk-go/service/s3"
+ "github.com/aws/aws-sdk-go/service/sqs"
+)
+
+func main() {
+ if len(os.Args) != 1 {
+ log.Fatal("Usage: mkpipeline\n\nSets up necessary S3 buckets and SQS queues for our AWS pipeline\n")
+ }
+
+ sess, err := session.NewSession(&aws.Config{
+ Region: aws.String("eu-west-2"),
+ })
+ if err != nil {
+ log.Fatalf("Error: failed to set up aws session: %v\n", err)
+ }
+ s3svc := s3.New(sess)
+ sqssvc := sqs.New(sess)
+
+ prefix := "rescribe"
+ buckets := []string{"inprogress", "done"}
+ queues := []string{"preprocess", "ocr", "analyse"}
+
+ for _, bucket := range buckets {
+ bname := prefix + bucket
+ log.Printf("Creating bucket %s\n", bname)
+ _, err = s3svc.CreateBucket(&s3.CreateBucketInput{
+ Bucket: aws.String(bname),
+ })
+ if err != nil {
+ aerr, ok := err.(awserr.Error)
+ if ok && (aerr.Code() == s3.ErrCodeBucketAlreadyExists || aerr.Code() == s3.ErrCodeBucketAlreadyOwnedByYou) {
+ log.Printf("Bucket %s already exists\n", bname)
+ } else {
+ log.Fatalf("Error creating bucket %s: %v\n", bname, err)
+ }
+ }
+ }
+
+ for _, queue := range queues {
+ qname := prefix + queue
+ log.Printf("Creating queue %s\n", qname)
+ _, err = sqssvc.CreateQueue(&sqs.CreateQueueInput{
+ QueueName: aws.String(qname),
+ Attributes: map[string]*string{
+ "VisibilityTimeout": aws.String("120"), // 2 minutes
+ "MessageRetentionPeriod": aws.String("1209600"), // 14 days; max allowed by sqs
+ "ReceiveMessageWaitTimeSeconds": aws.String("20"),
+ },
+ })
+ if err != nil {
+ aerr, ok := err.(awserr.Error)
+ // Note the QueueAlreadyExists code is only emitted if an existing queue
+ // has different attributes than the one that was being created. SQS just
+ // quietly ignores the CreateQueue request if it is identical to an
+ // existing queue.
+ if ok && aerr.Code() == sqs.ErrCodeQueueNameExists {
+ log.Fatalf("Error: Queue %s already exists but has different attributes\n", qname)
+ } else {
+ log.Fatalf("Error creating queue %s: %v\n", qname, err)
+ }
+ }
+ }
+}