更新许可证

如果您当前的 Driverless AI 许可证已过期,则需进行更新,以继续运行 Driverless AI、运行评分管道以及访问已在 AWS Lambda 上部署的管道等。

更新 Driverless AI 许可证

与首次添加许可证相似,您可以通过替换当前的 license.sig 文件或通过 Web UI 来更新用于运行 Driverless AI 的许可证。

更新 license.sig 文件

将现有许可证替换为新许可证,从而更新 /opt/h2oai/dai/home/.driverlessai/license.sig 文件中的许可证密钥。

在 Web UI 中更新许可证

如果您的许可证已过期,Web UI 将提示您输入新的许可证。输入步骤与通过 Driverless AI Web UI 首次添加许可证的步骤相同。

更新评分管道许可证

对于 Python 评分管道,在 Python 中设置环境变量时将包含更新后的许可证。请参阅 Python 评分管道 一节,了解如何添加许可证。

对于 MOJO 评分管道,可使用环境变量、JVM 的系统属性或通过应用程序 classpath 来指定更新后的许可证文件。此操作与首次添加许可证步骤相同。请参阅 MOJO 评分管道 一节,了解如何添加许可证。

在 AWS Lambda 上更新 Driverless AI 许可证

用户可以手动更新在 AWS Lambda 生产环境中部署的每个 Driverless AI 许可证。但是,对于在生产环境中有多个 MOJO 的用户,H2O 会提供一个脚本,用于为当前在 AWS Lambda 上部署的所有 MOJO 模型更新 Driverless AI 许可证。

手动更新

AWS Lambda 上的 Driverless AI 部署管道会明确将许可证密钥设置为环境变量。可将已过期的许可证密钥替换为更新后的许可证密钥。

Update license key in production

自动更新

H2O 会提供一个脚本,用于为特定 AWS Lambda 区域中部署的所有 MOJO 更新 Driverless AI 许可证。此脚本可在任何计算机上运行。

要求

  • 新的 Driverless AI 许可证

  • 此脚本需要以下 Python 包:

    • boto3

    • argparse

    • os

更新步骤

按照以下步骤为 AWS Lambda 上的 MOJO 模型更新 Driverless AI 许可证。

  1. 复制以下代码并将其保存为 update_lambda.py

import boto3
import argparse
import os


def load_license(license_path):
    with open(license_path, 'r') as license_file:
        license_key = license_file.read()  
        return license_key

def update_function(client, license_key, function_names): 

    for name in function_names: 
        config = client.get_function_configuration(FunctionName=name)   
        config['Environment']['Variables']['DRIVERLESS_AI_LICENSE_KEY'] = license_key    

        response = client.update_function_configuration(
                    FunctionName= name,
                    Environment= config['Environment']
                )
        print("{} License Key updated successfully! ".format(name))

def list_functions(client):
    """Get the list of potential DAI lambda function names"""
    dai_functions = []
    response = client.list_functions()
    while True:
        for f in response['Functions']:
            if 'h2oai' not in f['FunctionName']:
                continue
            dai_functions.append(f['FunctionName'])
        if 'NextMarker' in response:
            marker = response['NextMarker']
            response = client.list_functions(Marker=marker)
            continue
        break

    return dai_functions

def main():
  
    parser = argparse.ArgumentParser()    
    parser.add_argument("--list", action='store_true', required=False, help="List all DAI lambda functions on the selected region. ")
    parser.add_argument("--update_all", action='store_true', required=False, help="Update all DAI Lambda functions on the selected region. ")
    parser.add_argument("--region", type=str, required=True, help="Region where the lambda function is deployed.")
    parser.add_argument("--name", type=str, required=False, help="The name of the Lambda function. ")    
    parser.add_argument("--license_path", type=str, required=False, help="Location of the license.sig file")
    parser.add_argument("--aws_access_key_id", type=str, required=False, help="AWS Credentials")
    parser.add_argument("--aws_secret_access_key", type=str, required=False, help="AWS Credentials")    
    args = parser.parse_args()
    
    if None not in (args.aws_access_key_id, args.aws_secret_access_key):
        os.environ['aws_access_key_id'] = args.aws_access_key_id
        os.environ['aws_secret_access_key'] = args.aws_secret_access_key
    
    client = boto3.client('lambda', region_name=args.region)

    if args.update_all or args.list: 
        dai_functions = list_functions(client)
        print("H2O Driverless AI Lambda Functions in {}: {}".format(args.region, dai_functions))

    _functions = []
    if args.update_all:     
        _functions = dai_functions
    elif args.name is not None: 
        _functions.append(args.name)
    else:
        print("Please set a name of a function to update") 

    if args.license_path is not None:
        license_key = load_license(args.license_path)
    elif "DRIVERLESS_AI_LICENSE_FILE" in os.environ:
        license_key = load_license(os.environ['DRIVERLESS_AI_LICENSE_FILE'])
    elif "DRIVERLESS_AI_LICENSE_KEY" in os.environ:
        license_key = os.environ['DRIVERLESS_AI_LICENSE_KEY']
    else:    
        print("No License Found")
        return 0

    update_function(client, license_key, _functions)


if __name__ == '__main__':
    main()
  1. 若需运行此脚本,您将需要提供以下信息:

  • 已部署 MOJO 的区域。请注意,必须为每个已部署 MOJO 的区域运行此脚本。

  • Lambda 函数名称

  • Driverless AI 许可证路径

  • AWS 秘密密钥 ID

  • AWS 秘密访问密钥

# run the upgrade script
python update_lambda.py --update_all --region [deployed_region] --name [Lambda_function_name] --license_path [path_to_license_file] --aws_access_key_id [AWS_ACCESS_KEY_ID] --aws_secret_access_key [AWS_SECRET_ACCESS_KEY]

# optionally view the help using either python or python3
python update_lambda.py --help