AWS Cloudformation - 在 EFS 中创建初始文件夹

Posted

技术标签:

【中文标题】AWS Cloudformation - 在 EFS 中创建初始文件夹【英文标题】:AWS Cloudformation - Create initial folders in EFS 【发布时间】:2021-10-10 22:49:47 【问题描述】:

我正在使用 AWS cloudformation 创建 EFS 文件系统。在将文件系统挂载到任何实例之前,我想在文件系统中有一些初始文件夹。我可以通过云形成代码实现这一点吗?如何通过代码在我的 EFS 中创建文件夹?

以下是我目前的代码。


  "efs01": 
    "type": "efs",
    "depends_on": [],
    "persistent": "true",
    "descriptor": 
      "Resources" : 
        "SecurityGroup" : 
          "Type": "Pipeline::SecurityGroup",
          "Properties" : 
            "IngressRules" : [  "sources": [ "app01","app02" ], "ports":["TCP:NFS"]  ]
          
        ,
        "FileSystem" : 
          "Type" : "AWS::EFS::FileSystem",
          "Properties" : 
            "ThroughputMode": "bursting",
            "ProvisionedThroughputInMibps": null
          
        ,
        "AccessPointResource": 
          "Type": "AWS::EFS::AccessPoint",
          "Properties": 
            "FileSystemId": 
              "Ref": "FileSystem"
            ,
            "PosixUser": 
              "Uid": "ec2-user",
              "Gid": "ec2-user"
            ,
            "RootDirectory": 
              "CreationInfo": 
                "OwnerGid": "root",
                "OwnerUid": "root",
                "Permissions": "0744"
              ,
              "Path": "/ap1"
            
          
        
      
    
  

【问题讨论】:

CloudFormation 不能直接使用 EFS——你需要一些逻辑层来为你做这件事。您可能可以创建一个AWS Lambda-backed custom resource - AWS CloudFormation,这是一个由 CloudFormation 触发的 Lambda 函数。它可以挂载 EFS 文件系统,然后运行命令来创建目录。写自定义资源有点繁琐。 谢谢,我正在查看docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 的代码。为什么我需要一个初始文件夹是为我的 efs 创建一个访问点。如果我在没有根目录的情况下创建接入点,是否会在 efs 中创建根目录? 【参考方案1】:

如何通过代码在我的 EFS 中创建文件夹?

不必做任何事情。 AWS 将在 EFS 上自动为您创建 /ap1。但是任何将使用您的AccessPointResource 的应用程序都不会看到它。相反,他们将被绑定到 /ap1 并且永远无法看到 EFS 的 / 上的内容。

这意味着对于使用您的AccessPointResource 挂载 EFS 的任何应用程序,挂载的根是 //ap1 仅对使用 "Path": "/" 的接入点可见。

【讨论】:

谢谢,要清楚(与原始问题无关),它会创建我将在“PosixUser”部分指定的用户和组。另外,如果我在不使用接入点的情况下安装 efs,我应该看到“ap1”文件夹吗? @ChamilaWijayarathna 是的,对于第二个问题。对于第一个,我不太确定。您可以使用有关 PosixUser 的具体细节提出新的 SO 问题。 在不使用接入点挂载文件系统时看不到 ap1 文件夹。我认为缺少文件夹会导致访问点创建失败。那应该是另外一个问题了。谢谢 @ChamilaWijayarathna 你能用"Path": "/" 创建新的接入点并用它来挂载你的efs吗? 我更喜欢使用文件夹,因此我可以拥有很少的文件夹,并允许我的应用程序通过访问点挂载来仅访问每个应用程序所需的内容。

以上是关于AWS Cloudformation - 在 EFS 中创建初始文件夹的主要内容,如果未能解决你的问题,请参考以下文章

AWS — AWS CloudFormation

AWS 中的 cloudformation 最佳实践

是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?

我无法在我的 cloudformation 代码中添加“AWS”:“*”

AWS::CloudFormation::Init 它是如何工作的?

AWS CloudFormation 可以调用 AWS API 吗?