Skip to content

Commit

Permalink
Simple one-off task run
Browse files Browse the repository at this point in the history
  • Loading branch information
qbart committed Jan 8, 2023
1 parent 7b66d30 commit 182ee04
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 3 deletions.
41 changes: 41 additions & 0 deletions awscmd/ecs.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
"strings"
"time"

"github.com/aws/aws-sdk-go/aws"
Expand Down Expand Up @@ -189,3 +190,43 @@ func EcsDeployWait(ctx context.Context, input *InputEcsDeployWait, w io.Writer)
attempt++
}
}

func EcsRunTask(ctx context.Context, input *InputEcsRunTask, w io.Writer) (*OuputEcsRunTask, error) {
sess, err := NewSession(input.Region)
if err != nil {
return nil, err
}
svc := ecs.New(sess)

taskName := fmt.Sprint(input.Service, "-", input.OneOffCommand)

out, err := svc.RunTask(&ecs.RunTaskInput{
Cluster: aws.String(input.Cluster),
TaskDefinition: aws.String(taskName),
Count: aws.Int64(1),
})
if err != nil {
return &OuputEcsRunTask{}, fmt.Errorf("Can't runTask: %v", err)
}

arn := *out.Tasks[0].TaskArn
splits := strings.Split(arn, "/")
id := splits[len(splits)-1]

return &OuputEcsRunTask{
ARN: arn,
ID: id,
}, nil
}

type InputEcsRunTask struct {
Region string
Cluster string
Service string
OneOffCommand string
}

type OuputEcsRunTask struct {
ARN string
ID string
}
37 changes: 34 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,9 @@ func main() {
}

waitInput := &awscmd.InputEcsDeployWait{
Region: c.String("region"),
Cluster: c.String("cluster"),
Service: c.String("service"),
Region: c.String("region"),
Cluster: c.String("cluster"),
Service: c.String("service"),
DeploymentID: out.MonitoredDeploymentID,
}
_, err = awscmd.EcsDeployWait(context.TODO(), waitInput, c.App.Writer)
Expand All @@ -193,6 +193,37 @@ func main() {
ctc.Reset,
)

return nil
},
},
{
Name: "run",
Usage: "Starts a new one-off task",
Flags: []cli.Flag{
&cli.StringFlag{Name: "region", Usage: "AWS region", Required: true},
&cli.StringFlag{Name: "cluster", Usage: "ECS cluster ID", Required: true},
&cli.StringFlag{Name: "service", Usage: "ECS service ID", Required: true},
&cli.StringFlag{Name: "command", Usage: "One-off command to run", Required: true},
},
Action: func(c *cli.Context) error {
runTaskInput := &awscmd.InputEcsRunTask{
Region: c.String("region"),
Cluster: c.String("cluster"),
Service: c.String("service"),
OneOffCommand: c.String("command"),
}
out, err := awscmd.EcsRunTask(context.TODO(), runTaskInput, c.App.Writer)
if err != nil {
return err
}
fmt.Fprintf(
c.App.Writer,
"%sNew task started ID: `%s`%s\n",
ctc.ForegroundGreen,
out.ID,
ctc.Reset,
)

return nil
},
},
Expand Down

0 comments on commit 182ee04

Please sign in to comment.