如何在 EFS 上创建文件夹?

问题描述 投票:0回答:2

我使用 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文件夹权限怎么样?需要改变吗?

amazon-web-services terraform amazon-ecs amazon-efs
2个回答
4
投票

使用 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。


0
投票

您可以以编程方式创建 AWS EFS 接入点。官方文档提供了如何设置的详细信息:

https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html

但是,如果您希望接入点创建该文件夹,则需要执行以下操作:

  • 明确指定文件夹的所有者和权限
  • EFS 必须通过接入点 安装。以任何其他方式安装都不会创建该文件夹。

我还建议使用官方的 Terraform 模块 来管理 EFS:

https://registry.terraform.io/modules/terraform-aws-modules/efs/aws/latest

使用此模块,您可以利用模块的输出轻松引用基础设施中的接入点:

module.efs.access_points.[you access point name].id
© www.soinside.com 2019 - 2024. All rights reserved.