Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

AWS Fargate 搭載の Amazon EKS で Amazon EFS を使用して、永続的なデータストレージでステートフルワークロードを実行する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Fargate 搭載の Amazon EKS で Amazon EFS を使用して、永続的なデータストレージでステートフルワークロードを実行する

作成者: Ricardo Morais (AWS)、Rodrigo Bersa (AWS)、Lucio Pereira (AWS)

概要

このパターンは、AWS Fargate を使用してコンピューティングリソースをプロビジョニングすることで、Amazon Elastic Kubernetes Service (Amazon EKS) で実行されているコンテナのストレージデバイスとして Amazon Elastic File System (Amazon EFS) を有効にするためのガイダンスを提供します。 EFS

このパターンで説明する設定は、セキュリティのベストプラクティスに従い、デフォルトで保管時と転送時のセキュリティを提供します。Amazon EFS ファイルシステムを暗号化するには、AWS Key Management Service (AWS KMS) キーを使用しますが、KMS キーの作成プロセスをディスパッチするキーエイリアスも指定できます。

このパターンの手順に従って、概念実証 (PoC) アプリケーションの名前空間と Fargate プロファイルを作成し、Kubernetes クラスターを Amazon EFS と統合するために使用される Amazon EFS コンテナストレージインターフェイス (CSI) ドライバーをインストールし、ストレージクラスを設定し、PoC アプリケーションをデプロイできます。これらの手順により、Fargate 上で実行中の Amazon EFS ファイルシステムが複数の Kubernetes ワークロード間で共有されます。このパターンには、これらの手順を自動化するスクリプトが付属しています。

このパターンは、コンテナ化されたアプリケーションでのデータ永続化が必要で、スケーリングオペレーション中のデータ損失を回避したい場合に使用できます。以下に例を示します。

  • DevOps ツール – 一般的なシナリオは、継続的インテグレーションと継続的デリバリー (CI/CD) 戦略を開発することです。この場合、Amazon EFS を共有ファイルシステムとして使用して、CI/CD ツールのさまざまなインスタンス間で設定を保存、または CI/CD ツールのさまざまなインスタンス間のパイプラインステージ用のキャッシュ (例、Apache Maven リポジトリ) を保存できます。

  • ウェブサーバー – 一般的なシナリオは、HTTP ウェブサーバーとして Apache を使用することです。Amazon EFS を共有ファイルシステムとして使用して、Web サーバーのさまざまなインスタンス間で共有される静的ファイルを保存できます。このシナリオ例では、静的ファイルが Docker イメージにベイクされるのではなく、変更がファイルシステムに直接適用されます。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • Kubernetes バージョン 1.17 以降を使用する既存の Amazon EKS クラスター (バージョン 1.27 までテスト済み)

  • Kubernetes StorageClass をバインドし、ファイルシステムを動的にプロビジョニングする既存の Amazon EFS ファイルシステム

  • クラスター管理権限

  • 目的の Amazon EKS クラスターを指すように設定されたコンテキスト

制限

  • Fargate で Amazon EKS を使用する際には、考慮すべき制限がいくつかあります。例えば、DaemonSets や特権コンテナなど、一部の Kubernetes コンストラクトの使用はサポートされていません。Fargate の制限の詳細については、Amazon EKS ドキュメントの「AWS Fargate に関する考慮事項」を参照してください。

  • このパターンで提供されるコードは、Linux または macOS を実行中のワークステーションをサポートします。

製品バージョン

  • AWS コマンドラインインターフェイス (AWS CLI)バージョン 2 以降

  • Amazon EFS CSI ドライバーバージョン 1.0 以降 (バージョン 2.4.8 までテスト済み)

  • eksctl バージョン 0.24.0 以降 (バージョン 0.158.0 までテスト済み)

  • jq バージョン 1.6 以降

  • kubectl バージョン 1.17 以降 (バージョン 1.27 までテスト済み)

  • Kubernetes バージョン 1.17 以降 (バージョン 1.27 までテスト済み)

アーキテクチャ

Amazon EFS を使用して永続的データストレージでステートフルワークロードを実行するアーキテクチャ図

