soranoriの畑

ゆるく

AWS Well-Architected Frameworkの概要

目的

効率が良く、費用対効果が⾼く、安全で信頼のおけるクラウド対応システムを設計して運⽤するためのベストプラクティスを提供すること。

Reliability (信頼性)

障害による中断・停止と障害復旧による影響を軽減するインフラストラクチャを構成する。

  • インフラストラクチャサービスの障害復旧の自動化
  • 復旧手順を常に検証してすぐに実行できるようにしておく
  • 需要変化に応じたスケーリングができるよう設計し可用性を高める
  • キャパシティの勝手な推測をやめてモニタリングを元にした設計をする

Performance Efficiency (パフォーマンス効率)

システム要件に合わせてリソースを最適化してインフラの効率化を図る。

  • システム要件に合わせてコンピューティングリソースを最適化/効率化する
  • AWSが提供する最新のサービスを把握/活用してインフラ構成の効率化を推進する

Security (セキュリティ)

AWS内のデータ、システム、アセットの保護とモニタリングによりセキュリティを高める。

  • 全てのレイヤーでのセキュリティを適用
  • アクセス追跡やモニタリングの実施
  • 条件ドリブンのアラートをトリガーとしてセキュリティイベントへの応答を自動化
  • AWS責任共有モデルに基づく対象範囲の保護に集中する
  • セキュリティのベストプラクティスの自動化
    • ソフトウェアベースのセキュリティ設定を使用し、迅速でコスト効率の良いスケーリングを安全に実行する
    • インフラストラクチャ全体のコード化による管理

Cost Optimization (コスト最適化)

不必要なリソースの削減や最適な料金選択によりコストを削減する。

  • 不必要なリソースの削減
  • 透明性のある費用分担
  • マネージド型サービスを利用してコストを削減
  • 固定償却コストを利用料に応じた変動コストへと転換
  • スケールによるコストメリットを模索
  • データセンターへの投資不要化

Operational Excellence (運用上の優秀性)

予期せぬ計画の変更や障害などの発生に対応できる、自動化された運用実務及び検証済の手順を記したドキュメントがあること。

  • インフラストラクチャ管理をコード化
  • 事業の目的に沿った運用手順の整備
  • 定期的かつ小規模変更実施
  • 予期せぬイベントへの準備
  • 日々の運用と障害からの学習と改善の実施
  • 運用手順を常に見直し最適かつ最新な状態を保持

参考

wa.aws.amazon.com

AWS アーキテクチャ設計 キホンのキ

AZの構成

1つのリージョンにつき2つのAZを利用してアーキテクチャを設計するのが基本となる。3つ以上はコスト効率が低下する。 図のように2つのAZにサーバーやDBを配置する マルチAZ をとって冗長構成にすることで可用性を高めるパターンがよくある。あとはS3を使ってDBのバックアップを取ることで耐障害性を高めたり。

マルチAZ構成
マルチAZ構成

VPC

システムやサービスの大きさにもよるが、図のように2つのAZに跨るように2つ以上のVPCに分割する マルチVPC方式 をとって可用性を確保するのが推奨されている。ただし、小規模システムの場合は2つ以上VPCを利用するのは管理も面倒になったりするケースもあるので1つのVPCで構成することもある。

マルチVPC方式
マルチVPC方式

また、ネットワークの分割方法としては マルチアカウント方式 もある。組織やシステムの単位でアカウントを分けて、アカウントごとにVPCを構築することで可用性を高めるやり方もある。

サブネット

インターネットへのアクセス範囲を適切に定義することが重要となる。インターネットとの接続が必要なリソースのみをパブリックサブネットへ配置し、その他のリソースをインターネットから隔離することでセキュリティを高めていく。
サブネットの分割としては、1つのAZに対して1つのパブリックサブネットと1つのプライベートサブネットが基本となる。下記のようにマルチAZ構成にした上で片方のAZをスタンバイや負荷分散用として使用し可用性を高める構成がよくある。

サブネットのサイズは /24 以上の大きなサブネットがAWS側で推奨されている。

AWS S3にゆるく入門 ~S3の外部接続~

AWS Storage Gateway

AWS Storage Gatewayを使用してオンプレミス環境とS3を接続する
AWS Storage Gatewayを使用してオンプレミス環境とS3を接続する

標準的なストレージプロトコルを利用して外部システム環境(自社オンプレ等)とAWSのストレージサービスを接続するサービス。 AWSが持つ機能や性能を活用できることが大きな利点。

  • 標準的なストレージプロトコルを活用してオンプレ環境等とシームレスな統合ができる
  • キャッシュを活用した低レイテンシーなアクセスが可能
  • 堅牢性や拡張性が高く低コストなAWSストレージサービスを利用できる
  • AWSが持つモニタリング・セキュリティ機能と統合してインフラ管理できる

用途

  • ビッグデータ処理やシステム移行のために一時的にデータを保存したいとき
  • バックアップやアーカイブ、災害対策としてAWSにデータを保持しておきたいとき

タイプ

利用するデータタイプに応じて3つのゲートウェイを利用する。

  1. ファイルゲートウェイ

    • オンプレ環境のファイルやデータStrage Gateway経由でS3のオブジェクトとして格納したい時に使う
    • 更新データは非同期でAWSに転送される
    • S3のライフサイクルポリシー、バージョニング、クロスリージョンレプリケーションなどのS3の利点を活用できる
  2. ボリュームゲートウェイ

    • オンプレ環境のディスクデータをStrage Gateway経由でS3にSnapshotを取得してAWS環境を使ったDisaster Recoveryをしたい時に使う
    • オンプレ環境のローカルディスクのバックアップが自動的に実施できる
    • 新データは非同期でAWSに転送される
    • オンプレ環境側のStrage Gatewayへリストアできる
    • AWS上でEBSディスクへのリストアも可能
  3. テープゲートウェイ

    • Strage Gateweyを仮想テープライブラリとして利用することで堅牢性の高い外部保管バックアップストレージを実現している
    • バックアップデータをS3およびGlacierに格納
    • 安価にバックアップやアーカイブを実施したい時に使う

S3 Transfer Acceleration

クライアントとS3バケット間の長距離にわたるファイル転送を簡単かつ安全・高速に実施できる。 下記のようなユースケースがある。

  • 一つのバケットに対して世界中からファイルアップロードが行われる
  • 大陸間で定期的にGBからTB単位のデータを転送する

Snowball

物理ストレージデバイスを使用し、オンプレのデータをAWSへ移行することができる。データは強制的に暗号化され、保管中や輸送中のデータが保護されている。
バイス自体はAWSに依頼すると借りることができる。

AWS S3にゆるく入門 ~Glacierの概要~

Glacierとは

バックアップなど中長期保存用のS3よりも安価なストレージ。 S3と同じ耐久性で値段が安いが、データ取得に時間がかかる。

特徴

✅ データはアーカイブに保存される
✅ 1つのアーカイブの最大サイズは40TB
✅ 保存可能なアーカイブ数とデータ量には制限なし
✅ 作成時に一意のアーカイブIDが割り当てられ、作成後はアーカイブを更新できない
アーカイブを保存するためのコンテナとして ボールト を使用 (ボールトの中にアーカイブを作成する)
✅ S3のライフサイクルルールと連携してS3のデータを自動アーカイブすることで、全体的なコストを削減できる
✅ デフォルトでAES256を使用して暗号化される
✅ S3と違い、直接データを保存・取得することができず、S3ライフライクリ管理か、プログラム処理による保存・取得が必要
✅ 最低保持期間は90日

構造と仕組み

S3と異なり、ボールトとアーカイブとという単位でデータを保存する。 アーカイブに一時的に高速でデータをアーカイブして、低速でボールトに長期保存する。

