aws / aws/aws-lambda-builders

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

Abierto
#285 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

area/workflow/go_modules maintainer/need-response
Lenguaje dominante
Python
Estrellas
381
Forks
162
Merge medio
1 d 1 h
PR fusionados (30 d)
2

Descripción

**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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
go
Área
build-system
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.