Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 22, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

既存のS3バケットまたはDynamoDBテーブルをインポートする

既存のS3バケットまたはDynamoDBテーブルをAmplifyプロジェクトにインポートします。amplify import storageコマンドを実行して、アカウントからS3またはDynamoDBリソースを検索してインポートします。

amplify import storage

amplify pushを実行してインポートプロセスを完了し、このバックエンド変更をクラウドにデプロイしてください。

amplify import storageコマンドは以下を実行します:

  • Amplifyライブラリ設定ファイル(aws-exports.js、amplifyconfiguration.json)に選択したS3バケット情報を自動的に入力します
  • 指定したS3バケットまたはDynamoDBテーブルを、すべてのストレージに依存するカテゴリ(API、Function、Predictionsなど)のストレージメカニズムとして提供します
  • 許可した場合、Lambdaファンクションが選択したS3またはDynamoDBリソースにアクセスできるようにします

この機能は特に以下の場合に便利です:

  • Amplifyカテゴリ(APIやFunctionなど)が既存のストレージリソースにアクセスできるようにしたい場合
  • アプリケーションスタックにAmplifyを段階的に導入したい場合
  • Amplifyを使用しながらS3とDynamoDBリソースを独立して管理したい場合

注記: Amplifyはインポートされたリソースのライフサイクルを管理しません。

既存のS3バケットをインポートする

amplify import storageを実行したときに、「S3 bucket - Content (Images, audio, video, etc.)」オプションを選択します。

amplify pushを実行してインポート手順を完了します。

Amplifyプロジェクトは正確に1つのS3バケットに限定されています。

Amplifyライブラリで既存のS3バケットに接続する

デフォルトでは、AmplifyライブラリはS3バケットが以下のアクセスパターンで設定されていると想定します:

  • public/ - アプリのすべてのユーザーがアクセス可能
  • protected/{user_identity_id}/ - すべてのユーザーが読み取り可能ですが、作成したユーザーのみが書き込み可能
  • private/{user_identity_id}/ - 個別のユーザーのみアクセス可能

IAMロールをAmplifyが推奨するポリシーを使用するように設定するか、StoragePathを使用して独自のパスを指定できます。

S3バケットのCORS設定を確認することを強くお勧めします。こちらの推奨ガイドを確認してください

IAMロールをAmplifyが推奨するポリシーで設定する

インポートされたS3バケットとインポートされたCognitoリソースを使用している場合、Cognito Identity Poolの認証済みロールおよび未認証ロールのポリシーを更新する必要があります。以下のステートメントを使用して、これらのロールに新しい__マネージドポリシー__(インラインポリシーではなく)を作成します:

{YOUR_S3_BUCKET_NAME}をS3バケットの名前に置き換えてください。

未認証ロールポリシー

  • public/のIAMポリシーステートメント:
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/public/*"
],
"Effect": "Allow"
}
  • public/protected/、およびprivate/への読み取りアクセス用のIAMポリシーステートメント:
{
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/protected/*"
],
"Effect": "Allow"
},
{
"Condition": {
"StringLike": {
"s3:prefix": [
"public/",
"public/*",
"protected/",
"protected/*"
]
}
},
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}"
],
"Effect": "Allow"
}

認証済みロールポリシー

  • public/のIAMポリシーステートメント:
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/public/*"
],
"Effect": "Allow"
}
  • protected/のIAMポリシーステートメント:
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/protected/${cognito-identity.amazonaws.com:sub}/*"
],
"Effect": "Allow"
}
  • private/のIAMポリシーステートメント:
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/private/${cognito-identity.amazonaws.com:sub}/*"
],
"Effect": "Allow"
}
  • public/protected/、およびprivate/への読み取りアクセス用のIAMポリシーステートメント:
{
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}/protected/*"
],
"Effect": "Allow"
},
{
"Condition": {
"StringLike": {
"s3:prefix": [
"public/",
"public/*",
"protected/",
"protected/*",
"private/${cognito-identity.amazonaws.com:sub}/",
"private/${cognito-identity.amazonaws.com:sub}/*"
]
}
},
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET_NAME}"
],
"Effect": "Allow"
}

既存のDynamoDBテーブルをインポートする

amplify import storageを実行したときに、「DynamoDB table - NoSQL Database」オプションを選択します。DynamoDBテーブルを正常にインポートするには、DynamoDBテーブルがAmplifyプロジェクトと同じリージョンに配置されている必要があります。

amplify pushを実行してインポート手順を完了します。

Amplifyプロジェクトには複数のDynamoDBテーブルを含めることができます。

マルチ環境サポート

amplify env addを使用して新しい環境を作成するとき、Amplify CLIはデフォルトで、アプリのストレージリソースをAmplifyプロジェクトの外で管理していると想定します。異なるS3バケットまたはDynamoDBテーブルをインポートするか、同じインポートされたストレージリソースを維持するかを選択するように求められます。

新しい環境でAmplifyがストレージリソースを管理したい場合は、amplify remove storageを実行してインポートされたストレージリソースのリンクを解除し、amplify add storageを実行して新しい環境で新しいAmplify管理のS3バケットとDynamoDBテーブルを作成します。

既存のS3バケットまたはDynamoDBテーブルのリンクを解除する

既存のストレージリソースのリンクを解除するには、amplify remove storageを実行します。これにより、Amplifyプロジェクトから参照されているS3バケットまたはDynamoDBテーブルのリンクが解除されるだけです。S3バケットまたはDynamoDBテーブル自体は削除されません。

amplify pushを実行してリンク解除手順を完了します。

Amplify Hostingビルドの環境変数を設定する

Amplify Hostingでアプリケーションを正常にビルドするには、以下の環境変数をビルド環境に追加してください:

環境変数説明インポートされたリソース必須
AMPLIFY_STORAGE_BUCKET_NAMEストレージ用にインポートされるS3バケットの名前S3バケットはい
AMPLIFY_STORAGE_REGIONS3バケットまたはDynamoDBテーブルが配置されているAWSリージョン(例: us-east-1、us-west-2など)S3バケットまたはDynamoDBテーブルはい
AMPLIFY_STORAGE_TABLESストレージ用にインポートされるストレージリソースとDynamoDBテーブルの名前DynamoDBテーブルはい

AMPLIFY_STORAGE_TABLES環境変数の値はJSON形式である必要があります。例えば:

{
"STORAGE_RESOURCE_NAME_1":"DDB_TABLE_NAME_1",
"STORAGE_RESOURCE_NAME_2":"DDB_TABLE_NAME_2" // 複数のDynamoDBテーブルをインポートする場合
}

STORAGE_RESOURCE_NAMEおよびDDB_TABLE_NAMEフィールドの値は、amplify/team-provider-info.jsonファイルから取得できます。