TxKxZxWx's blog

AWS SAA取得に向けて学習

AWS SAA取得に向けて 103日目 問題 EBS暗号化、クロスリージョンレプリケーション、Lambda関数、DynamoDBで時系列データを処理するベストプラクティス

間違えた問題を復習

 

 

問題1:

EBSボリューム上の保存データを暗号化して保護する方法は?

  1. EC2のSSLインターフェイスを使用してインスタンスにボリュームを接続する。
  2. 暗号化されたEBSボリュームを作成する。
  3. EBSボリュームへの読み取り、書き込みのアクセスを制限するIAMポリシーを作成する。
  4. S3のサーバー側の暗号化を使用して、EBSボリュームを暗号化する。
  5. シーケンシャルアクセスの代わりにランダムアクセスでデータを書き込みする。

 

解答:

 2

 

解説:

「EBS暗号化」

EBS暗号化は、EBSボリュームのために、独自のキー管理インフラストラクチャの構築、管理、および保護を必要としない、簡単な暗号化ソリューションを提供する。

暗号化されたEBSボリュームを作成し、サポートされるインスタンスタイプにアタッチする場合、以下のタイプのデータが暗号化される。

  • ボリューム内の保存データ
  • ボリュームとインスタンスの間で移動されるすべてのデータ
  • ボリュームから作成されたすべてのスナップショット
  • それらのスナップショットから作成されたすべてのボリューム

 

docs.aws.amazon.com

dev.classmethod.jp

 

 

 

 

問題2:

 顧客は、米国オレゴン州とフランスのパリを拠点とするサービスを利用している。

アプリケーションは、オレゴンにあるS3バケットにデータを保存しており、そのデータは頻繁に更新される。

パリのオフィスでは、オブジェクトを取得する際に応答時間が遅くなっている。

パリのオフィスの遅い応答時間を解決する方法は?

  1. パリにS3バケットを作成し、ライフサイクルルールを有効にして、オレゴンのS3バケットからパリのS3バケットにデータを移行する。
  2. パリにS3バケットを作成し、オレゴンのS3バケットとパリのS3バケットの間でデータ取得の負荷を分散するALBを作成する。
  3. オレゴンのS3バケットを起点としてCloudFrontディストリビューションを作成し、キャッシュの最大保持期間(TTL)を0に設定する。
  4. パリにS3バケットを作成し、オレゴンのS3バケットからパリのS3バケットへのクロスリージョンレプリケーションを有効にする。

 

解答:

 4

 

解説:

クロスリージョンレプリケーション

 クロスリージョンレプリケーションは、異なるAWSリージョンにあるバケット間でオブジェクトを自動的に非同期コピーする機能。

クロスリージョンレプリケーション機能では、新しく作成されたオブジェクトとオブジェクトの更新がソースバケットから他のAWSリージョンの送信先バケットにレプリケートされる。

 

以下は間違い:

1:パリにS3バケットを作成し、ライフサイクルルールを有効にして、オレゴンのS3バケットからパリのS3バケットにデータを移行する。

→ライフサイクルルールの間隔は日単位になり動的なデータ移行ができないため間違い。

 

2:パリにS3バケットを作成し、オレゴンのS3バケットとパリのS3バケットの間でデータ取得の負荷を分散するALBを作成する。

→ALBはS3バケットの負荷分散を提供しないため間違い。

 

3:オレゴンのS3バケットを起点としてCloudFrontディストリビューションを作成し、キャッシュの最大保持期間(TTL)を0に設定する。

→CloudFrontが別のリクエストをオリジンに転送するまでファイルをCloudFrontキャッシュに保持する時間を制御出来る。

この期間を短くすると、動的なコンテンツを供給出来るが、パフォーマンスが低下する。

理由はファイルがエッジキャッシュ(パリ)から直接返される可能性が低く、オリジン(オレゴン)経由で取得するため。

 

docs.aws.amazon.com

 

 

