📝
[小ネタ ] App Runner から NFS で FSx for NetApp ONTAP をマウントできない話
Add the ability to use AWS Elastic File System for persistence. · Issue #14 · aws/apprunner-roadmap
EFS 同様にマウントできませんでした。
mount.nfs: failed to prepare mount: Operation not permitted
mount: permission denied (are you root?)
アプリ実装
以下のアプリをコンテナイメージとして ECR にプッシュしました。
Dockerfile
FROM alpine:3.20
RUN apk add --no-cache nfs-utils python3
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
USER root
CMD ["/entrypoint.sh"]
entrypoint.sh
#!/bin/sh
FSX_PATH="${FSX_ENDPOINT}:/vol1"
MOUNT_DIR="/mnt/fsx"
echo "Mounting FSx from ${FSX_PATH} to ${MOUNT_DIR}"
mkdir -p ${MOUNT_DIR}
mount -t nfs ${FSX_PATH} ${MOUNT_DIR}
echo "Mounted. Directory listing:"
ls -l ${MOUNT_DIR}
cd ${MOUNT_DIR}
python3 -m http.server 8000
App Runner の設定
- ソース: ECR リポジトリ
- ポート: 8000
- 環境変数
- FSX_ENDPOINT: FSx for NetApp ONTAP の SVM の NFS IP アドレス
- 送信ネットワークトラフィック: カスタム VPC
- FSx for NetApp ONTAP ファイルシステムと同じ VPC、セキュリティグループ
デプロイ結果
App Runner のデプロイには成功したものの、CloudWatch Logs には以下のエラーが記録されていました。
Mounting FSx from 172.31.10.89:/vol1 to /mnt/fsx
mount.nfs: failed to prepare mount: Operation not permitted
mount: permission denied (are you root?)
Mounted. Directory listing:
total 0
Dockerfile で USER root を指定してもアクセス拒否されていることから、App Runner では 特権コンテナ (privileged) がサポートされていないと思われました。
回避策
冒頭の GitHub Issue でも報告されている通り、EFS をマウントすることもできません。
EFS をマウントする方法であれば Fargate や Lambda を使用する方法があります。
- Amazon ECS での Amazon EFS ボリュームの使用 - Amazon Elastic Container Service
- Lambda 関数のファイルシステムアクセスの設定 - AWS Lambda
FSx for NetApp ONTAP をマウントする場合は ECS on EC2 に切り替える方法があります。
また、Lambda から FSx for NetApp ONTAP をマウントする場合には SMB プロトコルを使用する方法もあります。
- [Amazon FSx for NetApp ONTAP] ECS上のコンテナからボリュームをマウントしてみた | DevelopersIO
- Amazon FSx でサーバレスワークロードの SMB 共有を実現する | Amazon Web Services ブログ
まとめ
今回は App Runner から NFS で FSx for NetApp ONTAP をマウントできない話を紹介しました。
どなたかの参考になれば幸いです。
参考資料
- Add the ability to use AWS Elastic File System for persistence. · Issue #14 · aws/apprunner-roadmap
- Amazon ECS での Amazon EFS ボリュームの使用 - Amazon Elastic Container Service
- Lambda 関数のファイルシステムアクセスの設定 - AWS Lambda
- [Amazon FSx for NetApp ONTAP] ECS上のコンテナからボリュームをマウントしてみた | DevelopersIO
- Amazon FSx でサーバレスワークロードの SMB 共有を実現する | Amazon Web Services ブログ
Discussion