【问题标题】:Why does AWS SAM CLI (awssamcli) fail to build when using Global section?为什么使用全局部分时 AWS SAM CLI (awssamcli) 无法构建?
【发布时间】:2021-07-17 05:23:38
【问题描述】:

我刚刚发现了 Global section,这对于清理 AWS SAM 云形成模板的 template.yaml 似乎非常有用。完成 Global 部分后,我从我的 lambda 中删除 Runtime(因为它现在应该从 Global 部分继承 Runtime)。但是一旦我这样做了,我就会得到一个错误。

这是我的template.yaml

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Global:
  Function:
    Handler: app.lambda_handler
    Runtime: python3.8
    Timeout: 900
    MemorySize: 10240
    VpcConfig:
      SecurityGroupIds:
        - !Ref SecurityGroupABC
      SubnetIds:
        - subnet-abc
        - subnet-xyz
        - subnet-rrr   
    Environment:
      Variables:
        ENV_VAR: abc123  
Resources:
   lambdaName:
    Type: AWS::Serverless::Function 
    Role: 'arn:aws:iam::1234...'
    #Runtime: python3.8
    Properties:
      CodeUri: lambda/lambdaName/

这是我在运行sam build 后看到的错误:

  File "runpy.py", line 194, in _run_module_as_main
  File "runpy.py", line 87, 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 829, in __call__
    return self.main(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1259, 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 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metric.py", line 153, in wrapped
    raise exception  # pylint: disable=raising-bad-type
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metric.py", line 122, in wrapped
    return_value = func(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\utils\version_checker.py", line 42, in wrapped
    actual_result = func(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\cli\main.py", line 90, in wrapper
    return func(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\command.py", line 210, in cli
    do_cli(
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\build\command.py", line 315, in do_cli
    artifacts = builder.build()
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\build\app_builder.py", line 139, in build
    build_graph = self._get_build_graph(self._container_env_var, self._container_env_var_file)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\build\app_builder.py", line 206, in _get_build_graph
    build_graph.clean_redundant_definitions_and_update(not self._is_building_specific_resource)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\build\build_graph.py", line 256, in clean_redundant_definitions_and_update
    self._write()
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\build\build_graph.py", line 296, in _write
    build_definition_as_table = _function_build_definition_to_toml_table(function_build_definition)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\build\build_graph.py", line 53, in _function_build_definition_to_toml_table
    toml_table[RUNTIME_FIELD] = function_build_definition.runtime
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\tomlkit\items.py", line 1022, in __setitem__
    value = item(value)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\tomlkit\items.py", line 107, in item
    raise ValueError("Invalid type {}".format(type(value)))
ValueError: Invalid type <class 'NoneType'>

如果我将 lambda 的运行时留在其部分,我不会收到错误消息。但将其保留会破坏建立这些全球价值以减少冗余的目的。

【问题讨论】:

    标签: python aws-lambda yaml aws-sam aws-sam-cli


    【解决方案1】:

    在您的模板中,应将 Global 重命名为 Globals

    请参考您已经分享的Globals Section链接。

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 2022-10-24
      • 2021-09-27
      • 2019-02-27
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多