in aws/pkg/tasks/to/s3.go [57:130]
func (t *S3UploadTask) Run(ctx context.Context) error {
// Create input reader
reader, err := t.ContainerReader(ctx)
if err != nil {
return fmt.Errorf("unable to initialize reader: %w", err)
}
// Drain all content
payload, err := io.ReadAll(reader)
if err != nil {
return fmt.Errorf("unable to drain input reader: %w", err)
}
// Extract container
c, err := container.Load(bytes.NewReader(payload))
if err != nil {
return fmt.Errorf("unable to load container from input: %w", err)
}
if c == nil {
return fmt.Errorf("container is nil")
}
// Retrieve aws session
sess := session.Must(cloudsession.NewSession(&cloudsession.Options{
AccessKeyID: t.AccessKeyID,
BucketName: t.BucketName,
DisableSSL: t.DisableSSL,
Endpoint: t.Endpoint,
IgnoreConfigCreds: t.IgnoreConfigCreds,
IgnoreEC2RoleCreds: t.IgnoreEC2RoleCreds,
IgnoreEnvCreds: t.IgnoreEnvCreds,
ObjectKey: t.ObjectKey,
Profile: t.Profile,
Region: t.Region,
S3ForcePathStyle: t.S3ForcePathStyle,
SecretAccessKey: t.SecretAccessKey,
SessionToken: t.SessionToken,
}))
// Create uploader service
uploader := s3manager.NewUploader(sess)
// Prepare input
input := &s3manager.UploadInput{
Bucket: aws.String(t.BucketName),
Key: aws.String(t.ObjectKey),
Body: bytes.NewReader(payload),
}
// Send the request
up, errUpload := uploader.UploadWithContext(ctx, input)
if errUpload != nil {
return fmt.Errorf("unable to upload secret container to S3 bucket: %w", errUpload)
}
// Get output writer
outputWriter, err := t.OutputWriter(ctx)
if err != nil {
return fmt.Errorf("unable to retrieve output writer: %w", err)
}
// Display as json
if t.JSONOutput {
if err := json.NewEncoder(outputWriter).Encode(up); err != nil {
return fmt.Errorf("unable to display as json: %w", err)
}
} else {
// Display container key
fmt.Fprintf(outputWriter, "Container successfully uploaded to: %s\n", up.Location)
}
// No error
return nil
}