awsvpc:网络配置对此任务定义的给定网络模式无效

gam*_*mer 9 amazon-web-services amazon-ecs terraform terraform-provider-aws

我的任务定义:

resource "aws_ecs_task_definition" "datadog" {
  family        = "${var.environment}-datadog-agent-task"
  task_role_arn = "arn:aws:iam::xxxxxxxx:role/datadog-role"

  container_definitions = <<EOF
[
  {
    "name": "${var.environment}-${var.datadog-identifier}",
    "network_mode" : "awsvpc",
    "image": "datadog/agent:latest",
    "portMappings": [
      {
...
Run Code Online (Sandbox Code Playgroud)

我的服务定义:

resource "aws_ecs_service" "datadog" {
  name            = "${var.environment}-${var.datadog-identifier}-datadog-ecs-service"
  cluster         = "${var.cluster}"
  task_definition = "${aws_ecs_task_definition.datadog.arn}"

  network_configuration {
    subnets = flatten(["${var.private_subnet_ids}"])
  }

  # This allows running one for every instance
  scheduling_strategy = "DAEMON"
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 -

InvalidParameterException: Network Configuration is not valid for the given networkMode of this task definition
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么吗?查看 Terraform 文档和 GitHub 问题,这应该可行。它与将 Datadog 作为守护进程运行有关吗?

yda*_*coR 15

如果您要定义使用该任务定义的服务,则需要将aws_ecs_task_definition'network_mode设置为。awsvpcnetwork_configuration

资源参数的文档network_configurationaws_ecs_service中提到了这一点:

network_configuration- (可选)服务的网络配置。对于使用 awsvpc网络模式接收其自己的弹性网络接口的任务定义来说,此参数是必需的,并且其他网络模式不支持此参数。

在您的情况下,您已将network_mode参数添加到容器定义而不是任务定义中(任务是 n 个容器的集合,并分组在一起以共享一些资源)。容器定义架构不允许使用network_mode参数。

  • 这里几乎每个问题都是人们代码中的一个大问题,而不是 Terraform。少数不是这样的人会将人们引导到 GitHub 上相应的问题跟踪器。这里的答案对于其他可能犯同样错误或得到同样错误但不确定原因的人很有用。 (2认同)