AWS Lambda Goで画像アップローダを作る

AWS Lambda Goで画像アップローダを作る:

AWS Serverless Uploader
https://aws-serverless-uploader.netlify.com/


フロントエンド

  • React
  • Netlify
ReactプロジェクトをNetlifyにデプロイ。

CSSフレームワークはBulma。

API通信はAxiosを使用。


バックエンド

  • AWS Lambda Go
  • API Gateway
  • S3
  • DynamoDB
  • SAM CLI
Serverless frameworkかSAM CLIかは好きな方で良さそう。

自分的にはAWS謹製という点に惹かれてSAM CLIを選定。

sam init --runtime go 
でプロジェクトの雛形をバッと作ってくれてすぐにデプロイできるのと、AWS上の構成をコード管理できる(=infrastructure as code)ので重宝した。


GoでS3

aws-sdk-goを使用。

package main 
 
import ( 
    "bytes" 
 
    "github.com/aws/aws-sdk-go/aws" 
    "github.com/aws/aws-sdk-go/aws/session" 
    "github.com/aws/aws-sdk-go/service/s3" 
) 
 
func s3Put(img []byte) error { 
    svc := s3.New(session.New(), &aws.Config{ 
        Region: aws.String("ap-northeast-1"), 
    }) 
    if _, err := svc.PutObject(&s3.PutObjectInput{ 
        Bucket:               aws.String("バケット名"), 
        ACL:                  aws.String("private"), 
        ServerSideEncryption: aws.String("AES256"), 
        Key:                  aws.String("キー名"), 
        Body:                 bytes.NewReader(img), 
    }); err != nil { 
        return err 
    } 
    return nil 
} 


GoでDynamoDB

素のaws-sdk-goだけの実装はダルいようなのでgregu/dynamoライブラリを使用。

package main 
 
import ( 
    "github.com/aws/aws-sdk-go/aws" 
    "github.com/aws/aws-sdk-go/aws/session" 
    "github.com/guregu/dynamo" 
) 
 
type Image struct { 
    Name      string `json:"name" dynamo:"Name"` 
    URL       string `json:"url" dynamo:"Url"` 
    CreatedAt string `json:"createdAt" dynamo:"CreatedAt"` 
} 
 
// 書き込み 
func dynamoPut(data Image) error { 
    db := dynamo.New(session.New(), &aws.Config{Region: aws.String("ap-northeast-1")}) 
    if err := db.Table("テーブル名").Put(data).Run(); err != nil { 
        return err 
    } 
    return nil 
} 
 
// 全件取得 
func dynamoGetAll(data *[]Image) error { 
    db := dynamo.New(session.New(), &aws.Config{Region: aws.String("ap-northeast-1")}) 
    if err := db.Table("テーブル名").Scan().All(data); err != nil { 
        return err 
    } 
    return nil 
} 
次はAPIGateway+Lambda(Go)+Cognitoで認証処理を検証する予定。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)