Amazon web services 如何读取main.go之外的文件,并使其在AWS lambda上工作
在AWS Lambda上,我想在main.go之外使用CSV文件 当然,当我遵循这些步骤时,这会起作用Amazon web services 如何读取main.go之外的文件,并使其在AWS lambda上工作,amazon-web-services,go,file-io,aws-lambda,Amazon Web Services,Go,File Io,Aws Lambda,在AWS Lambda上,我想在main.go之外使用CSV文件 当然,当我遵循这些步骤时,这会起作用 cd~/go/src/lambda go样本 GOOS=linux go build main.go zip main.zip main 上传到Lambda并测试=>“你好!” main.go package main import ( "github.com/aws/aws-lambda-go/lambda" ) func hello() (string, e
main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello ƛ!", nil
}
func main() {
lambda.Start(hello)
}
...
func hello()([]string ,error){
queries, err := readCSV("sample.csv")
return queries, err
}
func main(){
lambda.Start(hello)
}
func readCSV(fileName string) (queries []string, err error) {
f, err := os.Open(fileName)
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to read CSV file", err)
return nil, err
}
r := csv.NewReader(f)
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to read CSV record", err)
return nil, err
}
companyName := strings.Replace(record[1], "INC", "", -1)
queries = append(queries, companyName+"CM")
}
return queries, nil
}
现在,我将sample.csv添加到main.go的同一目录中,并添加代码来读取它
lambda go样品
|-主要操作
|-sample.csv
main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello ƛ!", nil
}
func main() {
lambda.Start(hello)
}
...
func hello()([]string ,error){
queries, err := readCSV("sample.csv")
return queries, err
}
func main(){
lambda.Start(hello)
}
func readCSV(fileName string) (queries []string, err error) {
f, err := os.Open(fileName)
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to read CSV file", err)
return nil, err
}
r := csv.NewReader(f)
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to read CSV record", err)
return nil, err
}
companyName := strings.Replace(record[1], "INC", "", -1)
queries = append(queries, companyName+"CM")
}
return queries, nil
}
然后,当我按照上面相同的步骤操作时,这个错误发生在控制台上
{
"errorMessage": "open sample: no such file or directory",
"errorType": "PathError"
}
我怎样才能解决这个问题呢?我不知道“lambda”这个东西是否有这个概念,但当一个过程在当代商品操作系统中工作时,它有一个概念;任何使用相对(而非绝对)名称访问文件的尝试都会将该名称解释为相对于当前进程的CWD 注意另外两件事:
- 启动进程时,操作系统可以自由地将其CWD设置为它想要的任何值。
当您在交互式shell中运行进程时,shell会将进程的CWD设置为shell当前的目录,并且操作系统本身不会干扰,这一点可能并不明显 - 进程可以在运行时更改其CWD
如果我是你,我会从这一点开始。我不知道“lambda”的东西是否有这个概念,但当一个过程在当代商品操作系统中工作时,它有一个概念;任何使用相对(而非绝对)名称访问文件的尝试都会将该名称解释为相对于当前进程的CWD 注意另外两件事:
- 启动进程时,操作系统可以自由地将其CWD设置为它想要的任何值。
当您在交互式shell中运行进程时,shell会将进程的CWD设置为shell当前的目录,并且操作系统本身不会干扰,这一点可能并不明显 - 进程可以在运行时更改其CWD
如果我是你,我会从这一点开始。
转到buildmain.go
是错误的(即使它可能工作)!!使用go
工具时,切勿使用文件名。不要提供参数(例如普通的go-build
)或使用包导入路径(或文件系统路径)作为参数。go-build-main.go
是错误的(即使它可能工作)!!使用go
工具时,切勿使用文件名。不要提供参数(例如普通的go-build
)或使用包导入路径(或文件系统路径)作为参数。