aws / aws/aws-lambda-builders

Go modules builder fails when using local module with provisioned.AL2 runtime

Offen
#285 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area/workflow/go_modules maintainer/need-response
Vorherrschende Sprache
Python
Sterne
380
Forks
161
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
2

Beschreibung

**Description:**
Using `sam build` in go projects with a dependency on a local module fails when the function runtime is `Runtime: provided.al2`

**Steps to reproduce the issue:**
1. create a new go application `sam init --name sam-app --runtime go1.x --dependency-manager mod --app-template hello-world`
2. Create a new module (here is the example I used). In a new folder called models, initialise a new module using `go mod init hello-go/models`

add a new go file called **person.go** add this code

```golang
package models

type Person struct {
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
}

func (p *Person) FullName() string {

return p.FirstName + " " + p.LastName
}
```
3. Open the main.go file for the hello0world function. Import "hello-go/models" and replace the return statement with this

```golang

person := models.Person{FirstName: "John", LastName: "Doe"}

return events.APIGatewayProxyResponse{
Body: fmt.Sprintf("Hello %s, your ip address is %v", person.FullName(), string(ip)),
StatusCode: 200,
}, nil

```
4. Open the function go.mod file and add make sure the dependency is replaced to point to the local module

```
require (
github.com/aws/aws-lambda-go v1.23.0
hello-go/models v0.0.1
)

module hello-world

go 1.17

replace hello-go/models => ../models

```

5. Build the function `sam build`
6. If you run `sam local invoke "HelloWorldFunction"` you should see the output (with your IP address)

```
{"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello John Doe, your ip address is 127.0.0.1\n"}%
```

7. **Update the sam template to use Amazon Linux 2** instead of the managed runtime.

8. In the function definition replace handler and runtime properties, and the Metadata resource attribute

```yaml
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: bootstrap
Runtime: provided.al2
Tracing: Active # https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html
Events:
CatchAll:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: GET
Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
Variables:
PARAM1: VALUE
Metadata:
BuildMethod: makefile
```
9. Create a new Makefile in the hello-world function directory and add

```makefile
build-HelloWorldFunction:
GOOS=linux go build -o bootstrap
cp ./bootstrap $(ARTIFACTS_DIR)/.
```
10. Run `sam build`. The build now fails.

**Observed result:**

```bash
sam build
Building codeuri: /Users/sliedig/go/src/hello-go-al2/hello-world runtime: provided.al2 metadata: {'BuildMethod': 'makefile'} functions: ['HelloWorldFunction']
Running CustomMakeBuilder:CopySource
Running CustomMakeBuilder:MakeBuild
Current Artifacts Directory : /Users/sliedig/go/src/hello-go-al2/.aws-sam/build/HelloWorldFunction

Build Failed
Error: CustomMakeBuilder:MakeBuild - Make Failed: main.go:9:2: hello-go-al2/models@v0.0.1: replacement directory ../models does not exist
make[1]: *** [build-HelloWorldFunction] Error 1
make: *** [build] Error 1
```
**Expected result:**
I would expect the sam build system to correctly build my application irrespective of whether I am using go as a managed runtime or on AL2.

**Additional environment details (Ex: Windows, Mac, Amazon Linux etc)**
OS: Darwin x64 20.6.0
go version go1.17.1 darwin/amd64
SAM CLI, version 1.32.0

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Reproduce the failure with sam build using the provided.al2 template, the function go.mod replacement, and the Makefile shown in the report. Start at the CustomMakeBuilder:CopySource and CustomMakeBuilder:MakeBuild steps, then verify that the local ../models replacement remains available during the build. Done means the same Go application builds successfully with provided.al2.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
go
Bereich
build-system
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.