Skip to content

Instantly share code, notes, and snippets.

@winebarrel
Last active April 21, 2025 02:11
Show Gist options
  • Save winebarrel/758d768c2efb4b17b45ecb9d4e915c22 to your computer and use it in GitHub Desktop.
Save winebarrel/758d768c2efb4b17b45ecb9d4e915c22 to your computer and use it in GitHub Desktop.
package main
import (
"context"
"fmt"
"io"
"log"
"net/http"
"os"
"time"
"github.com/aws/aws-sdk-go-v2/aws"
v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/rds"
)
const EmptyStringSHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
func downloadCompleteLogFile(ctx context.Context, dbInstanceIdentifier string, logFileName string, dst io.Writer) error {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return err
}
endpointResolver := rds.NewDefaultEndpointResolverV2()
endpoint, err := endpointResolver.ResolveEndpoint(ctx, rds.EndpointParameters{
Region: aws.String(cfg.Region),
})
if err != nil {
return err
}
url := endpoint.URI
url.Path = fmt.Sprintf("/v15/downloadCompleteLogFile/%s/%s", dbInstanceIdentifier, logFileName)
req, err := http.NewRequest(http.MethodGet, url.String(), nil)
if err != nil {
return err
}
creds, err := cfg.Credentials.Retrieve(ctx)
if err != nil {
return err
}
signer := v4.NewSigner()
err = signer.SignHTTP(ctx, creds, req, EmptyStringSHA256, "rds", cfg.Region, time.Now())
if err != nil {
return err
}
res, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer res.Body.Close()
_, err = io.Copy(dst, res.Body)
return err
}
func main() {
dbInstanceIdentifier := "..."
logFileName := "error/postgresql.log.yyyy-mm-dd-hhmi"
ctx := context.Background()
err := downloadCompleteLogFile(ctx, dbInstanceIdentifier, logFileName, os.Stdout)
if err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment