Rexray/s3fsドライバーを使用してAWS ECS DockerコンテナーのボリュームとしてS3をマウントしようとしています。
プラグインをインストールしたローカルマシンでこれを行うことができます
$docker plugin install rexray/s3fs
dockerコンテナにS3バケットをマウントしました。
$docker plugin ls
ID NAME DESCRIPTION ENABLED
3a0e14cadc17 rexray/s3fs:latest REX-Ray Fuse Driver for Amazon Simple Storage true
$docker run -ti --volume-driver=rexray/s3fs -v s3-bucket:/data img
これをAWS ECSで複製しようとしています。
以下のドキュメントに従ってみました: https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/docker-volumes.html
Driverの値を指定すると、タスクを実行できず、「すべての要件を満たすコンテナインスタンスがないため、タスクを配置できませんでした」と表示されます。エラー。
私はt2.mediumインスタンスを使用しており、タスクの要件を与えているため、ハードウェア要件の問題ではないはずです。
ジョブ定義からドライバ構成を削除すると、タスクが実行されます。
何かを設定するのに失敗しているようです。
誰かが同じことを試したり試したりしたことがありますか、知識を共有してください。
ありがとう!!
Rexray/s3fsドライバーを使用するアプローチは正しいです。
これらは、Amazon Linux 1で機能させるために私が従った手順です。
まず、s3fsをインストールする必要があります。
yum install -y gcc libstdc+-devel gcc-c+ Fuse fuse-devel curl-devel libxml2-devel mailcap automake openssl-devel git gcc-c++
git clone https://github.com/s3fs-Fuse/s3fs-Fuse
cd s3fs-Fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
make install
ドライバーをインストールします。アクセスキーやAWSリージョンの代わりにIAMロールを使用するなど、変更が必要なオプションがいくつかあります。
docker plugin install rexray/s3fs:latest S3FS_REGION=ap-southeast-2 S3FS_OPTIONS="allow_other,iam_role=auto,umask=000" LIBSTORAGE_INTEGRATION_VOLUME_OPERATIONS_MOUNT_ROOTPATH=/ --grant-all-permissions
ECSエージェントを再起動する非常に重要なステップです。私はまた、適度に更新します。
yum update -y ecs-init
service docker restart && start ecs
これで、タスク定義を作成する準備ができました。重要な部分は、次に示すボリューム構成です。
"volumes": [
{
"name": "name-of-your-s3-bucket",
"Host": null,
"dockerVolumeConfiguration": {
"autoprovision": false,
"labels": null,
"scope": "shared",
"driver": "rexray/s3fs",
"driverOpts": null
}
}
]
次に、コンテナー定義でマウントポイントを指定するだけです。
"mountPoints": [
{
"readOnly": null,
"containerPath": "/where/ever/you/want",
"sourceVolume": "name-of-your-s3-bucket"
}
]
これで、s3バケットにアクセスするための適切なIAM権限がある限り、コンテナーが起動し、s3をボリュームとして使用することができます。
「ATTRIBUTE」というタスクの実行中にエラーが発生した場合は、プラグインがec2インスタンスに正常にインストールされ、ecsエージェントが再起動されていることを再確認してください。また、ドライバ名が「rexray/s3fs」であることを再確認してください。
Ecsクラスターec2インスタンスには、rexrayドライバーがインストールされている必要があります。このawsブログポストで、彼らはこれについて議論しています。 https://aws.Amazon.com/blogs/compute/Amazon-ecs-and-docker-volume-drivers-Amazon-ebs/
開始を支援するために、2ノードのECSクラスターを構築するAWS CloudFormationテンプレートを作成しました。テンプレートは、rexray/ebsボリュームドライバーを各ノードにブートストラップし、REX-Rayが必要とするAPIアクションを呼び出せるようにするインラインポリシーを持つIAMロールを割り当てます。
同じことがs3ドライバーにも当てはまります
ガイダンスを提供してくれた@wimnatに感謝します。
LaunchConfiguration UserDataを介してECSクラスターのEc2インスタンスにrexray/s3fsプラグインをインストールすることに関して、これは私が最終的に得たものです(AMIバージョンamzn-AMI-2018.03.o-Amazon-ecs-optimizedの場合):
#install s3fs required by rexray/s3fs docker plugin
yum install -y gcc libstdc+-devel gcc-c+ Fuse fuse-devel curl-devel libxml2-devel mailcap automake openssl-devel git gcc-c++
git clone https://github.com/s3fs-Fuse/s3fs-Fuse
cd s3fs-Fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
make install
#install plugin to enable s3 volumes, using the task execution role to access s3.
docker plugin install rexray/s3fs:0.11.1 S3FS_REGION=us-east-1 S3FS_OPTIONS="allow_other,iam_role=auto,umask=000" LIBSTORAGE_INTEGRATION_VOLUME_OPERATIONS_MOUNT_ROOTPATH=/ --grant-all-permissions
注意点:
Driver: 'rexray/s3fs:0.11.1'
s3fs
コマンドを直接実行してバケットをコンテナにマウントするだけで、s3fs
をECSコンテナで動作させることができます。私はrexrayドライバーに精通していません。s3fs
を使用するだけでいくつかの利点が得られる可能性がありますが、多くの使用例ではこれで十分に機能し、UserData
の編集は必要ありません。
コンテナのエントリポイントを次のように設定することで、少しスムーズになりました。
#!/bin/bash
bucket=my-bucket
s3fs ${bucket} /data -o ecs
echo "Mounted ${bucket} to /data"
exec "$@"
-o ecs
オプションは、ECSタスクの役割を引き受けるために重要です。通常の-o iam_role=auto
s3fs
を使用すると、ECSエージェントを実行するEC2インスタンスのIAMの役割を引き受けます。
注:s3fs
によってインストールされたapt-get install s3fs
のバージョンは古く、この記事の執筆時点ではこのオプションを利用できません。つまり、ソースからs3fs
をインストールする必要がある場合があります。