ターゲットアーキテクチャは、次のインフラストラクチャで構成されます。

  • 仮想プライベートクラウド (VPC)

  • 2 つのアベイラビリティーゾーン

  • インターネットアクセスを提供する NAT ゲートウェイを持つパブリックサブネット

  • Amazon EKS クラスターと Amazon EFS マウントターゲット (マウントポイントとも呼ばれます) を持つプライベートサブネット

  • VPC レベルでの Amazon EFS

Amazon EKS クラスターの環境インフラストラクチャは次のとおりです。

  • 名前空間レベルで Kubernetes コンストラクトに対応する AWS Fargate プロファイル

  • 以下を含む Kubernetes 名前空間:

    • アベイラビリティーゾーンに分散された 2 つのアプリケーションポッド

    • クラスターレベルで永続ボリューム (PV) にバインドされた 1 つの永続ボリュームクレーム (PVC)

  • 名前空間内の PVC にバインドされ、クラスター外のプライベートサブネット内の Amazon EFS マウントターゲットを指すクラスター全体の PV

ツール

AWS サービス

  • AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインから AWS のサービスとやり取りするために使用できるオープンソースツールです。

  • Amazon Elastic File System (Amazon EFS) は、AWS クラウドでの共有ファイルシステムの作成と設定に役立ちます。このパターンでは、Amazon EKS で使用するシンプルで、スケーラブルな完全マネージド型の共有ファイルシステムを提供します。

  • Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自のクラスターをインストールまたは運用することなく、AWS で Kubernetes を実行できます。

  • AWS Fargate は、Amazon EKS 用のサーバーレスコンピューティングエンジンです。Kubernetes アプリケーションのコンピュートリソースを作成および管理します。

  • AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号キーを作成および管理する上で役立ちます。

その他のツール

  • Docker は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしてのPlatform as a Service (PaaS) 製品のセットです。

  • eksctl – これは Amazon EKS で Kubernetes クラスターを作成および管理するコマンドラインユーティリティです。

  • kubectlは、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインインターフェイスです。

  • jq は JSON を解析するためのコマンドラインツールです。

コード

このパターンのコードは、GitHub Persistence Configuration with Amazon EFS on Amazon EKS using AWS Fargate repo に記載されています。スクリプトは、このパターンの「エピック」セクションの順序に対応する epic06epic01から までのフォルダ内のエピックごとに整理されます。 エピック

ベストプラクティス

ターゲットアーキテクチャには以下のサービスとコンポーネントが含まれており、AWS Well-Architected Framework のベストプラクティスに従います。

  • Amazon EFS は、シンプルで、スケーラブル、伸縮性のあるフルマネージド型の NFS ファイルシステムです。これは、選択した Amazon EKS クラスターのプライベートサブネットに分散される、ポッドで実行中の PoC アプリケーションのすべてのレプリケーションの共有ファイルシステムとして使用されます。

  • 各プライベートサブネットの Amazon EFS マウントターゲット。これにより、クラスターの仮想プライベートクラウド (VPC) 内のアベイラビリティーゾーンごとの冗長性が確保されます。

  • Amazon EKS は Kubernetes ワークロードを実行します。前提条件セクションで説明したように、このパターンを使用する前に Amazon EKS クラスターをプロビジョニングする必要があります。

  • AWS KMS は、Amazon EFS ファイルシステムに保存されているコンテンツを保存時に暗号化します。

  • Fargate は、コンテナのコンピュートリソースを管理するため、お客様はインフラストラクチャに負担をかけずにビジネス要件に集中できます。Fargate プロファイルはすべてのプライベートサブネットに作成されます。クラスターの仮想プライベートクラウド (VPC) 内のアベイラビリティーゾーンごとに冗長性を提供します。

  • Kubernetes ポッド。 アプリケーションの異なるインスタンスでコンテンツを共有、消費、および書き込むことができることを検証します。

エピック

タスク説明必要なスキル

Amazon EKS クラスターを作成します。

