{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "description": "The service type (should be 'lambda')",
            "pattern": "^lambda$",
            "errorMessage": "Must be 'lambda'"
        },
        "path_to_code": {
            "type": "string",
            "errorMessage": "Must be a string"
        },
        "handler": {
            "type": "string",
            "errorMessage": "Must be a string"
        },
        "runtime": {
            "type": "string",
            "errorMessage": "Must be a string"
        },
        "description": {
            "type": "string",
            "errorMessage": "Must be a string"
        },
        "memory": {
            "type": "number",
            "errorMessage": "Must be a number"
        },
        "timeout": {
            "type": "number",
            "maximum": 900,
            "errorMessage": "Must be a number"
        },
        "vpc": {
            "type": "boolean",
            "errorMessage": "Must be a boolean"
        },
        "environment_variables": {
            "type": "object",
            "description": "Any environment variables you want to inject into your code.",
            "patternProperties": {
                "^.*$": {
                    "anyOf": [
                        {"type": "string"},
                        {"type": "number"},
                        {"type": "boolean"}
                    ]
                }
            },
            "errorMessage": "Must contain 1 or more simple key/value pairs where the values are strings or numbers",
            "additionalProperties": false
        },
        "tags": {
            "type": "object",
            "description": "An arbitrary list of key/value pairs to be added as tags to the service",
            "patternProperties": {
                "^.*$": {
                    "anyOf": [
                        {"type": "string"},
                        {"type": "number"}
                    ]
                }
            },
            "errorMessage": "Must contain 1 or more simple key/value pairs where the values are strings or numbers",
            "additionalProperties": false
        },
        "dependencies": {
            "type": "array",
            "items": {
                "type": "string",
                "errorMessage": "Each item must be a string"
            },
            "errorMessage": "Must be an array of strings"
        }
    },
    "required": [
        "type",
        "path_to_code",
        "handler",
        "runtime"
    ],
    "additionalProperties": false,
    "errorMessage": {
        "required": {
            "type": "The 'type' parameter is required",
            "path_to_code": "The 'path_to_code' parameter is required",
            "handler": "The 'handler' parameter is required",
            "runtime": "The 'runtime' parameter is required"
        },
        "additionalProperties": "Invalid/Unknown property specified"
    }
}