J'essaie de monter S3 en tant que volume sur le conteneur Docker AWS ECS à l'aide du pilote rexray/s3fs.
Je peux le faire sur ma machine locale, où j'ai installé le plugin
$docker plugin install rexray/s3fs
et monté le godet S3 sur le conteneur docker.
$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
J'essaie de reproduire cela sur AWS ECS.
J'ai essayé de suivre le document ci-dessous: https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/docker-volumes.html
Si je donne la valeur du pilote, la tâche ne peut pas s'exécuter et donner "n'a pas pu placer une tâche car aucune instance de conteneur ne répond à toutes ses exigences". Erreur.
J'utilise l'instance t2.medium et j'en donne l'exigence pour la tâche, donc ce ne devrait pas être un problème d'exigence H/W.
Si je supprime la configuration du pilote de la tâche de définition du travail, elle s'exécute.
Il semble que je manque de configurer quelque chose.
Est-ce que quelqu'un essaie/a essayé la même chose, veuillez partager les connaissances.
Merci!!
Votre approche de l'utilisation du pilote rexray/s3fs est correcte.
Ce sont les étapes que j'ai suivies pour que les choses fonctionnent sur Amazon Linux 1.
Vous devez d'abord installer 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
Installez maintenant le pilote. Il existe certaines options que vous voudrez peut-être modifier, telles que l'utilisation d'un rôle IAM au lieu de la clé d'accès et de la région AWS.
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
Maintenant, l'étape très importante du redémarrage de l'agent ECS. Je mets aussi à jour pour faire bonne mesure.
yum update -y ecs-init
service docker restart && start ecs
Vous devez maintenant être prêt à créer votre définition de tâche. La partie importante est votre configuration de volume qui est illustrée ci-dessous.
"volumes": [
{
"name": "name-of-your-s3-bucket",
"Host": null,
"dockerVolumeConfiguration": {
"autoprovision": false,
"labels": null,
"scope": "shared",
"driver": "rexray/s3fs",
"driverOpts": null
}
}
]
Il ne vous reste plus qu'à spécifier le point de montage dans la définition du conteneur:
"mountPoints": [
{
"readOnly": null,
"containerPath": "/where/ever/you/want",
"sourceVolume": "name-of-your-s3-bucket"
}
]
Tant que vous disposez des autorisations IAM appropriées pour accéder au compartiment s3, votre conteneur doit démarrer et vous pouvez continuer à utiliser s3 en tant que volume.
Si vous obtenez une erreur lors de l'exécution de la tâche indiquant "ATTRIBUER", vérifiez que le plug-in a été installé avec succès sur l'instance ec2 et que l'agent ecs a été redémarré. Vérifiez également que le nom de votre pilote est "rexray/s3fs".
Les instances ecs cluster ec2 doivent avoir le pilote rexray installé. Dans ce blog, ils en discutent. https://aws.Amazon.com/blogs/compute/Amazon-ecs-and-docker-volume-drivers-Amazon-ebs/
Pour vous aider à démarrer, nous avons créé un modèle AWS CloudFormation qui crée un cluster ECS à deux nœuds. Le modèle amorce le pilote de volume rexray/ebs sur chaque nœud et leur attribue un rôle IAM avec une stratégie en ligne qui leur permet d'appeler les actions d'API dont REX-Ray a besoin.
La même chose s'appliquerait au pilote s3
Merci à @wimnat pour ses conseils.
En ce qui concerne l'installation du plugin rexray/s3fs sur les instances Ec2 dans un cluster ECS via LaunchConfiguration UserData, c'est ce que j'ai fini par (pour la version AMI amzn-AMI-2018.03.o-Amazon-ecs-optimisée):
#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
Points à noter:
Driver: 'rexray/s3fs:0.11.1'
J'ai eu s3fs
pour travailler dans mes conteneurs ECS en exécutant simplement s3fs
commande directement pour monter le seau dans mon conteneur. Je ne connais pas le pilote rexray, il peut offrir certains avantages par rapport à l'utilisation de s3fs
, mais pour de nombreux cas d'utilisation, cela pourrait bien fonctionner et ne nécessite aucune modification UserData
.
Je l'ai rendu un peu plus fluide en définissant le point d'entrée de mon conteneur comme suit:
#!/bin/bash
bucket=my-bucket
s3fs ${bucket} /data -o ecs
echo "Mounted ${bucket} to /data"
exec "$@"
Le -o ecs
est critique pour assumer le rôle de tâche ECS, si vous utilisez le -o iam_role=auto
s3fs
assumera le rôle IAM de l'instance EC2 exécutant l'agent ECS.
Remarque: la version de s3fs
installé par apt-get install s3fs
est ancien et n'a pas cette option disponible au moment de la rédaction de ce document, ce qui signifie que vous devrez peut-être installer s3fs
à partir de la source.