クラスターが既にデプロイされている場合は、次のエピックに進んでください。既存の AWS アカウントに Amazon EKS クラスターを作成します。GitHub Repo ディレクトリで、いずれかのパターンを使用して、Terraform または eksctl を使用して Amazon EKS クラスターをデプロイします。詳細については、Amazon EKS ドキュメントの「Amazon EKS クラスターの作成」を参照してください。注: Terraform パターンには、Fargate プロファイルを Amazon EKS クラスターにリンクし、Amazon EFS ファイルシステムを作成し、Amazon EKS クラスターに Amazon EFS CSI ドライバーをデプロイする方法を示す例もあります。

AWS 管理者、Terraform または eksctl 管理者、Kubernetes 管理者

環境変数をエクスポートします。

env.sh スクリプトを実行します。これにより、次のステップで必要な情報が提供されます。

source ./scripts/env.sh Inform the AWS Account ID: <13-digit-account-id> Inform your AWS Region: <aws-Region-code> Inform your Amazon EKS Cluster Name: <amazon-eks-cluster-name> Inform the Amazon EFS Creation Token: <self-genereated-uuid>

まだ記載されていない場合は、次の CLI コマンドを使用して、上記で要求されたすべての情報を取得できます。

# ACCOUNT ID aws sts get-caller-identity --query "Account" --output text
# REGION CODE aws configure get region
# CLUSTER EKS NAME aws eks list-clusters --query "clusters" --output text
# GENERATE EFS TOKEN uuidgen
AWS システム管理者

Amazon EKS クラスターのプロビジョニング (オプション)

タスク説明必要なスキル

Amazon EKS クラスターを作成します。

クラスターが既にデプロイされている場合は、次のエピックに進んでください。既存の AWS アカウントに Amazon EKS クラスターを作成します。GitHub Repo ディレクトリで、いずれかのパターンを使用して、Terraform または eksctl を使用して Amazon EKS クラスターをデプロイします。詳細については、Amazon EKS ドキュメントの「Amazon EKS クラスターの作成」を参照してください。注: Terraform パターンには、Fargate プロファイルを Amazon EKS クラスターにリンクし、Amazon EFS ファイルシステムを作成し、Amazon EKS クラスターに Amazon EFS CSI ドライバーをデプロイする方法を示す例もあります。

AWS 管理者、Terraform または eksctl 管理者、Kubernetes 管理者

環境変数をエクスポートします。

env.sh スクリプトを実行します。これにより、次のステップで必要な情報が提供されます。

source ./scripts/env.sh Inform the AWS Account ID: <13-digit-account-id> Inform your AWS Region: <aws-Region-code> Inform your Amazon EKS Cluster Name: <amazon-eks-cluster-name> Inform the Amazon EFS Creation Token: <self-genereated-uuid>

まだ記載されていない場合は、次の CLI コマンドを使用して、上記で要求されたすべての情報を取得できます。

# ACCOUNT ID aws sts get-caller-identity --query "Account" --output text
# REGION CODE aws configure get region
# CLUSTER EKS NAME aws eks list-clusters --query "clusters" --output text
# GENERATE EFS TOKEN uuidgen
AWS システム管理者
タスク説明必要なスキル

アプリケーションワークロード用の Kubernetes 名前空間と Fargate プロファイルを作成します。

Amazon EFS とインタラクトするアプリケーションワークロードを受信する名前空間を作成します。create-k8s-ns-and-linked-fargate-profile.sh スクリプトを実行します。カスタム名前空間名またはデフォルトの指定された名前空間 を使用するように選択できますpoc-efs-eks-fargate

カスタムアプリケーション名前空間名の場合:

export $APP_NAMESPACE=<CUSTOM_NAME> ./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME" -n "$APP_NAMESPACE"

カスタムアプリケーション名前空間名がない場合:

./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前です。-n <NAMESPACE> パラメータはオプションです。通知されない場合は、デフォルトで生成された名前空間名が提供されます。

権限が付与された Kubernetes ユーザー

Kubernetes 名前空間とリンクされた Fargate プロファイルを作成する

タスク説明必要なスキル

アプリケーションワークロード用の Kubernetes 名前空間と Fargate プロファイルを作成します。

Amazon EFS とインタラクトするアプリケーションワークロードを受信する名前空間を作成します。create-k8s-ns-and-linked-fargate-profile.sh スクリプトを実行します。カスタム名前空間名またはデフォルトの指定された名前空間 を使用するように選択できますpoc-efs-eks-fargate

