-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
It would be useful if the LanguageExtensions transform feature Fn::ForEach was supported with SAM CLI.
The documentation for the LanguageExtensions transforms states that you can use it with the Serverless transform:
If you're using multiple transforms, use a list format. If you're using custom macros, place AWS-provided transforms after your custom macros. If you're using both the AWS::LanguageExtensions and AWS::Serverless transforms, the AWS::LanguageExtensions transform must come before the AWS::Serverless transform in the list.
However, when you try to use the example for the Fn::ForEach function (with or without include the Serverless Transform), the sam-cli fails to understand the syntax.
Example template.yaml:
AWSTemplateFormatVersion: 2010-09-09
Transform:
- - AWS::LanguageExtensions
- AWS::Serverless-2016-10-31
Resources:
'Fn::ForEach::Topics':
- TopicName
- - Success
- Failure
- Timeout
- Unknown
- 'SnsTopic${TopicName}':
Type: 'AWS::SNS::Topic'
Properties:
TopicName: !Ref TopicName
FifoTopic: true
Example output from sam build
:
$ sam build
2023-07-30 17:52:37 Plugin 'ServerlessAppPlugin' raised an exception: 'list' object has no attribute 'get'
Traceback (most recent call last):
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/sam_plugins.py", line 130, in act
getattr(plugin, method_name)(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/metrics/method_decorator.py", line 116, in wrapper_cw_timer
exec_result = func(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/application/serverless_app_plugin.py", line 124, in on_before_transform_template
for logical_id, app in template.iterate({SamResourceType.Application.value}):
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/sdk/template.py", line 34, in iterate
resource = SamResource(resource_dict)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/sdk/resource.py", line 26, in __init__
self.type = resource_dict.get("Type")
AttributeError: 'list' object has no attribute 'get'
Error: 'list' object has no attribute 'get'
Traceback:
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/decorators.py", line 84, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metric.py", line 184, in wrapped
raise exception # pylint: disable=raising-bad-type
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/telemetry/metric.py", line 149, in wrapped
return_value = func(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/utils/version_checker.py", line 42, in wrapped
actual_result = func(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/cli/main.py", line 95, in wrapper
return func(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/commands/build/command.py", line 166, in cli
do_cli(
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/commands/build/command.py", line 238, in do_cli
with BuildContext(
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/commands/build/build_context.py", line 184, in __enter__
self.set_up()
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/commands/build/build_context.py", line 190, in set_up
self._stacks, remote_stack_full_paths = SamLocalStackProvider.get_stacks(
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py", line 269, in get_stacks
current = SamLocalStackProvider(
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py", line 61, in __init__
self._template_dict = self.get_template(
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/providers/sam_base_provider.py", line 193, in get_template
template_dict = SamTranslatorWrapper(template_dict, parameter_values=parameters_values).run_plugins()
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/samlib/wrapper.py", line 73, in run_plugins
parser.parse(template_copy, all_plugins) # parse() will run all configured plugins
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samcli/lib/samlib/wrapper.py", line 130, in parse
sam_plugins.act(LifeCycleEvents.before_transform_template, sam_template)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/sam_plugins.py", line 136, in act
raise ex
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/sam_plugins.py", line 130, in act
getattr(plugin, method_name)(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/metrics/method_decorator.py", line 116, in wrapper_cw_timer
exec_result = func(*args, **kwargs)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/plugins/application/serverless_app_plugin.py", line 124, in on_before_transform_template
for logical_id, app in template.iterate({SamResourceType.Application.value}):
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/sdk/template.py", line 34, in iterate
resource = SamResource(resource_dict)
File "/usr/local/Cellar/aws-sam-cli/1.94.0/libexec/lib/python3.8/site-packages/samtranslator/sdk/resource.py", line 26, in __init__
self.type = resource_dict.get("Type")
An unexpected error was encountered while executing "sam build".
Search for an existing issue:
https://github.com/aws/aws-sam-cli/issues?q=is%3Aissue+is%3Aopen+Bug%3A%20sam%20build%20-%20AttributeError
Or create a bug report:
https://github.com/aws/aws-sam-cli/issues/new?template=Bug_report.md&title=Bug%3A%20sam%20build%20-%20AttributeError
(This was with SAM CLI version 1.94)