このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Amazon EFS で Elastic File System ストレージを使用する
Amazon Elastic File System (Amazon EFS) は、サーバーレスで伸縮自在なファイルストレージを提供するため、ストレージ容量およびパフォーマンスのプロビジョニングや管理を行うことなくファイルデータを共有できます。Amazon EFS Container Storage Interface (CSI) ドライバー
考慮事項
-
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 では、EKS Pod Identity の使用を推奨しています。詳細については、EKS Pod Identity のセットアップの概要 を参照してください。
-
サービスアカウントの IAM ロールと、クラスターの IAM OpenID Connect (OIDC) プロバイダーの設定については、クラスターの IAM OIDC プロバイダーを作成するには で詳しく確認できます。
-
-
ご使用のデバイスまたは AWS CloudShell で、バージョン
2.12.3以降、または AWS コマンドラインインターフェイス (AWS CLI) のバージョン1.27.160以降がインストールおよび設定されていること。現在のバージョンを確認するには、aws --version | cut -d / -f2 | cut -d ' ' -f1を参照してください。yum、apt-get、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには、「 AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。 -
デバイスまたは AWS CloudShell に、
kubectlコマンドラインツールがインストールされていること。バージョンはご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが1.29である場合、kubectlのバージョン1.28、1.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 ファイルシステムストレージの両方を使用する場合は、AmazonEFSCSIDriverPolicy と AmazonS3FilesCSIDriverPolicy の両方の管理ポリシーを 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 ロールを作成します。
-
IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。
-
左のナビゲーションペインで、[ロール] を選択してください。
-
[ロール] ページで、[ロールの作成] を選択してください。
-
[信頼されたエンティティを選択] ページで、以下の操作を実行します。
-
EKS Pod Identity を使用する場合
-
[信頼するエンティティのタイプ] で [AWS サービス] を選択してください。
-
[サービスまたはユースケース] のドロップダウンで、EKS を選択します。
-
ユースケースセクションで、[EKS - Pod Identity] を選択します。
-
[次へ] を選択します。
-
-
サービスアカウントに IAM ロールを使用している場合
-
[信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。
-
[Identity provider] (ID プロバイダー) で、(Amazon EKS の [Overview] (概要) に示されているように) クラスターに [OpenID Connect provider URL] (OpenID Connect プロバイダーの URL) を選択します。
-
[対象者] で [
sts.amazonaws.com] を選択します。 -
[次へ] を選択します。
-
-
-
[アクセス許可を追加] ページで、以下を実行します。
-
[フィルタポリシー] ボックスに
AmazonEFSCSIDriverPolicyと入力します。 -
検索で返された
AmazonEFSCSIDriverPolicyの左にあるチェックボックスを選択します。 -
[次へ] を選択します。
-
-
[名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。
-
[ロール名] に、
AmazonEKS_EFS_CSI_DriverRoleなどのロールの一意の名前を入力します。 -
[タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。
-
[ロールの作成] を選択してください。
-
-
ロールの作成後
-
EKS Pod Identity を使用する場合
-
Amazon EKS コンソール
を開きます。 -
左のナビゲーションペインで、[クラスター] を選択して、EKS Pod Identity の関連付けを設定するクラスターの名前を選択します。
-
アクセス タブを選択します。
-
[Pod Identity の関連付け] で [作成] を選択します。
-
[IAM ロール] ドロップダウンを選択して、新しく作成したロールを選択します。
-
[Kubernetes 名前空間] フィールドを選択して、
kube-systemを入力します。 -
[Kubernetes サービスアカウント] フィールドを選択して、
efs-csi-controller-saを入力します。 -
[作成] を選択します。
-
Pod Identity の関連付けの作成については、「Pod Identity の関連付けを作成する (AWS コンソール)」で詳しく確認できます。
-
-
サービスアカウントに IAM ロールを使用している場合
-
編集するロールを選択します。
-
[信頼関係] タブを選択し、続いて [信頼ポリシーの編集] を選択します。
-
次の行と似ている行を探してます。
"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-*", -
Conditionオペレーターを"StringEquals"から"StringLike"に修正します。 -
[ポリシーの更新] を選択して終了します。
-
-
AWS CLI
次のコマンドを実行して、AWS CLI を使用して IAM ロールを作成します。
Pod Identity を使用する場合
-
pods.eks.amazonaws.comサービスにAssumeRoleおよびTagSessionアクションを許可する IAM ロールを作成します。-
次の内容を
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" ] } ] } -
ロールを作成します。
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"
-
-
次のマンドを実行して、必要な AWS マネージドポリシーをロールに添付します。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name -
次のコマンドを実行して、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 -
Pod Identity の関連付けの作成については、「Pod Identity の関連付けを作成する (AWS コンソール)」で詳しく確認できます。
サービスアカウントに IAM ロールを使用している場合
-
クラスターの 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の場合は、「前提条件」を確認してください。 -
IAM ロールを作成して
AssumeRoleWithWebIdentityアクションを付与します。-
次の内容を
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" } } } ] } -
ロールを作成します。
aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
-
-
次のマンドを実行して、必要な 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」の「例