View a markdown version of this page

Amazon EFS で Elastic File System ストレージを使用する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

Amazon EFS で Elastic File System ストレージを使用する

Amazon Elastic File System (Amazon EFS) は、サーバーレスで伸縮自在なファイルストレージを提供するため、ストレージ容量およびパフォーマンスのプロビジョニングや管理を行うことなくファイルデータを共有できます。Amazon EFS Container Storage Interface (CSI) ドライバー を使用すると、AWS 上で実行されている Kubernetes クラスターが Amazon EFS ファイルシステムを永続ボリュームとしてマウントできます。このトピックでは、Amazon EFS CSI ドライバーを Amazon EKS クラスターにデプロイする方法を示します。

考慮事項

  • Amazon EFS CSI ドライバーは、Windows ベースのコンテナイメージと互換性がありません。

  • Fargate ノードでは永続ボリュームのために動的プロビジョニングを使用できませんが、静的プロビジョニングは使用できます。

  • 動的プロビジョニング には、1.2 以降のドライバーが必要です。サポートされている Amazon EKS クラスターバージョンでバージョン 1.1 のドライバーを使用して、永続ボリュームに静的プロビジョニングを使用できます (「Amazon EKS supported versions」を参照)。

  • このドライバーのバージョン 1.3.2 以降では、Amazon EC2 Graviton ベースのインスタンスを含む Arm64 アーキテクチャがサポートされています。

  • バージョン 1.4.2 以降のドライバーでは、ファイルシステムのマウントに FIPS を使用できます。

  • Amazon EFS のリソースクォータに注意してください。詳細については、Amazon SNS クォータを参照してください。

  • バージョン 2.0.0 以降、このドライバーは TLS 接続に stunnel から efs-proxy を使用するように切り替えました。efs-proxy を使用すると、実行中のノードのコア数に 1 を足した数のスレッドが開きます。

  • Amazon EFS CSI ドライバーは Amazon EKS Hybrid Nodes と互換性がありません。

