HIT_girl
HIT_girl

Reputation: 875

AWS SAM template doesn't execute BuildMethod

I have a lambda functions that has somewhat non standard packaging. I am using a Makefile to help me package what I need and use it as my build method with sam build command. However I don't see this makefile being executed. Can't figure out why not. Here is what I have :

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: (the name is based on some AWS examples)


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

Build succeeded when I run sam build -t sam_template.yaml , but I can tell the Makefile didn't run (no messages printed out and it would create a .serverless directory, but it didn't)

Anyone has an idea what is wrong in this setup?

Upvotes: 5

Views: 3354

Answers (1)

HIT_girl
HIT_girl

Reputation: 875

so I figured it out and it wasn't anything to do with the syntax. I was running from IntelliJ terminal. Since I was hitting a wall with this one, I started pocking around and running few other SAM commands. Running sam validate also kept failing, but with an error pointing to unset default region. My region was properly set in both .aws/config and I even tried to export an env variable AWS_DEFAULT_REGION , but nothing worked. It kept failing with unset region. So I started looking at my plugins in IntelliJ and turns out I had both AWS Toolkit and Debugger for AWS Lambda (by Thundera) installed. I uninstalled the later and I'm back in business. Not clear on why this plugin was interfering with my console and cli, but it did. Getting rid of it did the trick

Upvotes: 1

Related Questions