in cmd/task_run.go [150:221]
func runTask(operation *TaskRunOperation) {
cwl := CWL.New(sess)
ec2 := EC2.New(sess)
ecr := ECR.New(sess)
ecs := ECS.New(sess, clusterName)
iam := IAM.New(sess)
ecsTaskExecutionRoleArn := iam.CreateEcsTaskExecutionRole()
logGroupName := cwl.CreateLogGroup(taskLogGroupFormat, operation.TaskName)
if len(operation.SecurityGroupIds) == 0 {
defaultSecurityGroupID, _ := ec2.GetDefaultSecurityGroupID()
operation.SecurityGroupIds = []string{defaultSecurityGroupID}
}
if len(operation.SubnetIds) == 0 {
operation.SubnetIds, _ = ec2.GetDefaultSubnetIDs()
}
if operation.Image == "" {
var repositoryUri, tag string
if ecr.IsRepositoryCreated(operation.TaskName) {
repositoryUri = ecr.GetRepositoryUri(operation.TaskName)
} else {
repositoryUri = ecr.CreateRepository(operation.TaskName)
}
if git.IsCwdGitRepo() {
tag = git.GetShortSha()
} else {
tag = docker.GenerateTag()
}
repository := docker.NewRepository(repositoryUri)
username, password := ecr.GetUsernameAndPassword()
repository.Login(username, password)
repository.Build(tag)
repository.Push(tag)
operation.Image = repository.UriFor(tag)
}
taskDefinitionArn := ecs.CreateTaskDefinition(
&ECS.CreateTaskDefinitionInput{
Cpu: operation.Cpu,
EnvVars: operation.EnvVars,
ExecutionRoleArn: ecsTaskExecutionRoleArn,
Image: operation.Image,
LogGroupName: logGroupName,
LogRegion: region,
Memory: operation.Memory,
Name: operation.TaskName,
Type: typeTask,
TaskRole: operation.TaskRole,
TaskCommand: operation.TaskCommand,
},
)
ecs.RunTask(
&ECS.RunTaskInput{
ClusterName: clusterName,
Count: operation.Num,
TaskName: operation.TaskName,
TaskDefinitionArn: taskDefinitionArn,
SubnetIds: operation.SubnetIds,
SecurityGroupIds: operation.SecurityGroupIds,
},
)
console.Info("Running task %s", operation.TaskName)
}