Amazon DVA-C02: ストレージ、Amazon S3、CloudFront とファイルシステム (EFS, FSx) — 学習ガイド
こちらの一部です: AWS Developer Associate DVA-C02 — 学習ガイド. 検証済みの解答で練習: Amazon試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.
Amazon S3の基礎、セキュリティ制御、および開発者パターン
Amazon S3は、代表的な高耐久オブジェクトストアです。開発者は、PutObject/GetObject/HeadObjectを中心としてAPIを設計し、大きなペイロードにはマルチパートアップロード(CreateMultipartUpload, UploadPart, CompleteMultipartUpload)を使用すべきです。また、クライアントからの一時的なアップロードには、boto3のgenerate_presigned_url('get_object')やgenerate_presigned_postのようなSDKヘルパーを利用します。サーバーサイド暗号化(PutObject時にx-amz-server-side-encryptionを指定するSSE-S3やSSE-KMS、またはPutBucketEncryptionでバケットのデフォルト暗号化を強制する)を用いてオブジェクトを保護し、バケットポリシーでaws:SecureTransportを強制してTLSを要求し、S3パブリックアクセスブロックとバケットポリシーでの明示的な拒否によって意図しないパブリックアクセスをブロックします。よくある落とし穴には、IAMの明示的な拒否がロールの権限より優先されること、署名付きURLは署名者の権限を継承するもののバケットポリシーやVPCエンドポイントポリシーの制約は引き続き受けること、ブラウザから直接アップロードする際のCORSの誤設定(PutBucketCorsで設定)などがあります。ライフサイクルルール(PutBucketLifecycleConfiguration)を使用してIntelligent-TieringやGLACIERへ移行したり、非現行バージョンを失効させたりします。非現行バージョンのルールに依存する前に、バージョニング(PutBucketVersioning)を有効化してください。監査と復旧のためには、S3サーバーアクセスログまたはS3 Access Pointsを有効化し、不変性を保つためにObject Lockをリテンションモードで使用します。新しいキーへの上書きPUTの結果整合性に対応するよう設計してください(新しいオブジェクトのPUTでは書き込み後の読み取り一貫性が保証されますが、既存キーの更新はエッジケースで結果整合性を示す可能性があります)。
高度なS3: Object Lambda、署名付きフロー、ポリシー、ライフサイクルの機微
S3 Object Lambdaを使用すると、Lambda関数をS3 Object Lambda Access Pointにアタッチすることで、GetObjectのレスポンスを変換できます。LambdaはGetObjectContextを受け取り、WriteGetObjectResponse(S3 Object Lambda/Control API経由)を呼び出して変換されたバイトを返す必要があります。典型的なパターンは、オブジェクトを複製することなく、オンザフライでの画像リサイズ、墨消し、またはフォーマット変換です。ブラウザからのアップロードには、悪用を避けるために制約付きのポリシー(content-length-range、キープレフィックス)を持つ署名付きPOST(SDKのgenerate_presigned_post)を生成します。バケットポリシーとVPCゲートウェイ/インターフェイスエンドポイントポリシーは、アクセスを制限するための強力な手段です。明示的な許可とリソース条件(aws:SourceVpce、aws:Refererは慎重に)を優先し、オープンなワイルドカードプリンシパルは避けてください。ライフサイクルの注意点には、バージョニングされたバケットの移行(noncurrentVersionTransitionsとnoncurrentVersionExpirationを明示的に設定する)や、ストレージのリークを避けるためのabort-incomplete-multipart-uploadが含まれます。転送中の暗号化を強制する場合、x-amz-server-side-encryptionを要求するか、PutBucketPolicyを使用してtlsなしのリクエストを拒否します。不変性が求められるコンプライアンス要件のためには、オブジェクトをアップロードする前にObject Lockを有効化します。プログラムによる強制が必要な場合は、S3イベント(SNS, EventBridge)とLambdaを組み合わせて、タグを適用したり、アップロード後の検証を実行したりします。
CloudFront、キャッシング戦略、エッジコンピューティング(Lambda@Edge vs CloudFront Functions)
CloudFrontはグローバルな配信を高速化し、オリジンを保護します。S3オリジンの場合、オリジンリクエストに署名し、S3への直接のパブリックアクセスを拒否するために、従来のOrigin Access IdentityよりもSigv4を使用するOrigin Access Control (OAC)を優先します。キャッシュビヘイビアのチューニングでは、Cache-Control/Expires、Authorizationヘッダーの転送、クエリストリング/クッキーベースのキャッシュキーを使用します。キャッシュの断片化を減らすために、キャッシュキーのホワイトリスト登録、またはキャッシュポリシーとオリジンリクエストポリシーの使用を推奨します。プライベートコンテンツには、CloudFrontの署名付きURLまたは署名付きクッキーを使用します(cloudfront.create_signerまたはSDKヘルパーで作成)。サブミリ秒レベルの軽量な操作(ビューワーリクエスト/レスポンス)にはCloudFront Functionsを、Node/Pythonランタイムとオリジンリクエスト/オリジンレスポンスフックを必要とするより重いロジックにはLambda@Edgeを使用します。Lambda@Edge関数はus-east-1からデプロイされ、コールドスタートの問題やリージョンへのレプリケーション遅延があることを覚えておいてください。キャッシュの無効化(invalidation)にはコストとレイテンシーが伴います。無効化を避けるために、オブジェクトキーのバージョニング(新しいファイル名をデプロイするか、クエリストリングにバージョンを追加する)を優先してください。ほぼリアルタイムの異常検知のためにCloudFrontをリアルタイムログとCloudWatchメトリクスで計測し、自動応答のためにLambdaをトリガーします。よくある落とし穴には、キャッシュを破壊するヘッダー/クッキーの過剰な転送や、無効化が即座に伝播すると想定してしまうことなどがあります。
共有ファイルシステム: EFSとFSxの選択基準、マウント、および注意点
Linuxクライアント間で同時にマウントされるPOSIX準拠のNFSv4.1ファイルシステムにはEFSを選択します。SMB/Windows機能や高性能なLustreが必要な場合はFSxのバリアントを選択します。EFSは、KMSによる保管時の暗号化、TLSマウントオプションを使用した転送中の暗号化、およびアプリケーションごとのUID/GIDマッピングのためのアクセスポイントをサポートしています。マウントには、amazon-efs-utils (
undefined
) を使用するか、高スループットのワークロードにはNFSクライアントを使用します。スループット/IOPSのパターンに基づいて、パフォーマンスモードはgeneralPurposeかmaxIO、スループットモードはburstingかprovisionedを選択します。FSx for WindowsはActive Directoryと統合し、NTFS ACL、DFS名前空間、およびネイティブなWindowsセマンティクスを持つSMB共有を公開します。マウントは、EC2 Windowsクライアントから
undefined
を使用して行います。一般的な注意点として、AD参加の複雑さやDNS解決の問題があります。FSx for Lustreはハイパフォーマンスコンピューティングに最適で、データリポジトリタスクを介してS3と透過的にリンクし、データセットをインポート/エクスポートできます。ネットワーク関連の注意点: セキュリティグループでNFS/SMBポートを開放し、EFSでは各AZにマウントターゲットを使用します。また、IAMポリシーではNFSレベルのアクセスを制限できないことを確認してください。アクセス制御はPOSIXパーミッションとセキュリティグループで行います。バックアップには、自動スナップショット(EFS Backup、FSxスナップショット)を利用し、定期的に復元をテストすることが推奨されます。
実践的な問題: ユースケースシナリオ
シナリオ: AcmeAnalytics社は、S3バケットでホストされ、CloudFrontディストリビューションを介してグローバルに提供される、顧客向けの静的ダッシュボードを運用しています。エンジニアリングチームは、プライベートなデータファイルの提供、一部のオブジェクトに対するCSVからJSONへのオンザフライ変換、そして新しいダッシュボードのビルド時に最小限のコストでキャッシュを無効化する必要があります。
課題: 安全なプライベートオブジェクトの配信、ストレージを複製しない動的な変換、およびキャッシュ更新のための低コストな戦略を実装すること。
推奨アプローチ: 1.
undefined
(SSE-KMS) と
undefined
を使用してS3バケットを作成し、非TLSアクセスを拒否し、CloudFront Origin Access Control(OACを作成してディストリビューションにアタッチ)からのアクセスのみを許可するように設定します。
undefined
を使用してバージョニングを有効化します。 2. S3 Object Lambda Access Pointを設定します。
undefined
を処理し、S3
undefined
を介してオリジナルを取得し、メモリ内でCSVをJSONに変換し、
undefined
を使用して結果を返すLambdaを実装します。 3. CloudFrontのキャッシュビヘイビアを設定します。/private/* をS3 Object Lambda Access Point(オリジンとして)にルーティングし、必要に応じてAcceptヘッダーに基づいてキャッシュするキャッシュポリシーを設定し、最小TTLを有効にします。ダッシュボードのアセットには、キャッシュ無効化を避けるためにバージョン管理されたファイル名を使用します。 4. 頻度の低い必要なキャッシュ無効化については、デプロイ後にCIから
undefined
を呼び出します。それ以外の定期的な変更については、ファイル名にコンテンツハッシュを含めたアセットをアップロードすることで、無効化コストを回避します。
理論的根拠: OACを介してS3へのアクセスをCloudFrontに制限し、SSE-KMSを強制することで、転送中および保管中のデータを保護します。S3 Object Lambdaはオブジェクトを複製することなくオンザフライの変換を提供し、オブジェクトのバージョニングやコンテンツハッシュ付きのファイル名を使用することで、キャッシュ効率を維持しながら高コストなキャッシュ無効化を回避します。
← モニタリング、ロギングとデバッグ (CloudWatch · すべてのドメイン · データベースとキャッシュ (RDS →
これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
試験に合格する →