データ取り出しタイプ

データ取得タイプに応じてデータ取得にかかる時間と料金が変わってくる。

タイプ 特徴
迅速 アーカイブのサブセットが迅速に必要になった場合にデータに素早くアクセスするモード
・通常1~5分で取り出せる
プロビジョニングキャパシティ ・迅速取り出しの取得容量を必要な時に利用できるよう予約しておける仕組み
標準 ・デフォルトはこれ
・取り出しに2~5時間くらいかかる
大容量 ・最も安価
・大量のデータを1日以内に低コストで取得できる
・取り出しに5~12時間くらいかかる

アクセス管理

用途に応じて下記の方式を使い分ける。

方式 特徴
IAMポリシー ・リソースへのアクセス権限を管理
ボールトポリシー ・組織内外やユーザーに対してボールとへのアクセス権を付与したり制限したりできる(バケットポリシーと同じ感じ)
データ取り出しポリシー ・データ取り出しに関する制限を定義できる
・無料利用枠を超えるような取り出しを禁止したりしてコスト管理できる
ボールとロックポリシー ・データの変更を禁止できる
署名 ・認証保護のために全リクエストに署名が必要

コスト

S3とは異なり、データの保管は安いが取り出しにコストがかかる。

項目 料金
容量あたりの料金 GB/月 あたり0.005UDS (0.5円ほど)
→S3は標準で0.025USD
データ取り出し料金 迅速: 0.033USD/GB
標準: 0.011USD/GB
大容量: 0.00275USD/GB
データ取り出しリクエスト料金 リクエスト1000件ごとに下記の料金が発生。
迅速: 11.00USD
標準: 0.0571USD
大容量: 0.0275USD
プロビジョニングされた迅速取り出し 110.00USD/プロビジョンド容量単位
データ転送料金 ・データ転送(IN)は無料だが、OUTは1GB/月まで無料でそれ以上は有料となる

Glacier Deep Archive

Glacierよりも値段が安くデータ保存が可能だが、取得はさらに遅くなる中長期保存用のストレージタイプ。

✅ 基本的なデータモデル・管理はGlacierと同じ
✅ 1GBあたりの月額料金0.00099USDから利用可能でAWS最安値
✅ データは3つ以上のAZに跨って保存され、S3と同様の99.999999999%の耐久性を実現
✅ データ取り出しタイプが、「標準」でおよそ12時間以内、「大容量」で48時間以内でデータ取り出し可能

AWS S3にゆるく入門 ~クロスアカウントアクセス~

クロスアカウントアクセス

別のAWSアカウントのIAMユーザーやロールからのアクセスを下記3つの方式を使って許可できる。

方式 詳細
バケットポリシーとIAMポリシーによる許可 ・S3バケットへのアクセスを許可するIAMポリシーを設定
・IAMユーザーとロールにIAMポリシーを設定
・S3バケットへのクロスアカウントアクセスを許可する場合、バケットポリシーでアカウントを指定して許可を行う
ACLとIAMポリシーによる許可 ・S3バケットへのアクセスを許可するIAMポリシーを設定
・IAMユーザーとロールにIAMポリシーを設定
・S3バケットの特定のオブジェクトへのクロスアカウントアクセスを許可したい場合はACLでアカウントを指定
IAMロールによる許可 ・IAMロールの権限委譲を利用して、S3バケット/オブジェクトへのプログラムによるアクセスまたはコンソールアクセス用のクロスアカウントのIAMロールを設定
・AssumeRoleの実行を許可したロールにより別アカウントユーザーに権限を委譲する

オブジェクトの所有者