問題3:

 AWS Lambdaを使用して、環境ごとに異なるデータベースパスワードが必要となるソリューションを設計している。

安全でスケーラブルな方法で要件を満たす方法は?

  1. 暗号化されたAWS Lambda環境変数を使用する。
  2. DynamoDBを使用して環境変数を保存する。
  3. 変数を分配するための専用のLambda関数を実装する。
  4. 個々の環境ごとにLambda関数を作成する。

 

解答:

 1

 

解説:

「機密情報を保存するために、環境変数を使用してLambda関数を作成する。」

 Lambda関数の環境変数により、コードへの変更を行わないで関数コードとライブラリに設定を動的に引き渡すことが出来る

Lambda関数の構成設定の指定に加えて、環境変数を使用して、データベースパスワード、AWS KMSおよびLambdaコンソールの暗号化ヘルパーを使用して機密情報を保存できる。

 

以下は間違い:

2:DynamoDBを使用して環境変数を保存する。

3:変数を分配するための専用のLambda関数を実装する。

AWS Lambdaは環境変数を使用出来るので間違い。

 

個々の環境ごとにLambda関数を作成する。

 →環境ごとにLambda関数を作成せずに、暗号化された環境変数を用いることで実現出来るため間違い。

 

 

docs.aws.amazon.com

 

 

問題4:

公益事業会社は、1万以上のセンサーから送られてくるデータを保存するアプリを構築している。

各センサーには固有のIDがあり、1日を通して10分ごとにデータポイント(約1KB)を送信する。

各データポイントには、センサーからの情報とタイムスタンプが含まれている。

この会社は、特定のセンサーから過去の1週間の情報を非常に迅速にクエリし、4週間よりも古いデータをすべて削除したいと考えている。

スケーラビリティと迅速性のためDynamnoDBを使用して、最も費用対効果の高い実装方法は?

  1. センサーIDとタイムスタンプの連結であるプライマリキー(主キー)を設定した、毎週1つのテーブルを作成する。
  2. 1つのテーブルに、センサーIDであるプライマリキー(主キー)とタイムスタンプであるソートキーを設定する。
  3. 1つのテーブルに、センサーIDとタイムスタンプを連結したプライマリキー(主キー)を設定する。
  4. センサーIDであるプライマリキー(主キー)とタイムスタンプであるソートキーを設定した、毎週1つのテーブルを作成する。

 

解答:

 4

 

解説:

「DynamoDBで時系列データを処理するベストプラクティス」

 センサーIDとタイムスタンプを含む複合キーは、クエリの高速化に役立つ。

 

※DynamoDBで時系列データを処理するベストプラクティス

DynamoDBの一般的な設計原則では、使用するテーブルの数を最小限に抑えることがお勧めされる。

ほとんどのアプリケーションで、必要なテーブルは1つだけ。

ただし、時系列データでは、期間あたりアプリケーションごとに1個使用すると、多くの場合最適に処理出来る。

 

以下は間違い:

1:センサーIDとタイムスタンプの連結であるプライマリキー(主キー)を設定した、毎週1つのテーブルを作成する。

→毎週テーブルを作成しているため有効。

しかし、正解の選択肢と比べて連結によりクエリが遅くなる。

テーブルは、パーテンションキーとしてのカスタマーIDとソートキーとしての日付/時刻で構成される複合主キーで設計する必要がある。

 

2:1つのテーブルに、センサーIDであるプライマリキー(主キー)とタイムスタンプであるソートキーを設定する。

3:1つのテーブルに、センサーIDとタイムスタンプを連結したプライマリキー(主キー)を設定する。

 →過去1週間にのみクエリする必要があり、4週間分のデータが必要なため、1つのテーブルでは意味をなさないため間違い。

これはパフォーマンスに影響する。

またプロビジョニングされたスループットの消費は、削除された項目のサイズに基づいており、テーブルを削除するよりもコストがかかる。

 

docs.aws.amazon.com