Looking for how to use this in your app?See Frontend Libraries →
S3 リソースを拡張する
Amplify で生成された S3 リソースの場合
Amplify Storage は、ストレージ機能を提供するために Amazon S3 リソースを生成します。AWS Cloud Developer Kit (AWS CDK) を使用して、基盤となる Amazon S3 リソースにアクセスして、バックエンド設定をさらにカスタマイズできます。
例 - Transfer Acceleration を有効にする
以下は、バケットで Transfer Acceleration を有効にする方法の例です(CDK ドキュメント)。バケットで Transfer Acceleration を有効にするには、次のように L2 CDK コンストラクトから L1 CDK コンストラクトをアンラップする必要があります。
import * as s3 from 'aws-cdk-lib/aws-s3';import { defineBackend } from '@aws-amplify/backend';import { storage } from './storage/resource';
const backend = defineBackend({ storage});
const s3Bucket = backend.storage.resources.bucket;
const cfnBucket = s3Bucket.node.defaultChild as s3.CfnBucket;
cfnBucket.accelerateConfiguration = { accelerationStatus: "Enabled" // 'Suspended' if you want to disable transfer acceleration}高速化された S3 エンドポイントを使用してファイルをアップロードする
次の API を呼び出す際に転送高速化を使用できます。
getUrldownloadDatadownloadFileuploadDatauploadFile
対応する Storage S3 プラグインオプションで useAccelerateEndpoint を true に設定して、高速化された S3 エンドポイントを操作に適用します。例えば、転送高速化を使用してファイルをアップロードする場合:
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
Future<void> uploadFileUsingAcceleration(String filePath, String key) async { final localFile = AWSFile.fromPath(filePath); try { final uploadFileOperation = Amplify.Storage.uploadFile( localFile: localFile, key: key, options: const StorageUploadFileOptions( pluginOptions: S3UploadFilePluginOptions( useAccelerateEndpoint: true, ), ), );
final result = await uploadFileOperation.result; safePrint('Uploaded file: ${result.uploadedItem.key}'); } on StorageException catch (error) { safePrint('Something went wrong uploading file: ${error.message}'); }}詳細は CDK のエスケープハッチ をご覧ください。
手動で設定した S3 リソースの場合
Web ターゲットに対して構築している場合は、このガイドに従ってください。
以下の手順で CORS ポリシーを設定します。
- Amazon S3 コンソールに移動し、プロジェクトの
userfilesバケットをクリックします。通常、バケットは [Bucket Name][Id]-dev という名前です。 - バケットの Permissions タブをクリックします。
- Cross-origin resource sharing (CORS) セクションの編集ボタンをクリックします。
- 変更を加えて、Save Changes をクリックします。
ExposeHeadersにx-amz-meta-XXXX形式で必要なメタデータを追加できます。
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "HEAD", "PUT", "POST", "DELETE"], "AllowedOrigins": ["*"], "ExposeHeaders": [ "x-amz-server-side-encryption", "x-amz-request-id", "x-amz-id-2", "ETag", "x-amz-meta-foo" ], "MaxAgeSeconds": 3000 }]