Go Gin에서 수신한 HTTP 요청 본문을 AWS Kinesis Firehose에 저장

9369 단어 goaws
Go에서 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() 
}


전제 조건


  • Kinesis Firehose를 이미 설정했습니다
  • .
  • 요청 본문 데이터를 저장할 S3 버킷을 이미 설정했습니다.

  • 다음은 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

    좋은 웹페이지 즐겨찾기