AWS + Terraform,如何在EFS上创建文件夹

时间:2020-04-08 01:22:25

标签: amazon-web-services terraform amazon-ecs efs

我使用Terraform设置了ECS集群。一切正常,但我对此有一些疑问。

1。据我所知,不需要将EFS卷挂载到ECS实例。 AWS允许我们将EFS卷文件夹直接安装到容器。我说的对吗?

resource "aws_ecs_task_definition" "Task" {
  family                = var.ServiceName
  container_definitions = file("service.json")
  tags = {
    Name    = data.terraform_remote_state.Cluster.outputs.TagName
    Project = data.terraform_remote_state.Cluster.outputs.TagName
  }
  volume {
    name = "service-storage"
    efs_volume_configuration {
      file_system_id = data.terraform_remote_state.Cluster.outputs.EfsVolumeId
      root_directory = "/"
    }
  }
}

root_directory是EFS卷内部文件夹的路径,该文件夹将被安装到容器中。

service.json

[
  {
    "name": "nginx13",
    "image": "nginx",
    "memory": 256,
    "mountPoints": [
      {
        "containerPath": "/usr/share/nginx/html",
        "sourceVolume": "service-storage"
      }
    ],
    "portMappings": [
      {
        "containerPort": 80
      }
    ]
  }
]

containerPath是容器内部到安装root_directory文件夹的安装点的路径。因此,没有与ECS实例安装点或指向它的路径相关的参数。

2。。在创建新任务之前,需要在EFS卷上创建一个文件夹,以便稍后将容器安装到该文件夹​​。现在,我只能使用EFS卷的根文件夹,因为它是空的。因此,我正在寻找一种使用terraform模板来管理在EFS卷上创建和删除文件夹的方法。这是问题的第一部分,第二部分是将文件放在该文件夹中。 最佳做法是什么?我应该使用诸如Jenkins之类的部署解决方案还是可以仅通过Terraform来完成? EFS文件夹权限如何?是否需要更改?

1 个答案:

答案 0 :(得分:1)

使用EFS接入点: https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html

访问点通过在EFS中创建目录来工作。然后,您可以在该目录上设置访问权限。无论如何,这可能会更好,因为它可以为您提供访问控制。

如果文件系统上不存在访问点的根目录路径,Amazon EFS会自动创建具有可配置所有权和权限的根目录。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/efs_access_point

如果这不是一个很好的选择:

我建议使用lambda。

https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/

您可以使用适合您安装EFS的任何语言编写lambda。然后让它创建一个目录。然后,您可以使用空资源local-exec调用此lambda。