Я хочу встроить пользовательский ресурс в шаблон EKS Cluster Cloudformation, который переключится на частную конечную точку и включит вход в систему.Поскольку происходит два действия, я ищу пользовательское ожидание первого обновления перед вызовом второго действия.Я продолжаю получать сообщения об ошибках, что первый вызов не завершен обновления.
Извините, но я пробовал много разных изменений без прогресса.
from __future__ import print_function
import boto3
import json
import os
import logging
import time
import botocore
from botocore.exceptions import WaiterError
from botocore.waiter import WaiterModel
from botocore.waiter import create_waiter_with_client
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Configure your cluster name and region here
CLUSTER_NAME = os.environ['cluster_name']
REGION = os.environ['region']
print('Loading Function')
eks_api = boto3.client('eks',region_name=REGION)
# Waiter configuration
delay = 60
max_attempts = 5
# Create a custom waiter to wait for the first Cluster to complete
# 1. Set the waiter name
waiter_name = 'ClusterUpdateComplete'
# 2. Configure the waiter settings
waiter_config = {
'version': 2,
'waiters': {
'ClusterUpdateComplete': {
'operation': 'describe_update',
'delay': delay,
'maxAttempts': max_attempts,
'acceptors': [
{
"matcher": "path",
"expected": "Successful",
"argument": ['update']['status'],
"state": "success"
},
{
"matcher": "path",
"expected": "InProgress",
"argument": ['update']['status'],
"state": "retry"
},
{
"matcher": "path",
"expected": "Cancelled",
"argument": ['update']['status'],
"state": "failure"
},
{
"matcher": "path",
"expected": "Failed",
"argument": ['update']['status'],
"state": "failure"
}
],
},
},
}
# 3. Create the waiter using the custom configs
waiter_model = WaiterModel(waiter_config)
custom_waiter = create_waiter_with_client(waiter_name, waiter_model, eks_api)
# This is to update the cluster after it is created to make the endpoint private
# and to enable cluster logging to CloudWatch
def lambda_handler(event, context):
logger.info("Event: " + str(event))
print('Cluster update to Private Access only')
response = eks_api.update_cluster_config(
name='LambdaTest',
resourcesVpcConfig={
'endpointPublicAccess': False,
'endpointPrivateAccess': True
}
)
try:
UpdateID = (response['update']['id'])
print('Waiting for Update to complete before doing the next update')
custom_waiter.wait(name='LambdTest',update-id='UpdateID')
print('Cluster update to send all logs to CloudWatch')
response = eks_api.update_cluster_config(
name='LambdaTest',
logging={
'clusterLogging': [
{
'types': [
'api','audit','authenticator','controllerManager','scheduler'
],
'enabled': True
}
]
}
)
except WaiterError as e:
print(e)
print('There was an error updating the cluster')
raise e
Он должен обновить конечную точку как частную, и как только статус будет успешным, он запустит следующее обновление..