Farhad-Taran
Farhad-Taran

Reputation: 6522

Start or Run ECS or Fargate Task Through the C# Client Sdk

I am trying to run or start an existing task definition within ECS but the documentation is lacking and I cant seem to find any examples online. I have hit a wall and I was wondering if anyone else has done a similar thing.

I am using the AWSSDK.ECS packages.

var request = JsonConvert.DeserializeObject<Request>(record.Sns.Message);

var task = new RunTaskRequest
{
    Count = 1,
    NetworkConfiguration = new NetworkConfiguration
    {
        AwsvpcConfiguration = new AwsVpcConfiguration
        {
            Subnets = new List<string>() { request.SubnetId},
            SecurityGroups = new List<string>() { request.SecurityGroupId},
            AssignPublicIp = AssignPublicIp.DISABLED
        }
    },
    Cluster = request.Cluster,
    LaunchType = LaunchType.FARGATE,
    Overrides = new TaskOverride
    {
        ContainerOverrides = new List<ContainerOverride>
        {
            new ContainerOverride
            {
                Name = request.ContainerName,
                Environment = request.EnvironmentVariables
                    .Select(kvp => new Amazon.ECS.Model.KeyValuePair()
                {
                    Name = kvp.Key,
                    Value = kvp.Value
                }).ToList()
            }
        }
    },
    TaskDefinition = request.TaskDefinitionUri
};

await new AmazonEcsClient().RunTaskAsync(task);

Upvotes: 3

Views: 1574

Answers (1)

Gleb
Gleb

Reputation: 1761

Check on your task definition. If the NetworkMode is awsvpc, then you must provide NetworkConfiguration parameter. This works for me:

var runTaskRequest = new ECSModel.RunTaskRequest
{
    Cluster = "cluster-name",
    Count = 1,
    LaunchType = LaunchType.FARGATE,
    TaskDefinition = "task-definition",
    NetworkConfiguration = new ECSModel.NetworkConfiguration
    {
        AwsvpcConfiguration = new ECSModel.AwsVpcConfiguration
        {
            SecurityGroups = new List<string> { "security-group" },
            Subnets = new List<string> { "subnet" }
        }
    },
    Overrides = new ECSModel.TaskOverride
    {
        ContainerOverrides = new List<ECSModel.ContainerOverride>
        {
            new ECSModel.ContainerOverride
            {
                Name = "container-name",
                Command = new List<string>
                {
                    // In case if you need to pass parameters to your instance:
                    "parameter-one", "parameter-two", "etc"
                }
            }
        }
    }
};

await new AmazonEcsClient().RunTaskAsync(runTaskRequest);

Upvotes: 1

Related Questions