Go Gin에서 수신한 HTTP 요청 본문을 AWS Kinesis Firehose에 저장
다음은 간단한 예입니다.
package main
import (
"fmt"
"encoding/json"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/firehose"
"github.com/gin-gonic/gin"
)
type EntryRecord struct {
PostBodyField string `json:"entry"`
Host string `json:"host"`
RemoteAddr string `json:"remoteaddr"`
}
const (
deliveryStreamName = "firehose-dest-bucket"
)
func handleEntry(c *gin.Context) {
buf := make([]byte, 2048)
n, _ := c.Request.Body.Read(buf)
body_filed := string(buf[0:n])
fmt.Println(body_filed)
entry_record := EntryRecord{
PostBodyField: body_filed,
Host: c.Request.Host,
RemoteAddr: c.Request.RemoteAddr,
}
firehose_svc := firehose.New(session.New(), aws.NewConfig().WithRegion("ap-northeast-1"))
record := &firehose.Record{}
json, _ := json.Marshal(entry_record)
record_byte := append([]byte(json), []byte("\n")...)
record.SetData(record_byte)
_, err := firehose_svc.PutRecord(
&firehose.PutRecordInput{
DeliveryStreamName: aws.String(deliveryStreamName),
Record: record,
},
)
if err != nil {
if awsErr, ok := err.(awserr.Error); ok {
print(awsErr.Message())
}
}
}
func main() {
r := gin.Default()
r.POST("/submit", handleEntry)
r.Run()
}
전제 조건
다음은 Firehose로 데이터를 보내는 부분입니다.
&firehose.PutRecordInput{
DeliveryStreamName: aws.String(deliveryStreamName),
Record: record,
},
Record 인수는 SDK에 정의된 구조입니다.
record := &firehose.Record{}
json, _ := json.Marshal(entry_record)
record_byte := append([]byte(json), []byte("\n")...)
record.SetData(record_byte)
참조
AWS Go SDK
Reference
이 문제에 관하여(Go Gin에서 수신한 HTTP 요청 본문을 AWS Kinesis Firehose에 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tokazaki42/save-the-http-request-body-received-by-go-gin-to-aws-kinesis-firehose-2eb2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)