#python-3.x #amazon-web-services #aws-lambda #boto3 #amazon-efs
Вопрос:
- Я должен удалить файловые системы, в которых нет тега Retain=true.
- Для файловых систем, для которых установлен этот тег со значением false, смонтированные целевые объекты необходимо удалить.
- Поскольку удаление подключаемых ресурсов требует времени, мне нужно подождать, пока я смогу удалить свой EFS. Поэтому я разработал этот пользовательский режим ожидания, пока установочные цели не будут удалены.
Вывод следующего кода
Официант не существует: TargetDeleted
Вот мой код
Заранее спасибо
import boto3
from botocore.waiter import WaiterModel
from botocore.waiter import create_waiter_with_client
client = boto3.client('efs')
waiter_name = "TargetDeleted"
waiter_config = {
"version": 2,
"waiters": {
"MountTargetDeleted": {
"delay": 30,
"operation": "DescribeMountTargets",
"maxAttempts": 90,
"acceptors": [
{
"expected": "deleted",
"matcher": "pathAll",
"state": "success",
"argument": "MountTargets[].LifeCycleState"
},
{
"expected": "updating",
"matcher": "pathAll",
"state": "failure",
"argument": "MountTargets[].LifeCycleState"
},
{
"expected": "creating",
"matcher": "pathAll",
"state": "failure",
"argument": "MountTargets[].LifeCycleState"
}
]
}
}
}
def lambda_handler(event, context):
response = client.describe_file_systems()
fs=response['FileSystems']
for details in fs:
fid=details['FileSystemId']
tag_response= client.describe_tags(
FileSystemId=fid
)
alltags=tag_response['Tags']
if {'Key': 'Retain', 'Value': 'True'} not in alltags:
try:
client.delete_file_system(FileSystemId=fid)
print("The file", details['FileSystemId'],"deleted")
except:
print(client.describe_file_systems(FileSystemId=fid))
response1 = client.describe_mount_targets(
FileSystemId=fid
)
fs1=response1['MountTargets']
for detail in fs1:
mid=detail['MountTargetId']
response3 = client.delete_mount_target(
MountTargetId=mid
)
try:
waiter_model = WaiterModel(waiter_config)
backup_waiter = create_waiter_with_client(waiter_name, waiter_model, client)
client.delete_file_system(FileSystemId=fid)
print("The file", details['FileSystemId'],"deleted")
except Exception as e:
print(e)
else:
print("Retain tag set to True. The file", details['FileSystemId'],"cannot be deleted")
Комментарии:
1. почему бы вам не сделать исключение как e: печать(e) вместо печати(не работает), чтобы вы могли видеть, как создается исключение, и вы можете узнать больше о том, что не так.
2. вывод @lynkfox-Официант не существует: TargetDeleted
3. @lynkfox Я отредактировал код
Ответ №1:
Имя официанта в конфигурации должно совпадать с именем официанта.
waiter_name = "MountTargetDeleted"
waiter_config = {
"version": 2,
"waiters": {
"MountTargetDeleted": {
"delay": 30,
"operation": "DescribeMountTargets",
"maxAttempts": 90,
"acceptors": [
{
"expected": "deleted",
"matcher": "pathAll",
"state": "success",
"argument": "MountTargets[].LifeCycleState"
},
{
"expected": "updating",
"matcher": "pathAll",
"state": "failure",
"argument": "MountTargets[].LifeCycleState"
},
{
"expected": "creating",
"matcher": "pathAll",
"state": "failure",
"argument": "MountTargets[].LifeCycleState"
}
]
}
}
}
Кроме того, вы можете рассмотреть возможность поиска путей для условия сбоя.