DEV Community

Cover image for Como Realizar Upload de Arquivos no AWS S3 Usando Golang
Fernando Muller Junior
Fernando Muller Junior

Posted on

Como Realizar Upload de Arquivos no AWS S3 Usando Golang

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.


Top comments (0)