web-dev-qa-db-fra.com

Montez le compartiment S3 en tant que système de fichiers sur le conteneur AWS ECS

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!!

5
Pratik Mungekar

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".

3
wimnat

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

2
Robert Hutto

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:

  1. Utilisation de rexray/s3fs: les derniers volumes sont apparus lors de l'exécution de 'docker volume ls' mais j'ai eu une erreur lors du montage des volumes ( https://github.com/rexray/rexray/issues/1187 ).
  2. Si vous utilisez rexray/s3fs versionné, vous devez inclure cette version dans le nom du pilote lorsque vous définissez le montage, c'est-à-dire Driver: 'rexray/s3fs:0.11.1'
  3. Pour vérifier que les instances de conteneur ont les attributs requis, vous pouvez utiliser aws-cli: aws ecs list-attributes --cluster my-cluster --target-type container-instance --profile myprofile --attribute-name ecs.capability.docker -plugin.rexray/s3fs.0.11.1
  4. Il semble que l'agent ecs démarre après la fin du script UserData, donc pas besoin de redémarrer l'agent ou d'attendre que l'agent démarre.
    1. L'installation fonctionne pour le compartiment avec le cryptage par défaut activé (AES256). Si vous utilisez votre propre kmskey pour chiffrer le compartiment, vous devez fournir l'option s3fs correcte pour gérer le chiffrement/déchiffrement. Je n'ai pas essayé ça.
0
jakobnordztrom

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=autos3fs 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.

0
qwwqwwq