#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import os import click import aws_lambda CURRENT_DIR = os.getcwd() logging.getLogger('pip').setLevel(logging.CRITICAL) @click.group() def cli(): pass @click.command(help='Create a new function for Lambda.') @click.option( '--minimal', default=False, is_flag=True, help='Exclude any unnecessary template files', ) @click.argument( 'folder', nargs=-1, type=click.Path(file_okay=False, writable=True), ) def init(folder, minimal): path = CURRENT_DIR if len(folder) > 0: path = os.path.join(CURRENT_DIR, *folder) if not os.path.exists(path): os.makedirs(path) aws_lambda.init(path, minimal=minimal) @click.command(help='Bundles package for deployment.') @click.option('--config-file', default=None, help='Alternate config file.') @click.option( '--use-requirements', default=False, is_flag=True, help='Install all packages defined in requirements.txt', ) @click.option( '--local-package', default=None, type=click.Path(), help='Install local package as well.', multiple=True, ) def build(use_requirements, local_package, config_file): aws_lambda.build( CURRENT_DIR, use_requirements=use_requirements, local_package=local_package, config_file=config_file, ) @click.command(help='Run a local test of your function.') @click.option('--event-file', default=None, help='Alternate event file.') @click.option('--config-file', default=None, help='Alternate config file.') @click.option('--verbose', '-v', is_flag=True) def invoke(event_file, config_file, verbose): aws_lambda.invoke( CURRENT_DIR, event_file=event_file, config_file=config_file, verbose=verbose, ) @click.command(help='Register and deploy your code to lambda.') @click.option('--config-file', default=None, help='Alternate config file.') @click.option( '--use-requirements', default=False, is_flag=True, help='Install all packages defined in requirements.txt', ) @click.option( '--local-package', default=None, type=click.Path(), help='Install local package as well.', multiple=True, ) def deploy(use_requirements, local_package, config_file): aws_lambda.deploy( CURRENT_DIR, config_file=config_file, use_requirements=use_requirements, local_package=local_package, ) @click.command(help='Upload your lambda to S3.') @click.option( '--use-requirements', default=False, is_flag=True, help='Install all packages defined in requirements.txt', ) @click.option( '--local-package', default=None, type=click.Path(), help='Install local package as well.', multiple=True, ) def upload(use_requirements, local_package): aws_lambda.upload(CURRENT_DIR, use_requirements, local_package) @click.command(help='Deploy your lambda via S3.') @click.option('--config-file', default=None, help='Alternate config file.') @click.option( '--use-requirements', default=False, is_flag=True, help=( 'Install all packages defined in requirements.txt' ), ) @click.option( '--local-package', default=None, type=click.Path(), multiple=True, help='Install local package as well.', ) def deploy_s3(use_requirements, local_package, config_file): aws_lambda.deploy_s3( CURRENT_DIR, config_file=config_file, use_requirements=use_requirements, local_package=local_package, ) @click.command(help='Delete old versions of your functions') @click.option('--config-file', default=None, help='Alternate config file.') @click.option( '--keep-last', type=int, prompt=( 'Please enter the number of recent versions to keep' ), ) def cleanup(keep_last, config_file): aws_lambda.cleanup_old_versions( CURRENT_DIR, keep_last, config_file=config_file, ) if __name__ == '__main__': cli.add_command(init) cli.add_command(invoke) cli.add_command(deploy) cli.add_command(upload) cli.add_command(deploy_s3) cli.add_command(build) cli.add_command(cleanup) cli()