首页 > 解决方案 > 如何在 go 中编写前/后流量挂钩函数?

问题描述

我开始使用 AWS SAM,现在我只有一些单元测试,但我想尝试在预流量挂钩函数中运行集成测试。

不幸的是,似乎没有 Golang 的代码示例,我只能找到 Javascript。

这个示例中,我拼凑出我必须使用代码部署 SDK 并调用PutLifecycleEventHookExecutionStatus,但具体情况仍不清楚。go的aws 代码示例存储库也没有代码部署示例。

有关我正在寻找的主题的更多信息,请访问https://github.com/awslabs/serverless-application-model/blob/master/docs/safe_lambda_deployments.rst#pretraffic-posttraffic-hooks

我想从测试一个简单地查询 DynamoDB 的 lambda 函数开始。

标签: goaws-sam

解决方案


像这样的工作:

package main

import (
    "context"
    "encoding/json"

    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/codedeploy"
)

type CodeDeployEvent struct {
    DeploymentId                  string `json:"deploymentId"`
    LifecycleEventHookExecutionId string `json:"lifecycleEventHookExecutionId"`
}

func HandleRequest(ctx context.Context, event CodeDeployEvent) (string, error) {

    // add some tests here and change status flag as needed . . .

    client := codedeploy.New(session.New())
    params := &codedeploy.PutLifecycleEventHookExecutionStatusInput{
        DeploymentId:                  &event.DeploymentId,
        LifecycleEventHookExecutionId: &event.LifecycleEventHookExecutionId,
        Status:                        "Succeeded",
    }

    req, _ := client.PutLifecycleEventHookExecutionStatusRequest(params)

    _ = req.Send()
}

推荐阅读