web-dev-qa-db-fra.com

Impossible d'utiliser "LATEST" (chaîne de type) comme chaîne de type * dans la valeur du champ

J'essaie d'exécuter une tâche ECS en utilisant le nouveau aws-sdk-go (v2). Et j'ai du mal à initialiser la structure &ecs.RunTaskInput{}.

Selon le fichier, voici la définition de la structure:

type RunTaskInput struct {
    _ struct{} `type:"structure"`

    // The short name or full Amazon Resource Name (ARN) of the cluster on which
    // to run your task. If you do not specify a cluster, the default cluster is
    // assumed.
    Cluster *string `locationName:"cluster" type:"string"`

    // The number of instantiations of the specified task to place on your cluster.
    // You can specify up to 10 tasks per call.
    Count *int64 `locationName:"count" type:"integer"`

    // The name of the task group to associate with the task. The default value
    // is the family name of the task definition (for example, family:my-family-name).
    Group *string `locationName:"group" type:"string"`

    // The launch type on which to run your task.
    LaunchType LaunchType `locationName:"launchType" type:"string" enum:"true"`

    // The network configuration for the task. This parameter is required for task
    // definitions that use the awsvpc network mode to receive their own Elastic
    // Network Interface, and it is not supported for other network modes. For more
    // information, see Task Networking (http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task-networking.html)
    // in the Amazon Elastic Container Service Developer Guide.
    NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

    // A list of container overrides in JSON format that specify the name of a container
    // in the specified task definition and the overrides it should receive. You
    // can override the default command for a container (that is specified in the
    // task definition or Docker image) with a command override. You can also override
    // existing environment variables (that are specified in the task definition
    // or Docker image) on a container or add new environment variables to it with
    // an environment override.
    //
    // A total of 8192 characters are allowed for overrides. This limit includes
    // the JSON formatting characters of the override structure.
    Overrides *TaskOverride `locationName:"overrides" type:"structure"`

    // An array of placement constraint objects to use for the task. You can specify
    // up to 10 constraints per task (including constraints in the task definition
    // and those specified at run time).
    PlacementConstraints []PlacementConstraint `locationName:"placementConstraints" type:"list"`

    // The placement strategy objects to use for the task. You can specify a maximum
    // of five strategy rules per task.
    PlacementStrategy []PlacementStrategy `locationName:"placementStrategy" type:"list"`

    // The platform version on which to run your task. If one is not specified,
    // the latest version is used by default.
    PlatformVersion *string `locationName:"platformVersion" type:"string"`

    // An optional tag specified when a task is started. For example if you automatically
    // trigger a task to run a batch process job, you could apply a unique identifier
    // for that job to your task with the startedBy parameter. You can then identify
    // which tasks belong to that job by filtering the results of a ListTasks call
    // with the startedBy value. Up to 36 letters (uppercase and lowercase), numbers,
    // hyphens, and underscores are allowed.
    //
    // If a task is started by an Amazon ECS service, then the startedBy parameter
    // contains the deployment ID of the service that starts it.
    StartedBy *string `locationName:"startedBy" type:"string"`

    // The family and revision (family:revision) or full ARN of the task definition
    // to run. If a revision is not specified, the latest ACTIVE revision is used.
    //
    // TaskDefinition is a required field
    TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

Je m'accroche à la valeur de PlatformVersion avec l'erreur:

cannot use "LATEST" (type string) as type *string in field value

Pour moi, ce n'est pas évident ce qui se passe. Mon code:

  _ := svc.RunTaskRequest(&ecs.RunTaskInput{
    LaunchType: "FARGATE",
    // Count:                1,
    PlatformVersion: "LATEST",
    // NetworkConfiguration: ecs.NetworkConfiguration{
    // AwsvpcConfiguration: ecs.AwsvpcConfiguration{
    //  Subnets:        []string{},
    //  AssignPublicIp: "ENABLED",
    // },
    // },
  })

LaunchType et PlatformVersion ont les mêmes types, mais l'un fonctionnera et l'autre non.

Pour être honnête, la même chose se produit avec Count:

cannot use 1 (type int) as type *int64 in field value

Que dois-je faire pour résoudre les problèmes? Je vous remercie.

7
user8497169

Comme l'indique le message d'erreur, le type requis est *string (pointeur vers string), mais vous venez de passer une valeur string. Ce ne sont pas interchangeables. Le kit SDK AWS utilise des pointeurs de chaîne pour la plupart de ses entrées en raison des imprécisions de l'API AWS. Il comprend une fonction d'assistance, aws.String, dans ce but:

PlatformVersion: aws.String("LATEST"),

Ce qui renverra un pointeur sur la chaîne fournie. De même pour votre *int64, il y a aws.Int64:

Count:                aws.Int64(1),

Ces assistants sont documentés tout en haut de la documentation du SDK .

17
Adrian