-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Description
Sam build fails when function stipulates layer arn using !Ref against a template parameter with a default value and the function contains at least one environment variable against !GetAtt of a custom cloudformation resource.
Steps to reproduce
- Install aws sam cli version 0.21.0
git clone https://github.com/danludwig/aws-sam-cli-bug-reports.gitcd ./v0.21.0/lambda-layer-ref-with-defaultsam buildorsam build --use-container- Examine error stack trace
Observed result
$ sam build
Unable to process properties of HelloWorldFunction.AWS::Serverless::Function
Traceback (most recent call last):
File "runpy.py", line 193, in _run_module_as_main
File "runpy.py", line 85, in _run_code
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\__main__.py", line 12, in <module>
cli(prog_name="sam")
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 717, in main
rv = self.invoke(ctx)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 555, in invoke
return callback(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\decorators.py", line 64, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 555, in invoke
return callback(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 94, in wrapped
raise exception # pylint: disable=raising-bad-type
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 65, in wrapped
return_value = func(*args, **kwargs)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\command.py", line 105, in cli
skip_pull_image, parameter_overrides, mode) # pragma: no cover
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\command.py", line 138, in do_cli
mode=mode) as ctx:
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\build_context.py", line 65, in __enter__
self._function_provider = SamFunctionProvider(self._template_dict, self._parameter_overrides)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\sam_function_provider.py", line 52, in __init__
self.functions = self._extract_functions(self.resources)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\sam_function_provider.py", line 100, in _extract_functions
layers = SamFunctionProvider._parse_layer_info(resource_properties.get("Layers", []), resources)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\command.py", line 138, in do_cli
mode=mode) as ctx:
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\build_context.py", line 65, in __enter__
self._function_provider = SamFunctionProvider(self._template_dict, self._parameter_overrides)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\sam_function_provider.py", line 52, in __init__
self.functions = self._extract_functions(self.resources)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\sam_function_provider.py", line 100, in _extract_functions
layers = SamFunctionProvider._parse_layer_info(resource_properties.get("Layers", []), resources)
File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\lib\sam_function_provider.py", line 263, in _parse_layer_info
raise InvalidLayerReference()
samcli.commands.local.lib.exceptions.InvalidLayerReference: Layer References need to be of type 'AWS::Serverless::LayerVersion' or 'AWS::Lambda::LayerVersion'
Expected result
$ sam build
Building resource 'HelloWorldFunction'
Running NodejsNpmBuilder:NpmPack
Running NodejsNpmBuilder:CopyNpmrc
Running NodejsNpmBuilder:CopySource
Running NodejsNpmBuilder:NpmInstall
Running NodejsNpmBuilder:CleanUpNpmrc
Build Succeeded
Built Artifacts : .aws-sam\build
Built Template : .aws-sam\build\template.yaml
Commands you can use next
[] Invoke Function: sam local invoke
[] Package: sam package --s3-bucket
Additional environment details (Ex: Windows, Mac, Amazon Linux etc)
- OS: Windows 10
sam --version: 0.21.0
The bug does not seem to surface when environemnt variable values only use !Ref against template parameters.
Commenting out environment variables which use !GetAtt against a custom resource cause the builds to succeed. For example, the following will result in a successful build:
Environment:
Variables:
SAFE_ENVIRONMENT_VARIABLE_1:
!Ref TemplateParameterOne
# OFFENDING_ENVIRONMENT_VARIABLE:
# !GetAtt MyCustomResource.Parameter.Value
SAFE_ENVIRONMENT_VARIABLE_2:
!Ref MyCustomResource