[PYTHON] Bis zur Implementierung von LINE Chat Bot mit Chalice

Annahme

Ich wollte es auf AWS stellen und ausführen, weil alles in Ordnung ist. Ich habe also LINE Chatbot auf Heroku bereitgestellt Ich beschloss, dies vorerst anzuziehen.

Was ist Kelch?

Chalice ist ein von AWS erstelltes Anwendungsframework, das eine API-Umgebung mit Amazon API Gateway und AWS Lambda für Python ermöglicht. (Vom AWS-Beamten)

Zusätzlich zum Erstellen und Bereitstellen von Anwendungen über die Befehlszeile Die Richtlinie der IAM-Rolle, die Lambda zugewiesen wurde, wird automatisch angegeben. Es war sehr praktisch, beispielsweise die API automatisch auszuzahlen.

Bis zur Einführung von Kelch

Vorbereitung ・ Erwerb eines AWS-Kontos ・ Installation von AWS CLI Wenn Sie die AWS CLI nach der Installation zum ersten Mal installieren

aws configure

Drücken Sie den Befehl, um den Kontozugriffsschlüssel oder den geheimen Zugriffsschlüssel einzugeben. Registrieren wir die Region und das Ausgabeformat. Die Anmeldeinformationen werden im Ordner .aws unter Ihrem Home-Verzeichnis gespeichert. Die Ausgabe des Zugriffsschlüssels des Root-Benutzers wird nicht empfohlen. Erstellen Sie daher einen IAM-Benutzer und registrieren Sie seine Anmeldeinformationen.

Kelch


pip install chalice

Sie können es mit installieren.

Von der Projekterstellung bis zur Bereitstellung

chalice new-project hello-world

Der Befehl generiert eine Projektdatei. Klicken Sie hier für die Verzeichnisstruktur.

│  .gitignore
│  app.py
│  requirements.txt
│
└─.chalice
        config.json

Bearbeiten Sie app.py. Dies ist die Standardeinstellung.

app.py


from chalice import Chalice

app = Chalice(app_name='hello-world')


@app.route('/')
def index():
    return {'hello': 'world'}


# The view function above will return {"hello": "world"}
# whenever you make an HTTP GET request to '/'.
#
# Here are a few more examples:
#
# @app.route('/hello/{name}')
# def hello_name(name):
#    # '/hello/james' -> {"hello": "james"}
#    return {'hello': name}
#
# @app.route('/users', methods=['POST'])
# def create_user():
#     # This is the JSON body the user sent in their POST request.
#     user_as_json = app.current_request.json_body
#     # We'll echo the json body back to the user in a 'user' key.
#     return {'user': user_as_json}
#
# See the README documentation for more examples.
#

Sie können den Vorgang lokal mit dem folgenden Befehl überprüfen.

chalice local

WS000008.JPG

Klicken Sie hier, um bereitzustellen.

chalice deploy

WS000009.JPG

Gehen Sie zu der API-URL, die ausgegeben wurde, und überprüfen Sie, ob {'Hallo': 'Welt'} zurückgegeben wird. Hier ist die Bereinigung.

chalice delete

Implementieren Sie den LINE Chat Bot

Registrieren Sie sich bei LINE-Entwicklern

Stellen Sie den App-Namen usw. entsprechend ein und erstellen Sie einen Kanal für die Rückgabe von Papageien. Aktivieren Sie die Verwendung von Webhooks in den Messaging-API-Einstellungen und Messaging-API-Einstellungen ** Kanalzugriffstoken (langfristig) **, Notieren Sie sich das ** Kanalgeheimnis ** in den Kanaleinstellungen.

Installieren Sie line-bot-sdk

Örtlich

pip install line-bot-sdk

OK. Löschen Sie die Datei im Whl-Format von PyPI zur Bereitstellung in Lambda. Wenn Sie eine externe Bibliothek mit Lambda verwenden, erstellen Sie einen Lieferantenordner in dem Ordner mit dem Projektnamen und speichern Sie ihn dort im whl-Format. Erstellen Sie außerdem die Datei require.txt und geben Sie die zu verwendende Version an.

requirements.txt


line-bot-sdk==1.17.0

Registrieren Sie Umgebungsvariablen

Fügen Sie der Datei config.json im Verzeichnis .chalice Umgebungsvariablen hinzu. Registrieren wir das Kanalgeheimnis und das Kanalzugriffstoken, die wir zuvor wie folgt notiert haben.

config.json


{
  "version": "2.0",
  "app_name": "line-bot",
  "stages": {
    "dev": {
      "api_gateway_stage": "api",
      "environment_variables": {
      "LINE_CHANNEL_SECRET": "Kanalgeheimnis",
      "LINE_CHANNEL_ACCESS_TOKEN": "Kanalzugriffstoken"
      }
    }
  }
}

App.py bearbeiten

Erstellen Sie mit Chalice einen Webhook für LINE Bot auf AWS Lambda Ich habe hier darauf hingewiesen.

Bereitstellungsergebnis

Bereitstellen. Wenn Sie die Konsole überprüfen, werden Lambda und API-Gateway erstellt. WS000001.JPG WS000003.JPG

Registrieren Sie die ausgegebene API-URL plus / callback im Webhook der LINE-Entwickler. Wenn nach dem Drücken von "Bestätigen" kein Problem auftritt, ist dies in Ordnung. WS000004.JPG

Sprechen Sie dann mit dem Bot und prüfen Sie, ob die Papageienrückgabe funktioniert. WS000007.JPG

Fehlerbehebung bis zur Implementierung

Zuerst habe ich Lambda getestet, weil Aum weder Ja noch Nein gesagt hat. WS000000.JPG Ein leerer JSON reicht hier für die Testfunktion aus. Ich habe den Fehler bestätigt und bin zu CloudWatch gegangen. Fehlerprotokolle werden unter CloudWatch> CloudWatch-Protokolle> Protokollgruppen gespeichert. Wenn ich den Log-Stream von Line-Bot öffne ... WS000005.JPG Es wird gesagt, dass es kein Line-Bot-Modul gibt. Ich überprüfte und stellte fest, dass es in Ordnung war, bis ich die Bibliothek im Hersteller gespeichert hatte, vergaß jedoch, die Datei require.txt zu bearbeiten.

Vorsichtsmaßnahmen / ungelöste Angelegenheiten

・ Ich hatte es eilig, weil die Konsole nach der Bereitstellung einige Minuten lang nicht funktionierte, aber es scheint, dass die Installation von line-bot-sdk lange gedauert hat. Warten wir geduldig. -Wenn ich mit einem Browser eine Verbindung zu API / Rückruf herstelle, wird {"message": "Missing Authentication Token"}. Die Papageienrendite selbst funktioniert, aber ... -Chalice gewährt Lambda automatisch die IAM-Rollenrichtlinie, aber die Richtlinie des IAM-Benutzers, der über den Zugriffsschlüssel für den Zugriff auf AWS verfügt, muss hier angegeben werden. Selbst wenn ich eine solche Richtlinie gebe, habe ich nicht die Berechtigung. Ich wurde durch einen Fehler abgelehnt, und dieses Mal habe ich die Administratorzugriffsrichtlinie getroffen und sie gepusht (es ist nicht sinnvoll, einen IAM-Benutzer zu erstellen ...).

Recommended Posts

Bis zur Implementierung von LINE Chat Bot mit Chalice
Bis Django etwas mit einem Linienbot zurückgibt!
Lassen Sie uns Yuma in Python 3 implementieren
Implementieren Sie den Slack Chat Bot in Python