前提条件

  • Amazon EFS CSI ドライバーには AWS Identity and Access Management (IAM) のアクセス権限が必要です。

  • ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS コマンドラインインターフェイス (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、aws --version | cut -d / -f2 | cut -d ' ' -f1 を参照してください。yumapt-get、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには、「 AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンはご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.29 である場合、kubectl のバージョン 1.281.29、または 1.30 が使用できます。kubectl をインストールまたはアップグレードする方法については、kubectl および eksctl のセットアップ を参照してください。

注記

Fargate 上で実行される Pod は、ドライバーの手動インストールステップなしで、Amazon EFS ファイルシステムを自動的にマウントします。

ステップ 1: IAM ロールを作成する

Amazon EFS CSI ドライバーには、ファイルシステムと対話するための IAM アクセス許可が必要です。IAM ロールを作成して、 arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy マネージドポリシーをアタッチします。

注記

Amazon EFS と Amazon S3 ファイルシステムストレージの両方を使用する場合は、AmazonEFSCSIDriverPolicyAmazonS3FilesCSIDriverPolicy の両方の管理ポリシーを IAM ロールにアタッチする必要があります。Amazon S3 ファイルシステムストレージの詳細については、Amazon EFS CSI ドライバーで、Amazon S3 ファイルシステムストレージを使用する を参照してください。

この手順を実装するには、次のいずれかのツールを使用できます。

注記

この手順には、ドライバーを Amazon EKS アドオンとして使用するための特定のステップが書かれています。セルフマネージド型インストールについての詳細は、GitHub の「Set up driver permission」を参照してください。

eksctl

Pod Identity を使用する場合

以下のコマンドを実行します。ここでは、eksctl を使用して IAM ロールと、Pod Identity の関連付けを作成しています。my-cluster をクラスター名に置き換えます。AmazonEKS_EFS_CSI_DriverRole を別の名前に置き換えることもできます。

export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy

サービスアカウントに IAM ロールを使用している場合

次のコマンドを実行して、eksctl を使用して IAM ロールを作成します。my-cluster をクラスター名に置き換えます。AmazonEKS_EFS_CSI_DriverRole を別の名前に置き換えることもできます。

export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --approve TRUST_POLICY=$(aws iam get-role --output json --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \ sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/') aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"

AWS マネジメントコンソール

次のコマンドを実行して、AWS マネジメントコンソール を使用して IAM ロールを作成します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[ロール] を選択してください。

  3. [ロール] ページで、[ロールの作成] を選択してください。

  4. [信頼されたエンティティを選択] ページで、以下の操作を実行します。

    1. EKS Pod Identity を使用する場合

      1. [信頼するエンティティのタイプ][AWS サービス] を選択してください。

      2. [サービスまたはユースケース] のドロップダウンで、EKS を選択します。

      3. ユースケースセクションで、[EKS - Pod Identity] を選択します。

      4. [次へ] を選択します。

    2. サービスアカウントに IAM ロールを使用している場合

      1. [信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。

      2. [Identity provider] (ID プロバイダー) で、(Amazon EKS の [Overview] (概要) に示されているように) クラスターに [OpenID Connect provider URL] (OpenID Connect プロバイダーの URL) を選択します。

      3. [対象者] で [sts.amazonaws.com] を選択します。

      4. [次へ] を選択します。

  5. [アクセス許可を追加] ページで、以下を実行します。

    1. [フィルタポリシー] ボックスに AmazonEFSCSIDriverPolicy と入力します。

    2. 検索で返された AmazonEFSCSIDriverPolicy の左にあるチェックボックスを選択します。

    3. [次へ] を選択します。

  6. [名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。

    1. [ロール名] に、AmazonEKS_EFS_CSI_DriverRole などのロールの一意の名前を入力します。

    2. [タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

    3. [ロールの作成] を選択してください。

  7. ロールの作成後

    1. EKS Pod Identity を使用する場合

      1. Amazon EKS コンソール を開きます。

      2. 左のナビゲーションペインで、[クラスター] を選択して、EKS Pod Identity の関連付けを設定するクラスターの名前を選択します。

      3. アクセス タブを選択します。

      4. [Pod Identity の関連付け][作成] を選択します。

      5. [IAM ロール] ドロップダウンを選択して、新しく作成したロールを選択します。

      6. [Kubernetes 名前空間] フィールドを選択して、kube-system を入力します。

      7. [Kubernetes サービスアカウント] フィールドを選択して、efs-csi-controller-sa を入力します。

      8. [作成] を選択します。

      9. Pod Identity の関連付けの作成については、「Pod Identity の関連付けを作成する (AWS コンソール)」で詳しく確認できます。

    2. サービスアカウントに IAM ロールを使用している場合

      1. 編集するロールを選択します。

      2. [信頼関係] タブを選択し、続いて [信頼ポリシーの編集] を選択します。

      3. 次の行と似ている行を探してます。

        "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"

        前の行の上に、次の行を追加します。<region-code> を、クラスターのある AWS リージョンに置き換えます。<EXAMPLED539D4633E53DE1B71EXAMPLE> をクラスターの OIDC プロバイダー ID に置き換えます。

        "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*",
      4. Condition オペレーターを "StringEquals" から "StringLike" に修正します。

      5. [ポリシーの更新] を選択して終了します。

AWS CLI

次のコマンドを実行して、AWS CLI を使用して IAM ロールを作成します。

Pod Identity を使用する場合

  1. pods.eks.amazonaws.com サービスに AssumeRole および TagSession アクションを許可する IAM ロールを作成します。

    1. 次の内容を aws-efs-csi-driver-trust-policy-pod-identity.json という名前のファイルにコピーします。

      { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    2. ロールを作成します。my-cluster をクラスター名に置き換えます。AmazonEKS_EFS_CSI_DriverRole を別の名前に置き換えることもできます。

      export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  2. 次のマンドを実行して、必要な AWS マネージドポリシーをロールに添付します。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name
  3. 次のコマンドを実行して、Pod Identity の関連付けを作成します。<111122223333> をアカウント ID に置き換えます。

    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$role_name --namespace kube-system --service-account efs-csi-controller-sa
  4. Pod Identity の関連付けの作成については、「Pod Identity の関連付けを作成する (AWS コンソール)」で詳しく確認できます。

サービスアカウントに IAM ロールを使用している場合

  1. クラスターの OIDC プロバイダーの URL を表示します。my-cluster をクラスター名に置き換えます。AmazonEKS_EFS_CSI_DriverRole を別の名前に置き換えることもできます。

    export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text

    出力例は次のとおりです。

    https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>

    コマンドの出力が None の場合は、「前提条件」を確認してください。

  2. IAM ロールを作成して AssumeRoleWithWebIdentity アクションを付与します。

    1. 次の内容を aws-efs-csi-driver-trust-policy.json という名前のファイルにコピーします。<111122223333> はご使用のアカウントの ID に置き換えます。<EXAMPLED539D4633E53DE1B71EXAMPLE><region-code> を、前のステップで返された値に置き換えます。

      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*", "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
    2. ロールを作成します。

      aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
  3. 次のマンドを実行して、必要な AWS マネージドポリシーをロールに添付します。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name

ステップ 2: Amazon EFS CSI ドライバーを取得する

Amazon EFS CSI ドライバーは Amazon EKS アドオンを使用してインストールすることをお勧めします。Amazon EKS アドオンをクラスターに追加するには、Amazon EKS アドオンを作成する を参照してください。アドオンの詳細については、Amazon EKS アドオン を参照してください。Amazon EKS アドオンを使用できない場合は、その理由に関する問題を コンテナロードマップ GitHub リポジトリ に送信することをお勧めします。

重要

Amazon EFS ドライバーを Amazon EKS アドオンとして追加する前に、クラスターにセルフマネージドバージョンのドライバーがインストールされていないことを確認してください。インストールされている場合は、GitHub の「Uninstalling the Amazon EFS CSI Driver」を参照してください。

または、Amazon EFS CSI ドライバーのセルフマネージド型インストールが必要な場合は、GitHub の「Installation」を参照してください。

ステップ 3:Amazon EFS ファイルシステムを作成する

Amazon EFS ファイルシステムを作成するには、「GitHub」の「Amazon EKS 用の Amazon EFS ファイルシステムを作成」を参照してください。

ステップ 4: サンプルアプリケーションをデプロイする

さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。詳細については、「GitHub」の「」を参照してください。