def _plan_lambdalayer()

in chalice/deploy/planner.py [0:0]


    def _plan_lambdalayer(self, resource):
        # type: (models.LambdaLayer) -> Sequence[InstructionMsg]

        api_calls = []  # type: List[InstructionMsg]
        filename = cast(str, resource.deployment_package.filename)

        # Automatically clean up old layer versions.
        # See:
        # https://docs.aws.amazon.com/lambda/latest/dg/API_DeleteLayerVersion.html
        msg = 'Creating'
        if self._remote_state.resource_exists(resource):
            state = self._remote_state.resource_deployed_values(resource)
            # Deleting a layer version won't break functions still using it.
            # From the doc link above:
            #
            # "To avoid breaking functions, a copy of the version remains in
            # Lambda until no functions refer to it."
            api_calls.append(
                models.APICall(
                    method_name='delete_layer_version',
                    params={'layer_version_arn': state['layer_version_arn']}
                )
            )
            msg = 'Updating'

        api_calls.extend([(
            models.APICall(
                method_name='publish_layer',
                params={'layer_name': resource.layer_name,
                        'zip_contents': self._osutils.get_file_contents(
                            filename, binary=True),
                        'runtime': resource.runtime},
                output_var='layer_version_arn'
            ), "%s lambda layer: %s\n" % (msg, resource.layer_name)),
            models.RecordResourceVariable(
                resource_type='lambda_layer',
                resource_name=resource.resource_name,
                name='layer_version_arn',
                variable_name='layer_version_arn',
        )])
        return api_calls