Lambda から FSx for NetApp ONTAP に NFS ではマウントできない話
Accessing your FSx for ONTAP data - FSx for ONTAP
Lambda は NFS クライアントとしてサポートされていませんでした。
検証
FSx for NetApp ONTAP にアクセスする Python のコンテナアプリケーションを Lambda で実行したところ、以下のエラーが発生しました。
CalledProcessError: Command '['mount', '-t', 'nfs', 'svm-0e228b470c9c50072.fs-054aa6f294db64c96.fsx.ap-northeast-1.amazonaws.com:/vol1', '/tmp/fsx']' returned non-zero exit status 32.
コードは以下の通りです。
import os
import subprocess
def lambda_handler(event, context):
mount_point = '/tmp/fsx'
fsx_dns = 'svm-0e228b470c9c50072.fs-054aa6f294db64c96.fsx.ap-northeast-1.amazonaws.com:/vol1'
os.makedirs(mount_point, exist_ok=True)
if not os.path.ismount(mount_point):
subprocess.run(['mount', '-t', 'nfs', fsx_dns, mount_point], check=True)
FROM public.ecr.aws/lambda/python:3.12
RUN dnf install -y nfs-utils && dnf clean all
COPY app/ ${LAMBDA_TASK_ROOT}
CMD ["lambda_function.lambda_handler"]
上記コードでは冒頭のエラーが発生してアクセスできませんでした。
なお、Linux のルートユーザーでの実行は Lambda の仕様上できません。
コンテナイメージを使用した Lambda 関数の作成 - AWS Lambda
デフォルトの Lambda ユーザーは、関数コードを実行するために必要なすべてのファイルを読み取ることができる必要があります。Lambda は、最小特権のアクセス許可を持つデフォルトの Linux ユーザーを定義することで、セキュリティのベストプラクティスに従います。つまり、Dockerfile に USER を指定する必要はありません。ご自身のアプリケーションコードが、外部の Linux ユーザーによる実行が制限されているファイルに依存していないことを確認します。
SMB でのアクセスは可能
Amazon FSx でサーバレスワークロードの SMB 共有を実現する | Amazon Web Services ブログ
この記事では、AWS Lambda と Amazon FSx for Windows File Server を統合することに焦点を当てます。また、Amazon FSx for NetApp ONTAP を含む SMB 互換のファイルシステムならどれでも、ご紹介するソリューションを使用することができます。
上記 AWS ブログに記載の通り、SMB であれば Lambda から FSx for NetApp ONTAP へのアクセスは可能です。
今回は NFS でのアクセス可否を確認することが目的であるため、SMB については検証しませんでした。
まとめ
今回は Lambda から FSx for NetApp ONTAP に NFS ではマウントできない話を紹介しました。
どなたかの参考になれば幸いです。
Discussion