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.