Echo, Go, GO용 AWS SDK 및 AWS S3 시작하기

준비



다음과 같은 몇 가지 도구를 준비해야 합니다.
  • 간다. 다운로드할 수 있습니다here. 이 게시물에서는 Go 1.18을 사용합니다.
  • 선호하는 IDE(통합 개발 환경).
  • 우체부. 다운로드할 수 있습니다here. 다른 유사한 도구를 자유롭게 사용하십시오.

  • AWS S3 및 IAM 사용자 설정


  • AWS 콘솔 열기
  • 검색창에서 S3를 검색합니다. S3를 클릭합니다.


  • 클릭 Create bucket


  • 버킷 이름을 입력하고 AWS 지역을 선택합니다. 그런 다음 Create bucket를 클릭합니다.

  • 참고: 구성을 그대로 둡니다. 구성할 수 있습니다.


  • IAM -> 사용자로 이동합니다.
  • 새 사용자를 만듭니다. 파일을 업로드할 책임이 있는 사용자를 생성합니다. Add User 을 클릭합니다.


  • 사용자 이름을 입력하고 Access key - Programmatic access를 선택합니다.


  • Next 을 클릭합니다. 권한을 설정하겠습니다. 지금은 AmazonS3FullAccess 를 사용하겠습니다. 최소 권한을 얻기 위해 사용자 지정 권한을 설정할 수 있습니다.


  • 다른 설정을 구성하고 사용자를 만들 수 있습니다.
  • 그런 다음 자격 증명을 복사하고 저장합니다. 나중에 이것을 사용할 것입니다.



  • 코딩 시간


  • 프로젝트에 대한 폴더/디렉토리를 준비합니다.
  • 터미널을 엽니다(현재 디렉토리가 프로젝트인지 확인). 이동 모듈을 시작합니다. 실행 go mod init <project name> , 예: go mod init explore-go .
  • 종속성을 추가합니다. 먼저 Echo를 추가합니다. go get github.com/labstack/echo/v4
  • AWS SDK 및 S3 서비스를 추가합니다.

  • go get github.com/aws/aws-sdk-go-v2
    go get github.com/aws/aws-sdk-go-v2/config
    go get github.com/aws/aws-sdk-go-v2/service/s3
    go get github.com/aws/aws-sdk-go-v2/feature/s3/manager
    

  • 아래 코드로 파일server.go을 생성합니다. 버킷 이름을 변경하는 것을 잊지 마십시오.

  • package main
    
    import (
        "context"
        "mime/multipart"
        "net/http"
    
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
        "github.com/aws/aws-sdk-go-v2/service/s3"
        "github.com/labstack/echo/v4"
        "github.com/labstack/echo/v4/middleware"
    )
    
    type UploadResult struct {
        Path string `json:"path" xml:"path"`
    }
    
    func upload(c echo.Context) error {
        file, err := c.FormFile("file")
        if err != nil {
            return err
        }
        src, err := file.Open()
        if err != nil {
            return err
        }
        defer src.Close()
        result, err := UploadToS3(c, file.Filename, src)
        if err != nil {
            return err
        }
        data := &UploadResult{
            Path: result,
        }
        return c.JSON(http.StatusOK, data)
    }
    
    func UploadToS3(c echo.Context, filename string, src multipart.File) (string, error) {
        logger := c.Logger()
        cfg, err := config.LoadDefaultConfig(context.TODO())
        if err != nil {
            logger.Fatal(err)
            return "", err
        }
        client := s3.NewFromConfig(cfg)
        uploader := manager.NewUploader(client)
        result, err := uploader.Upload(context.TODO(), &s3.PutObjectInput{
            Bucket: aws.String("<change this with your bucket name>"),
            Key:    aws.String(filename),
            Body:   src,
        })
        if err != nil {
            logger.Fatal(err)
            return "", err
        }
        return result.Location, nil
    }
    
    func main() {
        e := echo.New()
        e.Use(middleware.Logger())
        e.GET("/", func(c echo.Context) error {
            return c.String(http.StatusOK, "Hello, World!")
        })
        e.POST("/upload", upload)
    
        e.Logger.Fatal(e.Start(":1323"))
    }
    

  • 환경 변수를 설정합니다.

  • (리눅스의 경우)

    export AWS_REGION=<change with your region>
    export AWS_ACCESS_KEY_ID=<change with your key id>
    export AWS_SECRET_ACCESS_KEY=<change with you access key>
    

    (윈도우용)

    set AWS_REGION=<change with your region>
    set AWS_ACCESS_KEY_ID=<change with your key id>
    set AWS_SECRET_ACCESS_KEY=<change with you access key>
    

  • 서버를 실행합니다. go run server.go .


  • Postman으로 API를 호출합니다. 올바른 주소 표시줄, HTTP 메서드 및 본문을 입력했는지 확인하십시오. 그런 다음 보내기를 클릭합니다.


  • 성공하면 콘솔에 다음과 같은 메시지가 표시됩니다.


  • S3를 엽니다. 파일이 거기에 있는지 확인하십시오.


  • Github 프로젝트




    베르비안톨레오 / 탐색 이동


    바둑 탐험





    탐색 이동


    블로그 게시물


    이 게시물의 일부: Dev.to

    특허


    MIT


    View on GitHub


    대박



    당신은 굉장합니다!


    GIF 이미지 출처: https://i.giphy.com/media/vCKC987OpQAco/giphy.gif



    질문이나 문제가 있으면 언제든지 도움을 요청하십시오.

    고맙습니다.

    좋은 웹페이지 즐겨찾기