amazon-web-services - 使用 Golang 从 Lambda 调用 AppSync Mutation

标签 amazon-web-services go aws-lambda aws-appsync

我正在尝试从 lambda 调用一个突变(特别是使用 golang)。我使用 AWS_IAM 作为我的 AppSync API 的身份验证方法。我还向我的 lambda 授予 appsync:GraphQL 权限。

但是,在查看此处的文档后:https://docs.aws.amazon.com/sdk-for-go/api/service/appsync/

我找不到任何关于如何从库中调用 appsync 的文档。谁能在这里指出我正确的方向?

附言我不想从 lambda 查询或订阅或其他任何东西。这只是一个突变

谢谢!

------更新------

感谢@thomasmichaelwallace 通知我使用 https://godoc.org/github.com/machinebox/graphql

现在的问题是如何使用 aws v4 签署来自该包的请求?

最佳答案

我找到了一种使用普通 http.Request 和 AWS v4 签名的方法。 (感谢@thomasmichaelwallace 指出了这个方法)

client := new(http.Client)
// construct the query
query := AppSyncPublish{
    Query: `
        mutation ($userid: ID!) {
            publishMessage(
                userid: $userid
            ){
                userid
            }
        }
    `,
    Variables: PublishInput{
        UserID:     "wow",
    },
}
b, err := json.Marshal(&query)
if err != nil {
    fmt.Println(err)
}

// construct the request object
req, err := http.NewRequest("POST", os.Getenv("APPSYNC_URL"), bytes.NewReader(b))
if err != nil {
    fmt.Println(err)
}
req.Header.Set("Content-Type", "application/json")

// get aws credential
config := aws.Config{
    Region: aws.String(os.Getenv("AWS_REGION")),
}
sess := session.Must(session.NewSession(&config))


//sign the request
signer := v4.NewSigner(sess.Config.Credentials)
signer.Sign(req, bytes.NewReader(b), "appsync", "ap-southeast-1", time.Now())

//FIRE!!
response, _ := client.Do(req)

//print the response
buf := new(bytes.Buffer)
buf.ReadFrom(response.Body)
newStr := buf.String()

fmt.Printf(newStr)

关于amazon-web-services - 使用 Golang 从 Lambda 调用 AppSync Mutation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694693/

相关文章:

Go:如何同步和共享数据

c - 为什么 Go 似乎无法识别 C 头文件中的 size_t?

amazon-web-services - 在 Amazon QuickSight 中的计算字段内使用聚合

multithreading - Go 调度器什么时候会创建新的 M 和 P?

python - 使用 Lambda 从 S3 读取数据

amazon-web-services - 动态 AWS Sam 计划事件输入参数

amazon-web-services - 如何使用 CloudFormation 加密 AWS Lambda 环境变量

amazon-web-services - aws s3 java sdk 列表对象

amazon-web-services - 我是否可以使CodePipeline仅在手动触发时执行

amazon-web-services - 亚马逊 EKS : Setting up worker nodes on spot instances