Created
July 11, 2022 05:04
-
-
Save skanehira/f700a3950f88b83b6baa751fb8c9db18 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bytes" | |
"context" | |
"encoding/base64" | |
"fmt" | |
"log" | |
"github.com/aws/aws-sdk-go/aws" | |
"github.com/aws/aws-sdk-go/aws/session" | |
"github.com/aws/aws-sdk-go/service/s3/s3manager" | |
"golang.org/x/sync/errgroup" | |
"golang.org/x/sync/semaphore" | |
) | |
// 100並行までのセマフォを作る | |
var s *semaphore.Weighted = semaphore.NewWeighted(100) | |
func main() { | |
// base64の文字列の配列 | |
images := []string{} | |
sess := session.Must(session.NewSession()) | |
uploader := s3manager.NewUploader(sess) | |
ctx := context.Background() | |
// エラーがあった場合、処理を中断するため errogroup.Group を使う | |
var eg errgroup.Group | |
for i := range images { | |
// シャドーイングを回避 | |
image := images[i] | |
eg.Go(func() error { | |
// 重みを追加 | |
s.Acquire(ctx, 1) | |
// 重みをリリース | |
defer s.Release(1) | |
b, err := base64.StdEncoding.DecodeString(image) | |
if err != nil { | |
return fmt.Errorf("failed to decode image from base64 string: %w", err) | |
} | |
// make object key | |
key := "" | |
// upload to s3 | |
_, err = uploader.Upload(&s3manager.UploadInput{ | |
Bucket: aws.String("bucket"), | |
Key: aws.String(key), | |
Body: bytes.NewBuffer(b), | |
}) | |
if err != nil { | |
return fmt.Errorf("failed to upload s3: %w", err) | |
} | |
return nil | |
}) | |
} | |
if err := eg.Wait(); err != nil { | |
log.Fatalf("faield to convert or upload image: %s", err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment