Sam*_*uel 7 amazon-web-services amazon-ecs terraform amazon-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 = "/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
root_directory这是 EFS 卷内部到文件夹的路径,该文件夹将安装到容器中。
服务.json
[
{
"name": "nginx13",
"image": "nginx",
"memory": 256,
"mountPoints": [
{
"containerPath": "/usr/share/nginx/html",
"sourceVolume": "service-storage"
}
],
"portMappings": [
{
"containerPort": 80
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
containerPath这是容器内部到root_directory将安装文件夹的安装点的路径。因此,没有与 ECS 实例挂载点或其路径相关的参数。
2.在创建新任务之前,我需要在 EFS 卷上创建一个文件夹,以便稍后将容器挂载到其中。现在,我只能使用 EFS 卷的根文件夹,因为它是空的。因此,我正在寻找一种方法来使用 terraform 模板管理 EFS 卷上文件夹的创建和删除。这是问题的第一部分,第二部分是将文件放入该文件夹中。对此的最佳实践是什么?我应该使用某种部署解决方案(例如 Jenkins)还是可以仅使用 Terraform 来完成?EFS文件夹权限怎么样?他们需要改变吗?
使用 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。
您可以使用您熟悉的任何可以挂载 EFS 的语言编写 lambda。然后让它创建一个目录。然后您可以使用空资源 local-exec 调用此 lambda。
| 归档时间: |
|
| 查看次数: |
9758 次 |
| 最近记录: |