AWS EFS-在创建文件系统后创建安装目标的脚本

时间:2018-09-18 15:21:33

标签: amazon-web-services aws-sdk aws-elasticfilesystem aws-php-sdk

我正在编写一个脚本,该脚本将使用输入中的名称创建一个EFS文件系统。我正在使用适用于PHP版本3的AWS开发工具包。

我能够使用createFileSystem命令创建文件系统。在创建挂载目标之前,该新文件系统不可用。如果我在createFileSystem命令之后运行CreateMountTarget命令,则会收到错误消息,表明文件系统的生命周期状态未处于“可用”状态。

我尝试使用createFileSystemAsync创建一个Promise,并在该Promise上调用wait函数以强制脚本同步运行。但是,在文件系统仍处于“正在创建”生命周期状态时,始终会兑现承诺。

是否可以使用AWS开发工具包来强制脚本等待文件系统处于可用状态?

2 个答案:

答案 0 :(得分:2)

一种方法是使用DescribeFileSystems API检查文件系统的状态。在响应中查看LifeCycleState,如果可用,请触发CreateMountTarget API。您可以继续在循环中检查DescribeFileSystems,并延迟几秒钟,直到LifeCycleState为Available

答案 1 :(得分:1)

您似乎想要FileSystemAvailable的{​​{3}},但是waiter。我会the elasticfilesystem files don't specify one要一个。您需要等待file an issue on GitHubLifeCycleState中的available

同时,您可能可以编写类似以下和DescribeFileSystems之类的内容。

{
  "version":2,
  "FileSystemAvailable": {
    "delay": 15,
    "operation": "DescribeFileSystems",
    "maxAttempts": 40,
    "acceptors": [
      {
        "expected": "available",
        "matcher": "pathAll",
        "state": "success",
        "argument": "FileSystems[].LifeCycleState"
      },
      {
        "expected": "deleted",
        "matcher": "pathAny",
        "state": "failure",
        "argument": "FileSystems[].LifeCycleState"
      },
      {
        "expected": "deleting",
        "matcher": "pathAny",
        "state": "failure",
        "argument": "FileSystems[].LifeCycleState"
      }
    ]
  },
}

following the waiters guide用于同时发出HTTP请求。在这种情况下这无济于事,因为API调用的行为是在EFS中启动异步任务。