カスタムアプリケーション名前空間名の場合:

export $APP_NAMESPACE=<CUSTOM_NAME> ./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME" -n "$APP_NAMESPACE"

カスタムアプリケーション名前空間名がない場合:

./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前です。-n <NAMESPACE> パラメータはオプションです。通知されない場合は、デフォルトで生成された名前空間名が提供されます。

権限が付与された Kubernetes ユーザー
タスク説明必要なスキル

一意のトークンを生成します。

Amazon EFS では冪等オペレーションを保証する作成トークンが必要です (同じ作成トークンでオペレーションを呼び出しても効果はありません)。この要件を満たすには、使用可能な手法を使用して一意のトークンを生成する必要があります。例えば、作成トークンとして使用する汎用一意識別子 (UUID) を生成できます。

AWS システム管理者

Amazon EFS ファイルシステムを作成します。

アプリケーションワークロードによって読み書きされるデータファイルを受信するファイルシステムを作成します。暗号化されたファイルシステムまたは暗号化されていないファイルシステムを作成できます。(ベストプラクティスとして、このパターンのコードはデフォルトで保存時の暗号化を有効化する暗号化システムを作成します。) 一意の対称 AWS KMS キーを使用して、ファイルシステムを暗号化できます。カスタムキーが指定されていない場合は、AWS マネージドキーが使用されます。

Amazon EFS 用の一意のトークンを生成した後、create-efs.sh スクリプトを使用して暗号化された、または暗号化されていない Amazon EFS ファイルシステムを作成します。

KMS キーを使用しないで保存時に暗号化する場合:

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

KMS キーを使用して保存時に暗号化する場合:

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークン、$KMS_KEY_ALIAS は KMS キーのエイリアスです。

暗号化しない場合:

./scripts/epic02/create-efs.sh -d \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークン、–d は保存時の暗号化を無効にします。

AWS システム管理者

セキュリティグループを作成します。

Amazon EKS クラスターが Amazon EFS ファイルシステムにアクセスできるようにするセキュリティグループを作成します。

AWS システム管理者

セキュリティグループのインバウンドルールを更新します。

セキュリティグループのインバウンドルールを更新して、以下の設定で受信トラフィックを許可します。

  • TCP プロトコル – ポート 2049

  • ソース – Kubernetes クラスターを含む VPC 内のプライベートサブネットの CIDR ブロック範囲

AWS システム管理者

各プライベートサブネットのマウントターゲットを追加します。

Kubernetes クラスターの各プライベートサブネットに、ファイルシステムとセキュリティグループのマウントターゲットを作成します。

AWS システム管理者

「Amazon EFS ファイルシステムの作成」

タスク説明必要なスキル

一意のトークンを生成します。

Amazon EFS では冪等オペレーションを保証する作成トークンが必要です (同じ作成トークンでオペレーションを呼び出しても効果はありません)。この要件を満たすには、使用可能な手法を使用して一意のトークンを生成する必要があります。例えば、作成トークンとして使用する汎用一意識別子 (UUID) を生成できます。

AWS システム管理者

Amazon EFS ファイルシステムを作成します。

アプリケーションワークロードによって読み書きされるデータファイルを受信するファイルシステムを作成します。暗号化されたファイルシステムまたは暗号化されていないファイルシステムを作成できます。(ベストプラクティスとして、このパターンのコードはデフォルトで保存時の暗号化を有効化する暗号化システムを作成します。) 一意の対称 AWS KMS キーを使用して、ファイルシステムを暗号化できます。カスタムキーが指定されていない場合は、AWS マネージドキーが使用されます。

Amazon EFS 用の一意のトークンを生成した後、create-efs.sh スクリプトを使用して暗号化された、または暗号化されていない Amazon EFS ファイルシステムを作成します。

KMS キーを使用しないで保存時に暗号化する場合:

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

KMS キーを使用して保存時に暗号化する場合:

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークン、$KMS_KEY_ALIAS は KMS キーのエイリアスです。

暗号化しない場合:

