[PYTHON] Eine Geschichte über den Betrieb einer GCP-Instanz von Discord

Einführung

Dieser Artikel ist eine Fortsetzung von Eine Geschichte über einen GCP-Anfänger, der einen Micra-Server mit GCE erstellt. Wenn Sie das letzte Mal nicht gesehen haben, würde ich es begrüßen, wenn Sie es von dort aus sehen könnten.

Übrigens, seit ich das letzte Mal einen Micra-Server mit GCP gebaut habe, Dieses Mal möchte ich es aus Zwietracht heraus bedienen können.

Gibt es einen Vorteil, die Instanz aus Zwietracht heraus zu betreiben? Ich denke, Bitten Sie jemanden, der mit Ihnen Micra spielt, sich dem Discord-Kanal anzuschließen Da es im Auftrag des Administrators gestartet und gestoppt werden kann, kann die Belastung des Administrators verringert werden.

Ziel

--Erstellen eines Servers für Bot --Erstellen Sie ein Dienstkonto für die Instanzsteuerung --Erstellen Sie Discord Bot

Verfahren

1. Erstellen eines Servers für den Bot

Der Server, der diesmal für den Bot verwendet wird, ist Google Compute Engine (GCE). GCE verfügt über immer kostenlose Ressourcen, die völlig kostenlos verwendet werden können. Dieses Mal werden wir sie verwenden. Da es immer kostenlos ist, werden Ihnen keine Gebühren berechnet, auch wenn es immer ausgeführt wird. Dieses Mal wird nur der Bot verwendet, sodass diese Ressource für den Betrieb ausreicht.

Weitere Informationen zu Always Free von GCE finden Sie im folgenden offiziellen Dokument.

Google Cloud Free Tier

Die Instanz wurde mit solchen Einstellungen erstellt. Detaillierte Einstellungen werden diesmal weggelassen.

Artikel Inhalt
Instanzname botserver
Region us-west1
Zone us-west1-a
Maschinentyp f1-micro(vCPUx1,Speicher 0.6GB)
Boot-Diskette CentOS 7
IP Adresse Erstellen Sie eine statische IP-Adresse

2. Erstellen Sie ein Dienstkonto für die Instanzsteuerung

Sie können in GCP ein Dienstkonto mit nur bestimmten Berechtigungen für den Zugriff auf Projekte und Ressourcen erstellen. Weitere Informationen zu Dienstkonten finden Sie in der folgenden offiziellen Dokumentation.

Informationen zu Dienstkonten

Geben Sie diesem Dienstkonto dieses Mal die Berechtigung, die Instanz (Micra-Server) zu starten und zu stoppen. Erstellen Sie zunächst eine "Rolle" aus "IAM und Verwaltung".

Wählen Sie IAM & Administration-> Rollen-> Rolle erstellen und konfigurieren Sie wie folgt:

Artikel Inhalt
Titel Beliebiger Titelname
Behörde compute.instances.get
compute.instances.start
compute.instances.stop

** [Beschreibung der Behörde] **

Artikel Erläuterung
compute.instances.get Berechtigung zum Anmelden bei einer Compute Engine-Instanz
compute.instances.start Berechtigung zum Starten einer Compute Engine-Instanz
compute.instances.stop Berechtigung zum Stoppen einer Compute Engine-Instanz

Zu diesem Zeitpunkt ist die Erstellung der "Rolle" abgeschlossen. Erstellen Sie dann ein "Dienstkonto" aus "IAM und Administration".

Wählen Sie "IAM und Administration" -> "Dienstkonto" -> "Dienstkonto erstellen" und stellen Sie Folgendes ein.

Artikel Inhalt
Name des Dienstkontos Beliebiger Name des Dienstkontos
Dienstkonto-ID Beliebige Dienstkonto-ID@{ProjectID}.iam.gserviceaccount.com
Beschreibung des Dienstkontos Schreiben Sie eine Beschreibung für Ihr eigenes Verständnis
Rollenauswahl Die zuvor erstellte "Rolle"
Schlüssel erstellen JSON-Typ
*Klicken Sie auf Erstellen, um die JSON-Datei herunterzuladen.

Bitte verlieren Sie die beim Erstellen des Schlüssels heruntergeladene JSON-Datei nicht, da Sie sie später benötigen.

3. Erstellen eines Discord Bot

3.1 Erstellen eines Bot-Kontos

Erstellen Sie zunächst ein Entwicklerkonto für Ihren Bot im Discord Developer Portal.

Ich habe in den folgenden Artikeln nach verschiedenen Einstellungen für die Erstellung des Entwicklerkontos gesucht.

Handbuch zur Initialisierung des Discord Bot-Kontos für Entwickler

3.2 Bot Server Einstellungen

Melden Sie sich bei der in 1. erstellten Instanz an und nehmen Sie verschiedene Einstellungen vor.

Installieren Sie zunächst die erforderlichen Pakete.


#In CentOS7 ist Python3 standardmäßig nicht installiert. Installieren Sie daher Python3.
$ yum install python3

# discord.Installieren Sie py
$ python3 -m pip install -U discord.py

Authentifizieren Sie als Nächstes das zuvor erstellte Dienstkonto.


#Laden Sie die beim Erstellen des Dienstkontos heruntergeladene Schlüsseldatei (JSON-Datei) auf den Bot-Server hoch und authentifizieren Sie sich mit dem folgenden Befehl.
$ gcloud auth activate-service-account --key-file "./<projectName>-xxxxxx.json"

