📝

[小ネタ ] 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 を使用する方法があります。

FSx for NetApp ONTAP をマウントする場合は ECS on EC2 に切り替える方法があります。
また、Lambda から FSx for NetApp ONTAP をマウントする場合には SMB プロトコルを使用する方法もあります。

まとめ

今回は App Runner から NFS で FSx for NetApp ONTAP をマウントできない話を紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion