Пользовательская функция ожидания EKS в Lambda - PullRequest
0 голосов
/ 08 июля 2019

Я хочу встроить пользовательский ресурс в шаблон 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

Он должен обновить конечную точку как частную, и как только статус будет успешным, он запустит следующее обновление..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...