#Überprüfen Sie, ob das Dienstkonto aktiv ist.*OK, wenn Ihr Konto aktiv ist
$ gcloud auth list

#Ausführungsbeispiel unten
---------------------------------------------------------------
ACTIVE  ACCOUNT
*       <Name des Dienstkontos>@<Projektname>.iam.gserviceaccount.com
---------------------------------------------------------------

Ein Bot-Programm erstellen

mineserver-op.py



#Installierte Zwietracht.Laden Sie py
import discord
import os
import time

#Zugriffstoken für Ihren Bot
TOKEN = '<Zugangstoken>'

client = discord.Client()

#Verarbeitung, die beim Start ausgeführt wird
@client.event
async def on_ready():
    #Nach dem Start wird im Terminal eine Anmeldemeldung angezeigt
    print('Yaho! Ich habe mich angemeldet!')
    print('/Sie können den Befehl mit Hilfe überprüfen')

#Verarbeitung, die beim Empfang einer Nachricht ausgeführt wird
@client.event
async def on_message(message):
    #Nicht verarbeiten, wenn der Absender der Nachricht Bot ist
    if message.author.bot:
        return
#Starten Sie den Server
    if message.content == '/start':
        await message.channel.send('Server starting up...')
        await message.channel.send('* Führen Sie keine anderen Befehle aus, bis "Start" angezeigt wird. *')
        os.system('gcloud --account=<Name des Dienstkontos>@<Projektname>.iam.gserviceaccount.com compute instances start <Instanzname> --project <Projektname> --zone <Zonenname>')
        await message.channel.send('up .minecraft_server starting...')
        time.sleep(60)
        await message.channel.send('start up')
#Stoppen Sie den Server
    if message.content == '/stop':
        await message.channel.send('Server is stopping')
        await message.channel.send('* Führen Sie keine anderen Befehle aus, bis "down" angezeigt wird. *')
        os.system('gcloud --account=<Name des Dienstkontos>@<Projektname>.iam.gserviceaccount.com compute instances stop <Instanzname> --project <Projektname> --zone <Zonenname>')
        await message.channel.send('down')

#Hilfe anzeigen
    if message.content == '/help':
        await message.channel.send('/start :Starten Sie den Server')
        await message.channel.send('/stop :Stoppen Sie den Server') 

client.run(TOKEN)

Ausführung des erstellten Bot-Programms

#Stellen Sie sicher, dass Sie das Ausführungsprotokoll führen und ausführen
$ nohup python3 mineserver-op.py > ./out.log &

Zu diesem Zeitpunkt können Sie die Instanz aus Zwietracht heraus betreiben. Lassen Sie uns überprüfen, ob Sie die Instanz tatsächlich bedienen können, indem Sie einen Befehl aus Zwietracht eingeben.

Zusammenfassung

Dieses Mal haben wir nur die Mindestfunktionen zum Starten und Stoppen der Instanz implementiert. Es ist möglich, verschiedene Funktionen zu implementieren, indem dem Dienstkonto die gewünschte Berechtigung erteilt wird.

Nebenbei habe ich bei diesem Operationscheck ein wenig Micra gespielt. Seit ich gespielt habe, gab es viele neue Elemente und ich wollte Micra noch einmal machen (lacht).

Recommended Posts

Eine Geschichte über den Betrieb einer GCP-Instanz von Discord
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die die Discord-Aktivität im Slack-Status widerspiegelt
Eine Geschichte über das Erstellen eines UNIX / Linux-kompatiblen Betriebssystems von Grund auf neu
Eine Geschichte über einen GCP-Anfänger, der versucht, mit GCE einen Micra-Server aufzubauen
Eine erfrischende Geschichte über Slice in Python
Eine launische Geschichte über Slice in Python
Die Geschichte der Verwendung von Python reduziert
Eine Geschichte über die Umstellung eines persönlich entwickelten Webdienstes von einem Mietserver auf GCP (Google Cloud Platform)
Eine Geschichte über maschinelles Lernen mit Kyasuket
Eine Geschichte über das Erstellen eines anonymen Kanals mit Slack aus null Wissen
Eine Geschichte über Python Pop und Append
Eine Geschichte über einen Versuch, uwsgi auf einer fehlgeschlagenen EC2-Instanz zu installieren
Flucht aus Pythons virtueller Umgebung ~ Eine Geschichte über das Fangen in einer von mir erstellten virtuellen Umgebung ~
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Eine Geschichte, die von Go's globalen Variablen und ihrem Umfang abhängig ist
Die Geschichte, Artikel-verknüpfte Anzeigen auf Jubatus anzeigen zu wollen
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Geschichte der Verwendung von Resonas Software-Token mit 1Password
Eine Geschichte über die Vorhersage des Wechselkurses mit Deep Learning
Die Geschichte der Migration der gesamten Linux-Festplatte über SSH
Die Geschichte, mit Python eine Hanon-ähnliche Partitur zu machen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Eine Geschichte über Kindergärten, Kindergärten und Kindergärten
Eine Geschichte über das Problem, 3 Millionen ID-Daten in einer Schleife zu verarbeiten
Die Geschichte, wie theano mit TSUBAME 2.0 verwaltet wurde
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Eine Geschichte über einen Linux-Anfänger, der in einer Woche LPIC101 bestanden hat
Eine Geschichte über einen Linux-Anfänger, der Linux auf ein Windows-Tablet bringt
Eine Geschichte über das Stolpern durch PATH nach der Installation von Anaconda