AWS EFS - скрипт для создания цели монтирования после создания файловой системы

Я пишу сценарий, который создаст файловую систему EFS с именем из ввода. Я использую AWS SDK для PHP версии 3.

Я могу создать файловую систему с помощью команды createFileSystem. Эта новая файловая система не может использоваться, пока не будет создана цель монтирования. Если я запускаю команду CreateMountTarget после команды createFileSystem, то получаю сообщение об ошибке, что состояние жизненного цикла файловой системы не находится в состоянии "доступно".

Я попытался использовать createFileSystemAsync для создания обещания и вызова функции ожидания для этого обещания, чтобы заставить сценарий работать синхронно. Однако обещание всегда выполняется, пока файловая система все еще находится в состоянии "создания" жизненного цикла.

Есть ли способ заставить скрипт ждать, пока файловая система будет в доступном состоянии, используя AWS SDK?

2 ответа

Решение

Одним из способов является проверка состояния файловой системы с помощью API DescribeFileSystems. В ответе посмотрите на LifeCycleState, если он доступен, запустите API CreateMountTarget. Вы можете продолжать проверять DescribeFileSystems в цикле с задержкой в ​​несколько секунд, пока LifeCycleState не станет Available

Похоже, вы хотите, чтобы официант FileSystemAvailable, но файлы эластичной системы не указывают ни одного. Я бы подал вопрос на GitHub с просьбой об этом. Вам нужно подождать DescribeFileSystems иметь LifeCycleState из available,

В то же время, вы, вероятно, можете написать свой собственный что-то вроде следующего и следуя руководству официантов.

{
  "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"
      }
    ]
  },
}

Обещания в AWS SDK для PHP используются для одновременного выполнения HTTP-запроса. Это не помогает в этом случае, потому что поведение вызова API заключается в запуске асинхронной задачи в EFS.

Другие вопросы по тегам