#!/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="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option( "--requirements", default=None, type=click.Path(), help="Install packages from supplied requirements file.", ) @click.option( "--local-package", default=None, type=click.Path(), help="Install local package as well.", multiple=True, ) def build(requirements, local_package, config_file, profile): aws_lambda.build( CURRENT_DIR, requirements=requirements, local_package=local_package, config_file=config_file, profile_name=profile, ) @click.command(help="Run a local test of your function.") @click.option( "--event-file", default="event.json", help="Alternate event file.", ) @click.option( "--config-file", default="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option("--verbose", "-v", is_flag=True) def invoke(event_file, config_file, profile, verbose): aws_lambda.invoke( CURRENT_DIR, event_file=event_file, config_file=config_file, profile_name=profile, verbose=verbose, ) @click.command(help="Register and deploy your code to lambda.") @click.option( "--config-file", default="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option( "--requirements", default=None, type=click.Path(), help="Install all packages defined in supplied requirements file", ) @click.option( "--local-package", default=None, type=click.Path(), help="Install local package as well.", multiple=True, ) @click.option( "--preserve-vpc", default=False, is_flag=True, help="Preserve VPC configuration on existing functions", ) def deploy(requirements, local_package, config_file, profile, preserve_vpc): aws_lambda.deploy( CURRENT_DIR, requirements=requirements, local_package=local_package, config_file=config_file, profile_name=profile, preserve_vpc=preserve_vpc, ) @click.command(help="Upload your lambda to S3.") @click.option( "--config-file", default="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option( "--requirements", default=None, type=click.Path(), help="Install all packages defined in supplied requirements file", ) @click.option( "--local-package", default=None, type=click.Path(), help="Install local package as well.", multiple=True, ) def upload(requirements, local_package, config_file, profile): aws_lambda.upload( CURRENT_DIR, requirements=requirements, local_package=local_package, config_file=config_file, profile_name=profile, ) @click.command(help="Deploy your lambda via S3.") @click.option( "--config-file", default="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option( "--requirements", default=None, type=click.Path(), help="Install all packages defined in supplied requirements file", ) @click.option( "--local-package", default=None, type=click.Path(), multiple=True, help="Install local package as well.", ) def deploy_s3(requirements, local_package, config_file, profile): aws_lambda.deploy_s3( CURRENT_DIR, requirements=requirements, local_package=local_package, config_file=config_file, profile_name=profile, ) @click.command(help="Delete old versions of your functions") @click.option( "--config-file", default="config.yaml", help="Alternate config file.", ) @click.option( "--profile", help="AWS profile to use.", ) @click.option( "--keep-last", type=int, prompt="Please enter the number of recent versions to keep", ) def cleanup(keep_last, config_file, profile): aws_lambda.cleanup_old_versions( CURRENT_DIR, keep_last, config_file=config_file, profile_name=profile, ) 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()