./scripts/epic02/create-efs.sh -d \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークン、–d は保存時の暗号化を無効にします。

AWS システム管理者

セキュリティグループを作成します。

Amazon EKS クラスターが Amazon EFS ファイルシステムにアクセスできるようにするセキュリティグループを作成します。

AWS システム管理者

セキュリティグループのインバウンドルールを更新します。

セキュリティグループのインバウンドルールを更新して、以下の設定で受信トラフィックを許可します。

  • TCP プロトコル – ポート 2049

  • ソース – Kubernetes クラスターを含む VPC 内のプライベートサブネットの CIDR ブロック範囲

AWS システム管理者

各プライベートサブネットのマウントターゲットを追加します。

Kubernetes クラスターの各プライベートサブネットに、ファイルシステムとセキュリティグループのマウントターゲットを作成します。

AWS システム管理者
タスク説明必要なスキル

Amazon EFS CSI ドライバーをデプロイします。

Amazon EFS CSI ドライバーをクラスターにデプロイします。ドライバーは、アプリケーションによって作成された永続ボリュームクレームに従ってストレージをプロビジョニングします。create-k8s-efs-csi-sc.sh スクリプトを実行して、Amazon EFS CSI ドライバーとストレージクラスをクラスターにデプロイします。

./scripts/epic03/create-k8s-efs-csi-sc.sh

このスクリプトは kubectlユーティリティを使用するため、コンテキストが設定され、目的の Amazon EKS クラスターを指していることを確認します。

権限が付与された Kubernetes ユーザー

ストレージクラスをデプロイします。

Amazon EFS プロビジョナー (efs.csi.aws.com) のクラスターにストレージクラスをデプロイします。

権限が付与された Kubernetes ユーザー

Amazon EFS コンポーネントを Kubernetes クラスターにインストールします。

タスク説明必要なスキル

Amazon EFS CSI ドライバーをデプロイします。

Amazon EFS CSI ドライバーをクラスターにデプロイします。ドライバーは、アプリケーションによって作成された永続ボリュームクレームに従ってストレージをプロビジョニングします。create-k8s-efs-csi-sc.sh スクリプトを実行して、Amazon EFS CSI ドライバーとストレージクラスをクラスターにデプロイします。

./scripts/epic03/create-k8s-efs-csi-sc.sh

このスクリプトは kubectlユーティリティを使用するため、コンテキストが設定され、目的の Amazon EKS クラスターを指していることを確認します。

権限が付与された Kubernetes ユーザー

ストレージクラスをデプロイします。

Amazon EFS プロビジョナー (efs.csi.aws.com) のクラスターにストレージクラスをデプロイします。

権限が付与された Kubernetes ユーザー
タスク説明必要なスキル

永続的ボリュームをデプロイします。

永続ボリュームをデプロイし、作成したストレージクラスと Amazon EFS ファイルシステムの ID にリンクします。アプリケーションは永続ボリュームを使用してコンテンツの読み取りと書き込みをします。ストレージフィールドでは任意のサイズの永続ボリュームを指定できます。Kubernetes ではこのフィールドが必要ですが、Amazon EFS は伸縮性のあるファイルシステムであるため、ファイルシステムの容量は強制しません。永続ボリュームは暗号化の有無にかかわらずデプロイできます。(Amazon EFS CSI ドライバーは、ベストプラクティスとしてデフォルトで暗号化が有効化されています。) deploy-poc-app.sh スクリプトを実行して、永続ボリューム、永続ボリュームクレーム、および 2 つのワークロードをデプロイします。

転送時の暗号化の場合:

./scripts/epic04/deploy-poc-app.sh \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

転送時に暗号化しない場合:

./scripts/epic04/deploy-poc-app.sh -d \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンで、–d は転送時の暗号化を無効化します。

権限が付与された Kubernetes ユーザー

アプリケーションが要求した永続ボリューム要求をデプロイします。

アプリケーションが要求した永続ボリューム要求をデプロイし、ストレージクラスにリンクします。前に作成した永続ボリュームと同じアクセスモードを使用します。ストレージフィールドでは任意のサイズの永続ボリューム要求を指定できます。Kubernetes ではこのフィールドが必要ですが、Amazon EFS は伸縮性のあるファイルシステムであるため、ファイルシステムの容量は強制しません。

