2017-06-22 4 views

Répondre

4

Oui et non.

Ce que vous ne pouvez pas faire est d'exécuter docker run pour exécuter un conteneur dans le cadre de l'appel Lambda. Mais vous pouvez déclencher une tâche sur ECS à exécuter. Pour que cela fonctionne, vous devez avoir un cluster configuré sur ECS, ce qui signifie que vous devez payer au moins une instance EC2. Pour cette raison, il serait peut-être préférable de ne pas utiliser Docker, mais je connais trop peu votre application pour en juger.

Il y a beaucoup d'articles là-bas comment connecter S3, Lambda et ECS. Voici un joli article approfondi par Amazon que vous pourriez être intéressé par:

https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

Si vous êtes à la recherche de code, ce référentiel met en œuvre ce qui est discuté dans l'article ci-dessus:

https://github.com/awslabs/lambda-ecs-worker-pattern

Voici un extrait que nous utilisons dans notre fonction Lambda (Python) pour exécuter un conteneur Docker de Lambda:

result = boto3.client('ecs').run_task(
    cluster=cluster, 
    taskDefinition=task_definition, 
    overrides=overrides, 
    count=1, 
    startedBy='lambda' 
) 

Nous passons au nom du cluster sur lequel nous voulons exécuter le conteneur, ainsi que la définition de la tâche qui définit quel conteneur à exécuter, les ressources dont il a besoin et ainsi de suite. overrides est un dictionnaire/une carte avec des paramètres que vous souhaitez remplacer dans la définition de tâche, que nous utilisons pour spécifier la commande que nous voulons exécuter (c'est-à-dire l'argument docker run). Cela nous permet d'utiliser la même fonction Lambda pour exécuter beaucoup de tâches différentes sur ECS.

Espérons que cela vous dirige dans la bonne direction.

0

Oui, essayez Udocker.

Udocker est un outil simple écrit en Python, il a un ensemble minimal de dépendances pour que puisse être exécuté dans une large gamme de systèmes Linux.

udocker ne fait pas usage de docker ne nécessite l'installation.

udocker « exécute » les récipients en fournissant simplement un chroot comme l'environnement sur le récipient extrait. L'implémentation actuelle utilise PRoot pour imiter chroot sans nécessiter de privilèges.

Exemples

Pull de moyeu docker et énumérer les images tirées.

udocker pull fedora 

Créez le conteneur à partir d'une image tirée et exécutez-le. Il est également bon de vérifier Hackernoon.Parce que: Dans Lambda, le seul endroit où vous êtes autorisé à écrire est/tmp. Mais udocker tentera d'écrire au homedir par défaut. Et d'autres choses.

0

Oui. Il est possible d'exécuter des conteneurs sur des images Docker stockées dans Docker Hub dans AWS Lambda à l'aide de SCAR.

Par exemple, vous pouvez créer une fonction Lambda pour exécuter un conteneur de la ubuntu: 16,04 image dans Docker Hub comme suit:

scar init ubuntu:16.04 

Et vous pouvez exécuter une commande ou d'un script shell dans les ce contenant à chaque appel de la fonction:

scar run scar-ubuntu-16-04 whoami 
SCAR: Request Id: ed5e9f09-ce0c-11e7-8375-6fc6859242f0 
Log group name: /aws/lambda/scar-ubuntu-16-04 
Log stream name: 2017/11/20/[$LATEST]7e53ed01e54a451494832e21ea933fca 
--------------------------------------------------------------------------- 
sbx_user1059 

Vous pouvez utiliser vos propres images Docker stockées dans Docker Hub. Certaines limitations s'appliquent, mais elles peuvent être utilisées efficacement pour exécuter des applications génériques sur AWS Lambda. Il dispose également d'un modèle de programmation pour les applications pilotées par événements. Il utilise uDocker sous le capot.