S3ではデフォルトでオブジェクトアップロードしたユーザーがオブジェクトの所有者となる。
そのため、クロスアカウントでアップロードした場合、バケットはアカウントBのものだが、オブジェクトはアカウントAが所有している状態が出来上がる。
デフォルトではオブジェクトにはオブジェクト所有者のみがアクセス可能なので、アカウントBのバケットにも関わらず、アカウントAがアップしたオブジェクトにアクセスする権限がないことになる。
そのほか、オブジェクトの所有者ができることは次の通り。

  • 他のユーザーにオブジェクトへのアクセスを許可するように変更できる
  • 署名付きURLを作成し、一時的な認証情報を付加することでユーザーに期限付きのエンドポイントを発行できる

なので、必要であれば下記の通りバケットの所有者の設定を オブジェクトライター から 希望するバケット所有者 に変更しておく。

バケットの所有者の設定変更

バケットの所有者の設定変更

AWS S3にゆるく入門 ~S3の用途~

コンテンツ配信・保管

CMSやWebアプリケーションの画像等のコンテンツデータの保管先として利用する。 CDNのCloudFrontと併用して、S3に保存してあるコンテンツをクライアントに高速に配信する次の図のようなアーキテクチャがよくある。

CloudFrontとS3を使ったコンテンツ配信

CloudFrontとS3を使ったコンテンツ配信

ログファイルやバッチ処理で生成したファイルの保管

ログファイルやバッチ処理で使用または生成したファイルの保存場所として利用する。 バッチ処理で生成したCSVなどのファイルをS3に保管しておいて管理画面からダウンロードできるようにしておくなど、よくある。

バッチ処理で生成したファイルの保管

バッチ処理で生成したファイルの保管

バックアップとディザスタリカバリ

バックアップの中長期の保存場所として利用する。 また、バックアップをクロスリージョンで複製保持しておき、耐障害性を高めるのもよくあるパターン。

バックアップの保存とクロスリージョンでの複製

バックアップの保存とクロスリージョンでの複製

静的なWebサイトをホスティングする

CloudFrontとS3を使用して静的なWebサイトをホスティングするのもよくある。

CloudFrontとS3を利用した静的なWebサイトホスティング

CloudFrontとS3を利用した静的なWebサイトホスティング

データレイク

S3はデータレイクとしてデータ活用のハブとして利用する。

AWS S3にゆるく入門 ~概要②~

S3のアクセス管理

用途に応じて下記方式を使い分ける

管理方式 特徴
IAMユーザーポリシー ・IAMユーザーに対してS3へのアクセス権限を設定
・一元的にユーザー権限を管理
バケットポリシー バケットへのアクセス権をJSONで定義
・他アカウントへの許可も可能
バケット単位の高度なアクセス管理向け
ACL バケット個々のオブジェクト へのアクセス権限をXMLで定義
・他アカウントへの許可も可能
・簡易的なアクセス管理向け
署名付きURL AWS SDKで生成した署名付きURLでS3のオブジェクトへのアクセスを一定時間許可

S3はインターネットからパブリックアクセスできるように設定可能

S3の暗号化の種類

S3へのデータ保管時に暗号化形式として下記4つの形式から選択できる

暗号化方式 特徴
SSE-S3 ・S3の標準暗号化方式で簡易に利用可能
・暗号化キーの作成/管理をS3側で自動で実施
・AES-256を使用してデータを暗号化
SSE-KMS AWS KMSに設定した暗号化キーを利用した暗号化を実施
・ユーザー側でAWS KMSを利用して暗号化キーを作成/管理することが可能
・クライアント独自の暗号キーを利用可能
SSE-C ・ユーザーが指定したキーによるサーバー側の暗号化
・利用設定や管理が煩雑になりやすいのがデメリット
クライアントサイド暗号化(CSE) ・S3に送信する前にデータを暗号化する方式
AWS KMSなどを利用して暗号化キーを作成/管理
・アプリケーション内に保存したマスターキーを使用

S3アクセスポイント

S3上の共有データセットを使用するアプリケーションへの大規模なデータアクセス管理を実施できる。
S3への接続可否を一つのバケットポリシーで管理しているとだんだんポリシーが複雑になりがちだが、S3アクセスポイントを利用して個別に管理することで、ポリシーの見通しがよくなるらしい。
ちょっと難しくてまだ理解ができていないので、下記の公式ドキュメント参考に理解を深めていきたい。

