在我以前的post中,我们专注于设置lambda开发,拉链和上传我们的功能以及诸如丢失文件之类的问题的问题。现在让我们看一下实际构建我们的功能。
构建Golang lambda函数
此代码是创建DynamoDB表的GO函数。
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
)
func createDynamoDBTable(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
// Create DynamoDB client
svc := dynamodb.New(sess)
// Define the table name, attribute definitions, key schema, and provisioned throughput
tableName := "Movies"
input := &dynamodb.CreateTableInput{
AttributeDefinitions: []*dynamodb.AttributeDefinition{
{
AttributeName: aws.String("Year"),
AttributeType: aws.String("N"),
},
{
AttributeName: aws.String("Title"),
AttributeType: aws.String("S"),
},
},
KeySchema: []*dynamodb.KeySchemaElement{
{
AttributeName: aws.String("Year"),
KeyType: aws.String("HASH"),
},
{
AttributeName: aws.String("Title"),
KeyType: aws.String("RANGE"),
},
},
ProvisionedThroughput: &dynamodb.ProvisionedThroughput{
ReadCapacityUnits: aws.Int64(10),
WriteCapacityUnits: aws.Int64(10),
},
TableName: aws.String(tableName),
}
// Create the DynamoDB table
_, err := svc.CreateTable(input)
if err != nil {
log.Fatalf("Got error calling CreateTable: %s", err)
return events.APIGatewayProxyResponse{
StatusCode: 500,
Body: "Error creating DynamoDB table",
}, err
}
return events.APIGatewayProxyResponse{
StatusCode: 200,
Body: "Created the table " + tableName,
}, nil
}
func main() {
lambda.Start(createDynamoDBTable)
}
首先,我们导入使用DynamoDB和lambda的GO套件。
func关键字声明我们的功能。 CTX参数提供“上下文” - 额外的信息,例如该功能的时间限制。 CTX带有详细信息,例如函数自动关闭之前剩下的时间。它还包含有关Lambda和API网关之间的请求和响应的数据。您可以将CTX视为获得聚会的位置和时间,因此您知道何时何地发生,并且在正确的位置准时到达那里。
在功能中,我们使用AWS GO SDK连接到DynamoDB。我们使用诸如AWS.String之类的点符号从其他软件包调用代码。
然后,我们创建一个带有年份和标题列的电影表。
导入的软件包就像工具包一样,让我们使用DynamoDB和Lambda。我们导入它们,以便我们的代码可以与这些AWS服务一起使用。
然后,创建的ynamodbtable函数使用工具包连接到dynamoDB。它通过从工具包中调用创新方法来创建表。
main()执行时首先运行。它启动了我们的表创建功能。
测试我们的功能
我们将函数缩小并上传后(请参阅详细的步骤here),让我们对其进行测试以确保其正常工作:
我们正在寻找成功的结果:
注意:AWS可能为您创建资源来模拟执行环境。如果您想使用API网关调用Lambda功能,请删除此步骤中创建的DynamoDB表。
添加API网关以调用lambda
- 导航到API网关服务,然后单击“创建API”以开始创建新的API。
根据您的要求选择“ HTTP API”或“ REST API”。 HTTP API适用于更简单的用例,这就是我们使用的。
- 定义API的集成和路线
选择我们的“ lambda函数”作为集成类型。这是访问此API端点时将调用的功能。
接下来,我们将添加一条路线。路线定义了如何将传入请求映射到关联的API网关资源和集成。每个路由都可以具有不同的配置,包括集成目标(例如lambda函数),请求/响应转换和授权设置。
我们的API网关将将发布 /CreateBtable请求路由到我们的lambda函数。< /p>
- 让我们选择默认阶段并继续创建过程
- Invoke API
为了通过我们已配置为通往 /CreateBtable的邮政路由的API网关调用我们的lambda函数,我们可以使用curl或类似的HTTP客户端的工具,或者我们可以使用诸如Postman之类的服务。这是我们可以使用命令行中的卷曲来调用lambda函数的方式:
curl -X POST <base URL of our API Gateway stage> <the path to the POST route we've defined>
和voilã!我们通过使用API网关调用lambda函数成功创建了一个DynamoDB表!
结论
现在,您知道如何在GO中构建lambda函数,该功能创建诸如DynamoDB表之类的资源。您还设置了API网关以按需触发它。
您拥有使用AWS制作无服务器功能的技能,并将其连接到各种服务。这为构建强大的应用程序打开了很多可能性!
快乐编码!