Slide 9
Slide 9 text
© LayerX Inc. 9
io.ReadAll を使っている場所の修正
調査1:どこでメモリが使われている?
- 受け取ったファイルをメモリ上に展開し、S3 に対して put していた
- aws-sdk-go の s3manager を利用するように修正
- 余分にバッファコピーしてメモリを消費することを防ぐ
// コード例(修正前)
func UploadToS3(ctx Context.Context, body io.Reader) (string, error) {
id := ulid.MustNew()
s3Key := "some-path-s3-" + id
- bodyBytes, err := io.ReadAll(body)
- if err != nil {
- return "", err
- }
- if err := aws.PutS3Object(bucket, s3Key, bytes.NewReader(bodyBytes), contentType); err != nil {
- app.LogError(ctx, err).Send()
- return "", err
- }
return s3Key, nil
}