Contents
ここでは、ROSAでAmazon Elastic File System(以下、EFS)を使用する方法についてメモしています。
前提条件
- AWSにROSAは構築済み
- 作業ホストにawsやrosa、ocコマンドも準備済み
EFSでファイルシステムの作成
AWSのマネジメントコンソールの検索バーで EFS を入力してアクセスし、ファイルシステムを作成してください。
ファイルシステムの作成先のVPCは、ROSAのWorkerが所属しているものを選択してください。
ファイルシステム作成後にアクセスポイントを作成してください。
本手順では、デフォルトのまま作成しているため、アクセスポイントは / になります。
アクセスポイント追加後に、ファイルシステムが属しているセキュリティーグループの設定に以下を追加します。
※CIDRブロックは環境に合わせて変更してください
インバウンドルール
| タイプ | プロトコル | ポート範囲 | ソース | CIDRブロック |
|---|---|---|---|---|
| NFS | TCP | 2049 | カスタム | 10.0.0.0/16 |
AWS EFS CSI Driver Operatorのインストール
ROSA(OCP)からEFSを使用するには AWS EFS CSI Driver Operator が必要です。
ここでは、オペレーターのインストールを行います。
公式ドキュメントのインストール手順はこちらです。
事前準備
AWS EFS CSI Driver Operatorを導入するには、事前にAWS Security Token Service(STS)上のARNを取得する必要があります。
公式手順通り ccoctl コマンドを使ってARN(Role)を作成します。
以下から環境に合わせた対象バージョンのccoctlをダウンロードしてください。
以下は検証環境で実行したコマンド例です。
|
1 2 3 4 5 6 7 8 9 10 |
$ curl -L 'https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.17.45/ccoctl-linux-rhel9.tar.gz' -O $ tar zxvf ccoctl-linux-rhel9.tar.gz $ sudo mv ccoctl /usr/local/bin $ ccoctl -h OpenShift credentials provisioning tool Usage: ccoctl [command] (snip) |
credrequests ディレクトリを作成してEFSの CredentialsRequest のYAMLファイルを作成します。
|
1 2 3 |
$ mkdir credrequests $ vi credrequests/aws_efs_credentials_request.yml |
ファイルの中身は以下の通りです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: openshift-aws-efs-csi-driver namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AWSProviderSpec statementEntries: - action: - elasticfilesystem:* effect: Allow resource: '*' secretRef: name: aws-efs-cloud-credentials namespace: openshift-cluster-csi-drivers serviceAccountNames: - aws-efs-csi-driver-operator - aws-efs-csi-driver-controller-sa |
Roleを作成するためにROSAクラスターのOIDC ProviderのArnを確認します。
|
1 2 3 4 5 6 7 8 9 |
$ aws iam list-open-id-connect-providers { "OpenIDConnectProviderList": [ { "Arn": "arn:aws:iam::<aws_account_id>:oidc-provider/xxx.openshiftapps.com/xxxxxxxxxx" } ] } |
以下のコマンドの <> の部分を適切なパラメーターに置き換えて実行します。
|
1 2 3 4 5 6 |
$ ccoctl aws create-iam-roles \ --name=ocp-aws-efs-operator \ --region=<ROSAが存在するregion> \ --credentials-requests-dir=./credrequests \ --identity-provider-arn=<上記で取得したArn> |
問題なく実行できた場合は、以下のように結果が表示されるので、ARNをメモっておきます。
|
1 2 3 |
2025/12/30 12:57:19 Role arn:aws:iam::<aws_account_id>:role/ocp-aws-efs-operator-openshift-cluster-csi-drivers-aws-efs-cloud created (snip) |
Operatorのインストール
次にROSAのコンソールにアクセスしてログインしてください。
Operator の OperatorHub をクリックし EFS でフィルタリングして AWS EFS CSI Driver Operator をクリックします。
インストール をクリックします。
ロール ARN に先ほど取得したARNを入力して インストール をクリックします。
承認画面が表示されたら 承認 をクリックし、インストールを継続します。
インストールされた Operator: 使用の準備ができています が表示されれば問題ありません。
AWS EFS CSI ドライバーのインストール
以下のマニフェストを作成します。
|
1 2 |
$ vi aws-efs-driver.yml |
|
1 2 3 4 5 6 7 |
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: efs.csi.aws.com spec: managementState: Managed |
適用します。
|
1 2 3 4 5 6 7 8 |
$ oc apply -f aws-efs-driver.yml clustercsidriver.operator.openshift.io/efs.csi.aws.com created $ oc get clustercsidriver NAME AGE (snip) efs.csi.aws.com 25s |
ストレージクラス作成
以下のマニフェストを作成します。
|
1 2 |
$ vi aws-efs-sc.yml |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap fileSystemId: fs-xxxxxxxxx directoryPerms: "700" gidRangeStart: "1000" gidRangeEnd: "2000" basePath: "/" |
| パラメーター | 説明 |
|---|---|
| fileSystemId | EFSで作成したファイルシステムのID |
| basePath | アクセスポイント |
適用します。
|
1 2 3 4 5 6 7 8 |
$ oc apply -f aws-efs-sc.yml storageclass.storage.k8s.io/efs-sc created $ oc get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE efs-sc efs.csi.aws.com Delete Immediate false 12s (snip) |
動作確認
EFSが問題無く使用できるかどうか確認してみます。
以下のテスト用マニフェストを作成します。
|
1 2 |
$ vi aws-efs-test.yml |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
apiVersion: v1 kind: Namespace metadata: name: efs-test --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: efs-test-pvc namespace: efs-test spec: accessModes: - ReadWriteMany storageClassName: efs-sc resources: requests: storage: 1Gi --- apiVersion: v1 kind: Pod metadata: name: efs-test-pod namespace: efs-test spec: securityContext: seccompProfile: type: RuntimeDefault containers: - name: app image: registry.redhat.io/ubi8/ubi-minimal:latest securityContext: allowPrivilegeEscalation: false runAsNonRoot: true capabilities: drop: - ALL command: - /bin/sh - -c - | echo "hello from efs $(date)" >> /data/hello.txt sleep 3600 volumeMounts: - name: efs-volume mountPath: /data volumes: - name: efs-volume persistentVolumeClaim: claimName: efs-test-pvc |
適用します。
|
1 2 3 4 5 |
$ oc apply -f aws-efs-test.yml namespace/efs-test created persistentvolumeclaim/efs-test-pvc created pod/efs-test-pod created |
無事Podが起動できているか確認します。
|
1 2 3 4 |
$ oc get -n efs-test pods NAME READY STATUS RESTARTS AGE efs-test-pod 1/1 Running 0 11m |
EFSのボリュームをマウントしたディレクトリに hello.txt が生成されているか確認します。
|
1 2 3 |
$ oc exec -it efs-test-pod -n efs-test -- cat /data/hello.txt hello from efs Tue Dec 30 13:47:31 UTC 2025 |
中身が表示されれば問題ありません。



