Amazon web services AWS&x2B;Terraform,如何在EFS上创建文件夹

Amazon web services AWS&x2B;Terraform,如何在EFS上创建文件夹,amazon-web-services,terraform,amazon-ecs,efs,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 = da

我用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\u目录
这里是EFS卷内部到文件夹的路径,该文件夹将装入容器

service.json

containerPath
这里是容器内部到将装入
root\u目录
文件夹的装入点的路径。因此,没有与ECS实例装载点或其路径相关的参数

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

使用EFS接入点:

访问点通过在EFS中创建目录来工作。然后可以设置该目录的访问权限。这可能对您正在做的事情更好,因为它可以提供访问控制

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

如果这不合适:

我建议使用lambda


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

我遇到了相同的问题。不幸的是,没有API来管理EFS的内容。我能想到的使用Terraform自动化此过程的唯一方法是构建一个模块,例如创建ECS服务、装载EFS并运行修改权限的自定义映像。所有这些都可以由使用Terraform的本地exec提供程序的lambda触发。我创建了一个访问点,但EFS卷中的子目录仍然不存在。我错过什么了吗?您仍然需要手动创建目录吗?您是否尝试通过访问点装载?文档中说可以这样做:
mount-tefs-otls,accesspoint=fsap-12345678 fs-12345678:/localmountpoint
是的,这似乎对我也不起作用。在我在efs上创建目录之前,装载失败。然后坐骑成功了。这是可以的,但如果在创建访问点时自动创建该目录,那就太好了。仔细阅读本文档可以清楚地看到这一点。创建访问点时,必须指定所有者和权限。否则挂载将失败。如果您确实指定了所有者和权限,则第一次装载将成功创建目录。->
[
  {
    "name": "nginx13",
    "image": "nginx",
    "memory": 256,
    "mountPoints": [
      {
        "containerPath": "/usr/share/nginx/html",
        "sourceVolume": "service-storage"
      }
    ],
    "portMappings": [
      {
        "containerPort": 80
      }
    ]
  }
]