権限が付与された Kubernetes ユーザー

ワークロード 1 をデプロイします。

アプリケーションのワークロード 1 を表すポッドをデプロイします。このワークロードは、 ファイルにコンテンツを書き込みます/data/out1.txt

権限が付与された Kubernetes ユーザー

ワークロード 2 をデプロイします。

アプリケーションのワークロード 2 を表すポッドをデプロイします。このワークロードは、 ファイルにコンテンツを書き込みます/data/out2.txt

権限が付与された Kubernetes ユーザー

PoC アプリケーションを Kubernetes クラスターにインストールします。

タスク説明必要なスキル

永続的ボリュームをデプロイします。

永続ボリュームをデプロイし、作成したストレージクラスと Amazon EFS ファイルシステムの ID にリンクします。アプリケーションは永続ボリュームを使用してコンテンツの読み取りと書き込みをします。ストレージフィールドでは任意のサイズの永続ボリュームを指定できます。Kubernetes ではこのフィールドが必要ですが、Amazon EFS は伸縮性のあるファイルシステムであるため、ファイルシステムの容量は強制しません。永続ボリュームは暗号化の有無にかかわらずデプロイできます。(Amazon EFS CSI ドライバーは、ベストプラクティスとしてデフォルトで暗号化が有効化されています。) deploy-poc-app.sh スクリプトを実行して、永続ボリューム、永続ボリュームクレーム、および 2 つのワークロードをデプロイします。

転送時の暗号化の場合:

./scripts/epic04/deploy-poc-app.sh \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

転送時に暗号化しない場合:

./scripts/epic04/deploy-poc-app.sh -d \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンで、–d は転送時の暗号化を無効化します。

権限が付与された Kubernetes ユーザー

アプリケーションが要求した永続ボリューム要求をデプロイします。

アプリケーションが要求した永続ボリューム要求をデプロイし、ストレージクラスにリンクします。前に作成した永続ボリュームと同じアクセスモードを使用します。ストレージフィールドでは任意のサイズの永続ボリューム要求を指定できます。Kubernetes ではこのフィールドが必要ですが、Amazon EFS は伸縮性のあるファイルシステムであるため、ファイルシステムの容量は強制しません。

権限が付与された Kubernetes ユーザー

ワークロード 1 をデプロイします。

アプリケーションのワークロード 1 を表すポッドをデプロイします。このワークロードは、 ファイルにコンテンツを書き込みます/data/out1.txt

権限が付与された Kubernetes ユーザー

ワークロード 2 をデプロイします。

アプリケーションのワークロード 2 を表すポッドをデプロイします。このワークロードは、 ファイルにコンテンツを書き込みます/data/out2.txt

権限が付与された Kubernetes ユーザー
タスク説明必要なスキル

のステータスを確認しますPersistentVolume

次のコマンドを入力して、 のステータスを確認しますPersistentVolume

kubectl get pv

出力例については、「追加情報」セクションを参照してください。

権限が付与された Kubernetes ユーザー

のステータスを確認しますPersistentVolumeClaim

次のコマンドを入力して、 のステータスを確認しますPersistentVolumeClaim

kubectl -n poc-efs-eks-fargate get pvc

出力例については、「追加情報」セクションを参照してください。

権限が付与された Kubernetes ユーザー

ワークロード 1 がファイルシステムに書き込みできることを確認します。

次のコマンドを入力して、ワークロード 1 が に書き込んでいることを検証します/data/out1.txt

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt

結果は次のようになります。

... Thu Sep 3 15:25:07 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:12 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:17 UTC 2023 - PoC APP 1 ...
権限が付与された Kubernetes ユーザー

ワークロード 2 がファイルシステムに書き込みできることを確認します。

次のコマンドを入力して、ワークロード 2 が に書き込んでいることを検証します/data/out2.txt

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt

結果は次のようになります。

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
権限が付与された Kubernetes ユーザー

ワークロード 1 がワークロード 2 によって書き込まれたファイルを読み取れることを検証します。

