func()

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
}