Amazon S3 Access Points - アマゾン ウェブ サービス

S3アクセスアナライザー

アクセスポリシーに沿っているかを確認し、不正なアクセスが発生していないか、アクセスポリシーの実行状況を監視する機構。

✅ IAMアクセスアナライザーに連動したS3向けの機能
✅ パブリックまたは共有バケットへのアクセス制御設定を検出してリストで確認できる
バケットへのアクセス状況や設定をモニタリングするために使う

ライフサイクル管理

一定期間が経過したら下記のような処理を自動で行うように設定できる。便利。

✅ S3からGlacierに自動でアーカイブしてバックアップ
✅ S3(Standard)からS3(Standard-IA)へ移行してコスト削減
✅ 不要なオブジェクトを削除

設定方法や注意点
バケット全体やPrefixに設定
✅ オブジェクト更新日を基準に、日単位で設定し毎日0:00UTCにキューを実行
✅ 最大1000ルールまで
✅ IAに移動できるのは128KB以上のオブジェクト
✅ MFA Deleteが有効だと設定不可

レプリケーション

リージョン間を跨ぐクロスリージョンレプリケーションにより耐障害性を高めることが可能。

  • トリガー
    • バケットに対するオブジェクト作成/更新/削除
  • 設定方法や注意点

バージョン管理

誤ってデータを削除してしまったりしても過去のバージョンから復元できる。 バージョン管理をすると容量が増えてくるので、古いバージョンは削除するように設定した方が良い。

バックアップ

Glacierを利用してバックアップと復元が可能。

  • アーカイブ
    • 複数リージョンでレプリケートすることが可能
    • ライフサイクルを設定することで自動でGlacierにオブジェクトを移動してバックアップできる
  • リストア
    • 基本はバージョン管理機能によって削除されたデータを復元する

利用状況の確認

S3の利用状況やイベント発生を確認することができる。

  • 分析
    • データのアクセスパターンの簡易可視化
    • CSV形式で出力可能
    • バケット内の分析を実施
    • アクセス頻度の低いデータや保存期間を確認して、ライフサイクルの設計に活かしていく
  • イベントをトリガーにした処理の実施
    • バケット内イベントの発生をトリガーにして、SNS/SQS/Lambdaを使った通知などの実装ができる

データの解析

S3内のデータ検索・解析には用途に応じて複数サービスから選択が可能。

分析サービス 特徴
S3 Select(Glacier Select) ・S3内で直接クエリを実行しデータを取得できる
圧縮データ、CSVJSONに対して実行可能
Amazon Athena ・S3 Selectよりも複雑なクエリの実行が可能
・Athena SQLクエリでSageMakerを呼び出し、機械学習による推論も実行可能
・検索はS3 Select、分析はAthenaのイメージ
Amazon Macie 機械学習によりS3の機密データを検出、分類、保護するフルマネージド型サービス
・機密データの検出や調査を実施するときに使用する
Amazon Redshift Spectrum ・S3の格納データに対してAmazon Redshiftから直接クエリを実行できる機能
・すでにRedshiftを利用している場合におすすめ

CORS

S3ではクロスオリジンリソースシェアリング(CORS)をサポートしている。
S3リソースへのクロスオリジンアクセスを選択的に許可できる。

下記が参考になる docs.aws.amazon.com coliss.com

マルチパートアップロード

大容量オブジェクトをいくつかに分けてアップロードする機能。

✅ 最大5TBのデータをアップロードできる
✅ 失敗した場合は一部のパートデータが残ってしまうので、ライフサイクル管理でクリーンアップ設定をしておく

バッチオペレーション

大量データに対して一括でなんらかの処理を実行するなど、大規模なバッチ処理が可能になる。

docs.aws.amazon.com