首页 > 解决方案 > AWS SAM 模板不执行 BuildMethod

问题描述

我有一个 lambda 函数,它有一些非标准的包装。我正在使用 aMakefile来帮助我打包我需要的东西并将其用作我的构建方法和sam build命令。但是我没有看到这个makefile被执行。想不通为什么不。这是我所拥有的:

sam_template.yaml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  subscriptions_functions

  Sample SAM Template for subscriptions_functions

Globals:
  Function:
    Timeout: 3

Resources:
  GetSubscriptionsFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: app.lambda_handler_individual_methods
      Runtime: python3.7
      Events:
        GetSubscriptions:
          Type: Api 
          Properties:
            Path: /subscriptions
            Method: get
    Metadata:
      BuildMethod: makefile
    Environment:
      Variables:
        SERVICE_METHOD_NAME: 'xyz'
        REQ_CLASS_NAME: 'xyz'
        RES_CLASS_NAME: 'xyz'

Makefile:(名称基于一些 AWS 示例)


build-GetSubscriptionsFunction:
    @echo "Buliding artifacts with sls. Destination dir " $(ARTIFACTS_DIR)
    sls package --env aws
    mkdir -p $(ARTIFACTS_DIR)
    unzip .serverless/subscriptions.zip -d $(ARTIFACTS_DIR)
    cp requirements.txt $(ARTIFACTS_DIR)
    python -m pip install -r requirements.txt -t $(ARTIFACTS_DIR)
    rm -rf $(ARTIFACTS_DIR)/bin

运行时构建成功sam build -t sam_template.yaml,但我可以告诉 Makefile 没有运行(没有打印出任何消息,它会创建一个.serverless目录,但它没有)

有人知道这个设置有什么问题吗?

标签: aws-lambdaaws-samaws-sam-cli

解决方案


所以我想通了,这与语法无关。我从 IntelliJ 终端运行。由于我遇到了这个问题,我开始四处寻找并运行其他一些 SAM 命令。运行sam validate也一直失败,但错误指向未设置的默认区域。我的区域在两者中都已正确设置,.aws/config我什至尝试导出一个 env 变量AWS_DEFAULT_REGION,但没有任何效果。它一直因未设置的区域而失败。所以我开始在 IntelliJ 中查看我的插件,结果发现我同时安装了AWS ToolkitDebugger for AWS Lambda(通过 Thundera)。我卸载了后者,我又开始营业了。不清楚为什么这个插件会干扰我的控制台和 cli,但确实如此。摆脱它就成功了


推荐阅读