次のコマンドを入力して、ワークロード 1 がワークロード 2 によって書き込まれた/data/out2.txtファイルを読み取ることができることを確認します。

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt

結果は次のようになります。

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
権限が付与された Kubernetes ユーザー

ワークロード 2 がワークロード 1 によって書き込まれたファイルを読み取れることを検証します。

次のコマンドを入力して、ワークロード 2 がワークロード 1 によって書き込まれた/data/out1.txtファイルを読み取ることができることを確認します。

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt

結果は次のようになります。

... Thu Sep 3 15:29:22 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:27 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:32 UTC 2023 - PoC APP 1 ...
権限が付与された Kubernetes ユーザー

アプリケーションコンポーネントを削除する後もファイルが保持されることを確認します。

次に、スクリプトを使用してアプリケーションコンポーネント (永続ボリューム、永続ボリュームクレーム、ポッド) を削除し、ファイル /data/out1.txt/data/out2.txtがファイルシステムに保持されていることを確認します。次のコマンドを使用して、validate-efs-content.sh スクリプトを実行します。

./scripts/epic05/validate-efs-content.sh \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

結果は次のようになります。

pod/poc-app-validation created Waiting for pod get Running state... Waiting for pod get Running state... Waiting for pod get Running state... Results from execution of 'find /data' on validation process pod: /data /data/out2.txt /data/out1.txt
権限が付与された Kubernetes ユーザー、システム管理者

ファイルシステムの永続性、耐久性、共有性を検証する

タスク説明必要なスキル

のステータスを確認しますPersistentVolume

次のコマンドを入力して、 のステータスを確認しますPersistentVolume

kubectl get pv

出力例については、「追加情報」セクションを参照してください。

権限が付与された Kubernetes ユーザー

のステータスを確認しますPersistentVolumeClaim

次のコマンドを入力して、 のステータスを確認しますPersistentVolumeClaim

kubectl -n poc-efs-eks-fargate get pvc

出力例については、「追加情報」セクションを参照してください。

権限が付与された Kubernetes ユーザー

ワークロード 1 がファイルシステムに書き込みできることを確認します。

次のコマンドを入力して、ワークロード 1 が に書き込んでいることを検証します/data/out1.txt

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt

結果は次のようになります。

... Thu Sep 3 15:25:07 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:12 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:17 UTC 2023 - PoC APP 1 ...
権限が付与された Kubernetes ユーザー

ワークロード 2 がファイルシステムに書き込みできることを確認します。

次のコマンドを入力して、ワークロード 2 が に書き込んでいることを検証します/data/out2.txt

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt

結果は次のようになります。

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
権限が付与された Kubernetes ユーザー

ワークロード 1 がワークロード 2 によって書き込まれたファイルを読み取れることを検証します。

次のコマンドを入力して、ワークロード 1 がワークロード 2 によって書き込まれた/data/out2.txtファイルを読み取ることができることを確認します。

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt

結果は次のようになります。

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
権限が付与された Kubernetes ユーザー

ワークロード 2 がワークロード 1 によって書き込まれたファイルを読み取れることを検証します。

次のコマンドを入力して、ワークロード 2 がワークロード 1 によって書き込まれた/data/out1.txtファイルを読み取ることができることを確認します。

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt

結果は次のようになります。

... Thu Sep 3 15:29:22 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:27 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:32 UTC 2023 - PoC APP 1 ...
権限が付与された Kubernetes ユーザー

アプリケーションコンポーネントを削除する後もファイルが保持されることを確認します。

次に、スクリプトを使用してアプリケーションコンポーネント (永続ボリューム、永続ボリュームクレーム、ポッド) を削除し、ファイル /data/out1.txt/data/out2.txtがファイルシステムに保持されていることを確認します。次のコマンドを使用して、validate-efs-content.sh スクリプトを実行します。

./scripts/epic05/validate-efs-content.sh \ -t "$EFS_CREATION_TOKEN"

ここで、$EFS_CREATION_TOKEN はファイルシステムの一意の作成トークンです。

結果は次のようになります。

pod/poc-app-validation created Waiting for pod get Running state... Waiting for pod get Running state... Waiting for pod get Running state... Results from execution of 'find /data' on validation process pod: /data /data/out2.txt /data/out1.txt
権限が付与された Kubernetes ユーザー、システム管理者
タスク説明必要なスキル

