我使用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文件夹权限如何?是否需要更改?
答案 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。
您可以使用适合您安装EFS的任何语言编写lambda。然后让它创建一个目录。然后,您可以使用空资源local-exec调用此lambda。