4
1

More than 1 year has passed since last update.

小ネタ/Flutter で AWS S3 へのアクセスに minio を使う

Last updated at Posted at 2021-11-07

Flutter で AWS のサービス・リソースにアクセスするときに使うライブラリは、公式には Amplify Flutter に集約されてきており、S3 へのアクセスも amplify_storage_s3 を使うのがスタンダードです。

ただ、アプリケーションで内部的なデータバックアップ目的に S3 を使うなど、

  • Cognito の認証は必要ない
    • かといってゲストアクセス可能な状態では使いたくない
  • アクセスキー・シークレットアクセスキーで手軽に使いたい

というニーズには合いません。

そのような場合に使える Flutter のライブラリもいくつかあるようですが、今回は S3 互換ストレージとして有名な Minio の非公式クライアントライブラリ minio(3.0.0)を使ってみました。

※こちらのアプリケーションに組み込んで使っています。

使い方

ほぼサンプルページにあるとおりですが、東京リージョンの S3 バケットを使う場合は、

  • エンドポイントの指定を東京リージョンに合わせる
  • リージョンを指定する

必要があります。

※最初に試したとき、サンプルに書かれていなかったのでリージョンの指定を忘れていて時間を溶かしました。

  • pubspec.yaml
pubspec.yaml
dependencies:
  minio: ^3.0.0

初期化

初期化
import 'package:minio/io.dart';
import 'package:minio/minio.dart';

final minio = Minio(
    endPoint: 's3-ap-northeast-1.amazonaws.com',
    region: 'ap-northeast-1',
    accessKey: '【アクセスキー】',
    secretKey: '【シークレットアクセスキー】',
    useSSL: true,
  );

前述のとおり、エンドポイントとリージョンの指定がポイントです。


2022/11/3 追記:
minioの代わりに最新ライブラリに対応したminio_newが提供されるようになりました。

基本的な使い方に変更はありません。

  • pubspec.yaml
pubspec.yaml
dependencies:
  minio_new: ^1.0.1
  • 初期化
初期化(import部分のみ)
import 'package:minio_new/io.dart';
import 'package:minio_new/minio.dart';

アップロード

アップロード
    await minio.fPutObject('【S3バケット名】', '【S3オブジェクトキー名】', '【アップロードするファイルのパス名】');

ダウンロード

ダウンロード
import 'dart:io';

    final stream = await minio.getObject('【S3バケット名】', '【S3オブジェクトキー名】');
    await stream.pipe(File('【ダウンロード先のファイルパス名】').openWrite());

ダウンロードは単純にfGetObject()ではできないようですね。

その他

残念ながら現時点(3.0.0)では大阪リージョンには対応していないようなので(それ以前にソウルリージョンなども未対応)、大阪リージョンで使いたい場合はこのファイルの内容を書き換える必要がありそうです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1