アプリケーションログを監視します。

2 日目のオペレーションの一環として、監視用に Amazon CloudWatch にアプリケーションログを送信します。

AWS システム管理者、アクセス許可を付与された Kubernetes ユーザー

Container Insights で、Amazon EKS と Kubernetes コンテナを監視します。

2 日目のオペレーションの一環として、Amazon CloudWatch Container Insights を使用して Amazon EKS システムと Kubernetes システムを監視します。このツールは、コンテナ化されたアプリケーションから、さまざまなレベルとディメンションでメトリクスを収集、集計、要約します。詳細については、[関連リソース] セクションを参照してください。

AWS システム管理者、アクセス許可を付与された Kubernetes ユーザー

CloudWatch で Amazon EFS を監視します。

2 日目のオペレーションの一環として、Amazon CloudWatch を使用して ファイルシステムを監視し、Amazon EFS から生データを収集し、リアルタイムに近い読み取り可能なメトリクスに処理します。詳細については、[関連リソース]セクションを参照してください。

AWS システム管理者

オペレーションを監視する

タスク説明必要なスキル

アプリケーションログを監視します。

2 日目のオペレーションの一環として、監視用に Amazon CloudWatch にアプリケーションログを送信します。

AWS システム管理者、アクセス許可を付与された Kubernetes ユーザー

Container Insights で、Amazon EKS と Kubernetes コンテナを監視します。

2 日目のオペレーションの一環として、Amazon CloudWatch Container Insights を使用して Amazon EKS システムと Kubernetes システムを監視します。このツールは、コンテナ化されたアプリケーションから、さまざまなレベルとディメンションでメトリクスを収集、集計、要約します。詳細については、[関連リソース] セクションを参照してください。

AWS システム管理者、アクセス許可を付与された Kubernetes ユーザー

CloudWatch で Amazon EFS を監視します。

2 日目のオペレーションの一環として、Amazon CloudWatch を使用して ファイルシステムを監視し、Amazon EFS から生データを収集し、リアルタイムに近い読み取り可能なメトリクスに処理します。詳細については、[関連リソース]セクションを参照してください。

AWS システム管理者
タスク説明必要なスキル

パターン用に作成されたすべてのリソースをクリーンアップします。

このパターンを完了したら、AWS 料金が発生しないようにすべてのリソースをクリーンアップします。PoC アプリケーションの使用が終了したら、clean-up-resources.shスクリプトを実行してすべてのリソースを削除します。次のいずれかのオプションを実行します。

KMS キーを使用して保存時に暗号化する場合:

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの作成トークン、$KMS_KEY_ALIAS は KMS キーのエイリアスです。

保存時に暗号化しない場合:

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの作成トークンです。

権限が付与された Kubernetes ユーザー、システム管理者

リソースをクリーンアップする

タスク説明必要なスキル

パターン用に作成されたすべてのリソースをクリーンアップします。

このパターンを完了したら、AWS 料金が発生しないようにすべてのリソースをクリーンアップします。PoC アプリケーションの使用が終了したら、clean-up-resources.shスクリプトを実行してすべてのリソースを削除します。次のいずれかのオプションを実行します。

KMS キーを使用して保存時に暗号化する場合:

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの作成トークン、$KMS_KEY_ALIAS は KMS キーのエイリアスです。

保存時に暗号化しない場合:

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

ここで、$CLUSTER_NAME は Amazon EKS クラスターの名前、$EFS_CREATION_TOKEN はファイルシステムの作成トークンです。

権限が付与された Kubernetes ユーザー、システム管理者

関連リソース

リファレンス

GitHub チュートリアルおよび例

必要なツール

追加情報

コマンドの出力例を次に示しますkubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE poc-app-pv 1Mi RWX Retain Bound poc-efs-eks-fargate/poc-app-pvc efs-sc 3m56s

コマンドの出力例を次に示しますkubectl -n poc-efs-eks-fargate get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE poc-app-pvc Bound poc-app-pv 1Mi RWX efs-sc 4m34s
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.