Différentes bibliothèques sont fournies par défaut pour les langues prises en charge par IBM Cloud Functions en standard. Cependant, pour développer en utilisant une bibliothèque qui n'est pas dans la bibliothèque par défaut, le développement en ligne de commande est essentiel. De plus, Java n'a pas d'environnement de développement GUI, donc le développement sur la ligne de commande est essentiel. Donc, cette fois, je vais résumer ce que je suis resté bloqué lors du développement de Cloud Functions à partir de la ligne de commande en utilisant Python comme exemple. De plus, cette fois, nous procéderons en supposant que docker est installé à l'avance. (Si vous développez dans une autre langue, je pense que vous pouvez le développer si vous le lisez correctement.)
Cette fois, je voudrais installer le SDK LINE bot de python. Ici Reportez-vous au document et créez le contenu de `` requirements.txt '' comme suit Je vais.
# Requirements.txt contains a list of dependencies for the Python Application #
# Setup modules
gevent == 1.4.0
flask == 1.0.2
# default available packages for python3action
beautifulsoup4 == 4.8.0
httplib2 == 0.13.0
kafka_python == 1.4.6
lxml == 4.3.4
python-dateutil == 2.8.0
requests == 2.22.0
scrapy == 1.6.0
simplejson == 3.16.0
virtualenv == 16.7.1
twisted == 19.7.0
PyJWT == 1.7.1
# packages for numerics
numpy == 1.16.4
scikit-learn == 0.20.3
scipy == 1.2.1
pandas == 0.24.2
# packages for image processing
Pillow == 6.2.1
# IBM specific python modules
ibm_db == 3.0.1
cloudant == 2.12.0
watson-developer-cloud == 2.8.1
ibm-cos-sdk == 2.5.1
ibmcloudsql == 0.2.23
# Compose Libs
psycopg2 == 2.8.2
pymongo == 3.8.0
redis == 3.2.1
pika == 1.0.1
elasticsearch == 6.3.1
cassandra-driver == 3.18.0
etcd3 == 0.10.0
#Additional modules
line-bot-sdk
Après avoir créé le fichier texte, utilisez la commande docker pour obtenir l'environnement d'exploitation de Functions et créer un package de l'environnement virtuel de Python.
$ docker pull ibmfunctions/action-python-v3.7
$ docker run --rm -v "$PWD:/tmp" ibmfunctions/action-python-v3.7 bash -c "cd /tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"
Voici le code (`` `__ main__. Py '') qui s'exécute une fois déployé.
__main__.py
def main(args):
return {"result":"OK!"}
Compressez le package et le code que vous venez de créer dans un zip et créez l'action à partir de la ligne de commande. De plus, continuez tout en étant connecté avec la commande IBM Cloud.
$ zip -r hellobot.zip virtualenv __main__.py
$ ibmcloud fn action create hellobot hellobot.zip --kind python:3.7
Ensuite, le résultat de l'exécution a été affiché dans ce qui suit.
error: Unable to create action 'my-action-name': The connection failed, or timed out. (HTTP status code 413)
Oh? Pourquoi ai-je cette erreur même si je ne l'ai pas tapée?
Après avoir étudié la cause de cette erreur, j'ai trouvé cet article sur Stackoverflow. IBM Cloud functions - Unable to create an action Selon la réponse de la personne responsable d'IBM Cloud Functions, cela semble être un bogue côté ligne de commande, et il semble que les actions ne peuvent pas être créées de cette façon. (Écrivez-le dans le document)
Non seulement le débordement Stack mentionné plus tôt indiquait qu'il ne pouvait pas être utilisé car c'était un bogue, mais il offrait également une solution alternative, alors j'aimerais l'essayer la prochaine fois. Reportez-vous à here, créez votre propre environnement virtuel, téléchargez-le sur Docker Hub, puis agissez. Créer. Cette méthode est facile pour ceux qui ont l'habitude d'utiliser Docker, mais elle peut être difficile pour ceux qui ne l'ont jamais touchée.
Tout d'abord, préparez un Dockerfile pour l'environnement d'exécution des actions.
FROM openwhisk/actionloop-python-v3.7:36721d6
COPY requirements.txt requirements.txt
RUN pip install --upgrade pip setuptools six && pip install --no-cache-dir -r requirements.txt
Comme vous pouvez le voir dans le Dockerfile, le
requirements.txt``` qui apparaît ici est le même que celui créé précédemment, donc le contenu est omis. Maintenant que vous disposez de tous les fichiers nécessaires, exécutez la commande suivante pour créer une image. Cela prendra un certain temps.
$ docker build -t linebot_function .
Téléchargez l'image créée sur Docker Hub. Si vous ne vous êtes pas inscrit sur Docker Hub, veuillez vous inscrire depuis ici. Après votre inscription, connectez-vous à Docker Hub à partir de l'écran de l'interface graphique Docker. Une fois connecté, utilisez la commande suivante pour baliser et télécharger l'image créée.
$ docker tag linebot_function YOUR_USER_NAME/linebot_function
$ docker push YOUR_USER_NAME/linebot_function
Maintenant que l'environnement d'exécution est prêt, préparons le code pour l'exécuter. Cette fois, j'ai installé le SDK Python du bot LINE en tant que bibliothèque externe, alors vérifiez s'il est correctement inclus. Préparez donc le code suivant.
first-linebot.py
import linebot
def main(args):
return {"LINEbot":linebot.__version__}
Une fois que vous avez le code, il est temps de créer l'action. Tout d'abord, installez le plug-in IBM Cloud Functions.
$ ibmcloud plugin install cloud-functions
Ciblez le groupe de ressources avec la commande suivante. Pour le nom du groupe, connectez-vous depuis ici et vérifiez.
$ ibmcloud target -o <org> -s <space>
Maintenant que vous avez le code, créez une action avec la commande suivante.
$ ibmcloud fn action create first-linebot --docker YOUR_USER_NAME/linebot_function first-linebot.py
Si le résultat est renvoyé sans aucune erreur, il réussit.
Vérifiez le fonctionnement de l'action créée. Cependant, comme l'opération de l'action créée dans l'environnement d'exécution Docker ne peut pas être confirmée à partir de l'interface graphique, cela est également effectué en utilisant la ligne de commande. Exécutez la commande suivante.
$ ibmcloud fn action invoke first-linebot --result
Si la version du SDK du bot LINE est générée après l'exécution, l'action fonctionne correctement dans votre propre environnement.
{
"LINEbot": "1.15.0"
}
Je pense que cela élargira la gamme d'actions que vous pouvez créer. Je vais essayer de créer un bot LINE sans serveur en utilisant l'environnement créé cette fois-ci.
Vous pouvez voir l'article qui a créé le bot LINE à partir de ici.
Recommended Posts