Client initialisation in Go:
type AWSClient struct {
uploader *manager.Uploader
downloader *manager.Downloader
psClient *s3.PresignClient
s3Client *s3.Client
sesClient *sesv2.Client
}
func NewAWSClient() AWSClient {
log.Println("Configuring AWS ...")
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
log.Fatal(err)
panic("Error configuring AWS.")
}
s3Client := s3.NewFromConfig(cfg)
sesClient := sesv2.NewFromConfig(cfg)
return AWSClient{
s3Client: s3Client,
uploader: manager.NewUploader(s3Client),
downloader: manager.NewDownloader(s3Client),
psClient: s3.NewPresignClient(s3Client),
sesClient: sesClient,
}
}
And get signed URL using:
func (c AWSClient) GetPresignedURL(ctx context.Context, awsBucket string, key string, ttl time.Duration) (string, entity.Error) {
logger := rctx.LoggerWithFn(ctx)
input := &s3.GetObjectInput{
Key: &key,
Bucket: &awsBucket,
}
resp, err := c.psClient.PresignGetObject(context.TODO(), input, s3.WithPresignExpires(ttl)) // 6 days expiry.
if err != nil {
logger.Log(p.Error, "error retrieving pre-signed object: "+err.Error())
return "", entity.InternalError(err)
}
return resp.URL, nil
}
Even if I'm setting 6 days expiry, still the URL is expiring in 1 hour. Can anyone share some pointers to debug this scenario?