Como Realizar Upload de Arquivos no AWS S3 Usando Golang

Fernando Muller Junior - Sep 14 - - Dev Community

O upload de arquivos para o S3 via Golang é uma das operações mais comuns quando se trata de gerenciar arquivos na AWS. Essa funcionalidade permite que desenvolvedores enviem documentos, imagens, vídeos e outros tipos de arquivos para armazenamento na nuvem de forma segura e escalável. Neste artigo, vamos explorar como realizar essa integração utilizando a linguagem Go e a API da AWS S3. A seguir, você entenderá os principais passos para configurar seu ambiente e realizar o upload com sucesso.

Preparando o Ambiente de Desenvolvimento

Antes de começar o upload de arquivos, é necessário configurar seu ambiente de desenvolvimento. Certifique-se de que você tenha:

  1. Uma conta AWS válida.
  2. As credenciais de acesso (chave de acesso e chave secreta) para sua conta AWS.
  3. O SDK do Go instalado.
  4. O pacote oficial da AWS SDK for Go.

Para instalar o SDK da AWS para Go, basta executar o seguinte comando:

go get -u github.com/aws/aws-sdk-go/aws
Enter fullscreen mode Exit fullscreen mode

Agora que o SDK está instalado, você já está pronto para começar a escrever o código de integração com o AWS S3.

Veja como fazer lifecycle do s3 usando Lambdas para automatizar este trabalho: https://devopsmind.com.br/aws-pt-br/automacao-aws-s3-lifecycle-lambda/

Realizando o Upload para o S3

Configurando o Cliente AWS S3

A primeira etapa para realizar o upload é configurar o cliente AWS S3. Esse cliente permite que você interaja com o serviço da AWS e gerencie seus buckets e objetos. O código a seguir mostra como configurar o cliente utilizando suas credenciais:

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func createS3Client() *s3.S3 {
    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-west-2"),
    }))
    return s3.New(sess)
}
Enter fullscreen mode Exit fullscreen mode

Nesse código, criamos uma sessão AWS e configuramos o cliente S3. Não se esqueça de substituir a região pelo local onde seu bucket S3 está configurado.

Criando a Função de Upload

Após configurar o cliente AWS S3, vamos criar a função responsável por realizar o upload dos arquivos. Essa função irá ler o arquivo do sistema local e enviá-lo para o S3, dentro de um bucket específico:

import (
    "fmt"
    "os"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func uploadFileToS3(bucketName, filePath, key string) error {
    file, err := os.Open(filePath)
    if err != nil {
        return err
    }
    defer file.Close()

    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-west-2"),
    }))

    uploader := s3.New(sess)
    _, err = uploader.PutObject(&s3.PutObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(key),
        Body:   file,
    })

    if err != nil {
        return fmt.Errorf("falha no upload para o S3: %v", err)
    }
    fmt.Println("Upload realizado com sucesso!")
    return nil
}
Enter fullscreen mode Exit fullscreen mode

Aqui, a função uploadFileToS3 recebe três parâmetros: o nome do bucket, o caminho do arquivo local e a chave (nome) que o arquivo terá no S3. A função abre o arquivo e o envia para o bucket utilizando a função PutObject do AWS S3 SDK for Go.

Lidando com Permissões

Ao trabalhar com uploads no AWS S3, é importante garantir que suas permissões estão configuradas corretamente. A AWS utiliza o sistema de políticas IAM (Identity and Access Management) para gerenciar permissões de acesso aos seus recursos. Certifique-se de que o usuário ou função IAM que está sendo utilizado no código tenha permissões suficientes para realizar operações de upload no S3. Para mais detalhes sobre permissões IAM, consulte a documentação oficial da AWS.

Exemplos Práticos de Uso

Enviando Imagens para um Bucket S3

Vamos supor que você deseja criar um serviço onde usuários possam enviar imagens e armazená-las em um bucket S3. O código seria semelhante ao seguinte:

func main() {
    err := uploadFileToS3("meu-bucket", "caminho/para/imagem.png", "imagem.png")
    if err != nil {
        fmt.Println("Erro ao fazer upload:", err)
        return
    }
    fmt.Println("Upload concluído com sucesso!")
}
Enter fullscreen mode Exit fullscreen mode

Nesse exemplo, a imagem imagem.png será carregada para o bucket meu-bucket. O caminho para o arquivo e o nome dele no S3 são definidos pelos parâmetros da função uploadFileToS3.

Conclusão

Realizar o upload de arquivos para o AWS S3 com Golang é uma tarefa simples quando você utiliza as ferramentas corretas. Com o SDK da AWS para Go, você pode integrar facilmente sua aplicação com o serviço S3, oferecendo uma solução robusta e escalável para o armazenamento de arquivos. Agora que você aprendeu o básico, pode expandir sua implementação para incluir outras funcionalidades, como download de arquivos, listagem de objetos no bucket, e muito mais. Continue explorando mais possibilidades de integração com a AWS utilizando Golang e confira mais conteúdos sobre Golang e AWS S3.


. . . . . . . . . . . . . . . . . . . . . . . . . . . .