Elastic Beanstalk から FSx for NetApp ONTAP をマウントしてみた
Elastic Beanstalk 環境の EC2 インスタンスから FSx for NetApp ONTAP をマウントしてファイルを書き込んでみました。
FSx for NetApp ONTAP ファイルシステムの作成
以下以外はデフォルト設定で作成しました。
- ファイルシステム名: 今回は test
- SSD ストレージ容量: 1024 GiB
動作確認用 EC2 インスタンスの作成
以下の設定で EC2 インスタンスを作成しました。
- AMI: Amazon Linux 2
- VPC: デフォルト VPC
- セキュリティグループ: デフォルト VPC
- インバウンド、アウトバウンドはすべて開放
- IAM インスタンスプロファイル: AdministratorAccess 権限を付与した IAM ロール
EC2 インスタンスからファイルシステムへのマウント
後述の動作確認のためにマウントしておきます。
svm の NFS DNS 名は以下の手順で確認できます。
- FSx for NetApp ONTAP コンソール
- 対象のファイルシステム
- ストレージ仮想マシン
- 対象の svm 名
- エンドポイント
$ sudo mkdir -p /fsx
$ sudo mount -t nfs <svm の NFS DNS 名>:/vol1
$ ls -l /fsx
# この時点ではファイルが存在しないことを確認
Elastic Beanstalk 環境用のアプリケーション
Tutorials and samples - AWS Elastic Beanstalk
上記ドキュメントから Node.js のサンプルアプリである nodejs.zip をダウンロードしてローカル端末などで解凍します。
解凍後、以下のディレクトリ・ファイル構成になるよう編集します。
nodejs/
├── .ebextensions/
│ └── logging.config
├── .platform/hooks/prebuild/
│ └── 01-mount-fsx.sh
├── app.js
├── cron.yaml
├── index.html
├── package.json
デフォルトアプリから追加する構成は .platform の部分です。
01-mount-fsx.sh には以下の内容を定義します。
#!/bin/bash
yum install -y nfs-utils
mkdir -p /mnt/fsx
# NFS のマウント
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
<svm の NFS DNS 名>:/vol1 \
/mnt/fsx
# 書き込みテスト用のログファイル作成とパーミッション調整
touch /mnt/fsx/log.txt
chown -R webapp:webapp /mnt/fsx
chmod -R 775 /mnt/fsx
echo "FSx mounted and permissions set" >> /var/log/web.stdout.log
app.js には以下の内容を定義します。
const express = require("express");
const fs = require("fs");
const path = require("path");
const app = express();
const port = process.env.PORT || 8080;
const logPath = "/mnt/fsx/log.txt";
app.get("/", (req, res) => {
const message = `Accessed at ${new Date().toISOString()}\n`;
// マウント先に書き込み
fs.appendFile(logPath, message, (err) => {
if (err) {
console.error("Failed to write log:", err);
return res.status(500).send("Failed to write to FSx mount.");
}
res.send(`Hello from Elastic Beanstalk! Log written to FSx:\n${message}`);
});
});
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
package.json には以下の内容を定義します。
{
"name": "fsx-eb-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
各種ファイル編集後、ルートディレクトリである nodejs を含めずに全ファイルを zip 化します。
Elastic Beanstalk 環境の作成
以下の設定で作成します。
- プラットフォーム: Node.js 22 running on 64bit Amazon Linux 2023/6.5.1
- コードは上記手順で作成した zip ファイルをアップロード
- プリセット: 単一インスタンス
- VPC: デフォルト VPC
- CloudWatch ログへのインスタンスログのストリーミング: オン
数分でデプロイが完了します。
デプロイ完了後、Elastic Beanstalk のデフォルトドメインにアクセスして、以下の内容が表示されれば成功です。
Hello from Elastic Beanstalk! Log written to FSx: Accessed at xxx
エラーが発生した場合は CloudWatch Logs のログを確認してください。
主にセキュリティグループでのネットワーク疎通の問題や NFS DNS 名の指定ミスが考えられます。
書き込まれたファイル確認
FSx for NetApp ONTAP にマウント済みの EC2 インスタンスから書き込まれたファイルを確認してみます。
$ ls -l /fsx
total 4
-rwxrwxr-x 1 900 900 148 May 16 06:34 log.txt
$ cat /fsx/log.txt
Accessed at 2025-05-16T05:57:08.425Z
Accessed at 2025-05-16T06:02:30.424Z
Accessed at 2025-05-16T06:03:47.698Z
Accessed at 2025-05-16T06:34:02.593Z
Accessed at 2025-05-16T06:44:58.782Z
app.js から書き込んだ log.txt が存在し、書き込みされていることも確認できました。
まとめ
今回は Elastic Beanstalk から FSx for NetApp ONTAP をマウントしてみました。
どなたかの参考になれば幸いです。
Discussion