Für die Sprachen, die standardmäßig von IBM Cloud Functions unterstützt werden, werden standardmäßig verschiedene Bibliotheken bereitgestellt. Um jedoch mit einer Bibliothek zu entwickeln, die nicht in der Standardeinstellung enthalten ist, ist die Entwicklung über die Befehlszeile unerlässlich. Da Java keine GUI-Entwicklungsumgebung hat, ist die Entwicklung über die Befehlszeile unerlässlich. Dieses Mal werde ich zusammenfassen, was mir beim Entwickeln von Cloud-Funktionen über die Befehlszeile am Beispiel von Python nicht gelungen ist. Außerdem gehen wir diesmal davon aus, dass Docker im Voraus installiert ist. (Wenn Sie sich in einer anderen Sprache entwickeln, können Sie sie meiner Meinung nach entwickeln, wenn Sie sie richtig lesen.)
Dieses Mal möchte ich das LINE Bot SDK von Python installieren. Hier Lesen Sie das Dokument und erstellen Sie den Inhalt von `` `require.txt``` wie folgt Ich werde.
# 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
Verwenden Sie nach dem Erstellen der Textdatei den Docker-Befehl, um die Betriebsumgebung von Functions abzurufen und ein Paket der virtuellen Umgebung von Python zu erstellen.
$ 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"
Unten finden Sie den Code (`` `__ main__. Py```), der bei der Bereitstellung ausgeführt wird.
__main__.py
def main(args):
return {"result":"OK!"}
Komprimieren Sie das soeben erstellte Paket und den Code in eine Zip-Datei und erstellen Sie die Aktion über die Befehlszeile. Fahren Sie außerdem fort, während Sie mit dem IBM Cloud-Befehl angemeldet sind.
$ zip -r hellobot.zip virtualenv __main__.py
$ ibmcloud fn action create hellobot hellobot.zip --kind python:3.7
Dann wurde das Ausführungsergebnis wie folgt ausgegeben.
error: Unable to create action 'my-action-name': The connection failed, or timed out. (HTTP status code 413)
Oh? Warum wird dieser Fehler angezeigt, obwohl ich ihn nicht eingegeben habe?
Nachdem ich die Ursache dieses Fehlers untersucht hatte, fand ich diesen Artikel über Stackoverflow. IBM Cloud functions - Unable to create an action Laut der Antwort der Person, die für IBM Cloud-Funktionen verantwortlich ist, scheint dies ein Fehler auf der Befehlszeilenseite zu sein, und es scheint, dass Aktionen nicht auf diese Weise erstellt werden können. (Schreiben Sie es in das Dokument)
Der zuvor erwähnte Stapelüberlauf sagte nicht nur, dass er nicht verwendet werden konnte, weil es sich um einen Fehler handelte, sondern bot auch eine alternative Lösung, sodass ich ihn beim nächsten Mal dort ausprobieren möchte. Lesen Sie hier, erstellen Sie Ihre eigene virtuelle Umgebung, laden Sie sie auf Docker Hub hoch und ergreifen Sie dann Maßnahmen. Erstellen. Diese Methode ist für diejenigen, die an die Bedienung von Docker gewöhnt sind, einfach, für diejenigen, die sie noch nie berührt haben, kann sie jedoch schwierig sein.
Bereiten Sie zunächst eine Docker-Datei für die Aktionsausführungsumgebung vor.
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
Wie Sie in der Docker-Datei sehen können, ist die darin enthaltene `` `require.txt``` dieselbe wie die zuvor erstellte, sodass der Inhalt weggelassen wird. Nachdem Sie alle erforderlichen Dateien haben, führen Sie den folgenden Befehl aus, um ein Bild zu erstellen. Die Fertigstellung wird einige Zeit dauern.
$ docker build -t linebot_function .
Laden Sie das erstellte Image in Docker Hub hoch. Wenn Sie sich nicht bei Docker Hub registriert haben, registrieren Sie sich bitte über hier. Melden Sie sich nach der Registrierung über den Docker-GUI-Bildschirm bei Docker Hub an. Verwenden Sie nach der Anmeldung den folgenden Befehl, um das erstellte Bild zu markieren und hochzuladen.
$ docker tag linebot_function YOUR_USER_NAME/linebot_function
$ docker push YOUR_USER_NAME/linebot_function
Nachdem wir die Ausführungsumgebung bereit haben, bereiten wir den Code für die Ausführung vor. Dieses Mal habe ich das Python SDK des LINE-Bots als externe Bibliothek installiert. Überprüfen Sie daher, ob es ordnungsgemäß enthalten ist. Bereiten Sie also den folgenden Code vor.
first-linebot.py
import linebot
def main(args):
return {"LINEbot":linebot.__version__}
Sobald Sie den Code haben, ist es Zeit, die Aktion zu erstellen. Installieren Sie zunächst das Plug-in IBM Cloud Functions.
$ ibmcloud plugin install cloud-functions
Richten Sie die Ressourcengruppe mit dem folgenden Befehl aus. Melden Sie sich für den Gruppennamen von hier an und überprüfen Sie.
$ ibmcloud target -o <org> -s <space>
Nachdem Sie den Code haben, erstellen Sie eine Aktion mit dem folgenden Befehl.
$ ibmcloud fn action create first-linebot --docker YOUR_USER_NAME/linebot_function first-linebot.py
Wenn das Ergebnis fehlerfrei zurückgegeben wird, ist es erfolgreich.
Überprüfen Sie den Betrieb der erstellten Aktion. Die in der Docker-Ausführungsumgebung erstellten Aktionen können jedoch nicht über die GUI überprüft werden. Dies wird daher auch über die Befehlszeile ausgeführt. Führen Sie den folgenden Befehl aus.
$ ibmcloud fn action invoke first-linebot --result
Wenn die LINE bot SDK-Version nach der Ausführung als Ergebnis ausgegeben wird, funktioniert die Aktion in Ihrer eigenen Umgebung einwandfrei.
{
"LINEbot": "1.15.0"
}
Ich denke, dies wird den Bereich der Aktionen erweitern, die Sie erstellen können. Ich werde versuchen, einen serverlosen LINE-Bot unter Verwendung der diesmal erstellten Umgebung zu erstellen.
Sie können den Artikel sehen, der den LINE-Bot von [hier] erstellt hat (https://qiita.com/K_M95/items/b389a89941fe9329927c).
Recommended Posts