Cet article est la suite de Une histoire sur un débutant GCP construisant un serveur Micra avec GCE. Si vous ne l'avez pas vu la dernière fois, j'apprécierais que vous puissiez le voir à partir de là.
Au fait, depuis que j'ai construit un serveur Micra avec GCP la dernière fois, Cette fois, j'aimerais pouvoir l'exploiter à partir de la discorde.
Y a-t-il un mérite à exploiter l'instance à partir de la discorde? Je pense, Demandez à quelqu'un qui joue Micra avec vous de rejoindre la chaîne Discord Puisqu'il peut être démarré et arrêté au nom de l'administrateur, la charge de travail de l'administrateur peut être réduite.
--Création d'un serveur pour bot --Créer un compte de service pour le contrôle d'instance --Créer Discord Bot
Le serveur utilisé pour le bot cette fois est Google Compute Engine (GCE). GCE dispose de ressources Always Free qui sont totalement gratuites et cette fois, nous les utiliserons. Comme il est toujours gratuit, vous ne serez pas facturé même s'il est toujours en cours d'exécution, et cette fois, il n'y a aucune utilisation autre que le bot, donc cette ressource est suffisante pour le fonctionnement.
Pour plus d'informations sur Always Free de GCE, veuillez consulter le document officiel ci-dessous.
L'instance a été créée avec de tels paramètres. Les paramètres détaillés seront omis cette fois.
article | Contenu |
---|---|
Nom de l'instance | botserver |
Région | us-west1 |
zone | us-west1-a |
Type de machine | f1-micro(vCPUx1,Mémoire 0.6GB) |
Disque de démarrage | CentOS 7 |
adresse IP | Créer une adresse IP statique |
Vous pouvez créer un compte de service dans GCP avec uniquement certaines autorisations pour accéder aux projets et aux ressources. Pour plus d'informations sur les comptes de service, veuillez consulter la documentation officielle ci-dessous.
Cette fois, donnez à ce compte de service l'autorisation de démarrer et d'arrêter l'instance (serveur Micra). Tout d'abord, créez un "rôle" à partir de "IAM et gestion".
Sélectionnez IAM & Administration-> Rôles-> Créer un rôle et configurez comme suit:
article | Contenu |
---|---|
Titre | Nom du titre arbitraire |
Autorité | compute.instances.get compute.instances.start compute.instances.stop |
** [Description de l'autorité] **
article | La description |
---|---|
compute.instances.get | Autorisation de se connecter à une instance Compute Engine |
compute.instances.start | Autorisation de lancer une instance Compute Engine |
compute.instances.stop | Autorisation d'arrêter une instance Compute Engine |
À ce stade, la création du «rôle» est terminée. Créez ensuite un "compte de service" à partir de "IAM et administration".
Sélectionnez "IAM et administration" -> "Compte de service" -> "Créer un compte de service" et définissez comme suit.
article | Contenu |
---|---|
Nom du compte de service | Tout nom de compte de service |
ID de compte de service | Tout identifiant de compte de service@{ProjectID}.iam.gserviceaccount.com |
Description du compte de service | Écrivez une description pour votre propre compréhension |
Sélection de rôle | Le "rôle" créé précédemment |
Créer une clé | Type JSON *Cliquez sur Créer pour télécharger le fichier json. |
Veuillez ne pas perdre le fichier json que vous avez téléchargé lors de la création de la clé, car vous en aurez besoin plus tard.
Tout d'abord, créez un compte développeur pour votre bot sur le Discord Developer Portal.
Je me suis référé aux articles suivants pour divers paramètres depuis la création du compte développeur.
Guide d'initialisation du compte Discord Bot pour les développeurs
Connectez-vous à l'instance créée en 1. et définissez divers paramètres.
Tout d'abord, installez les packages requis.
#CentOS7 n'a pas installé python3 par défaut, donc installez python3.
$ yum install python3
# discord.Installer py
$ python3 -m pip install -U discord.py
Ensuite, authentifiez le compte de service que vous avez créé précédemment.
#Téléchargez le fichier de clé (fichier json) téléchargé lors de la création du compte de service sur le serveur de bot et authentifiez-vous avec la commande suivante.
$ gcloud auth activate-service-account --key-file "./<projectName>-xxxxxx.json"
#Vérifiez si le compte de service est actif.*OK si votre compte est actif
$ gcloud auth list
#Exemple d'exécution ci-dessous
---------------------------------------------------------------
ACTIVE ACCOUNT
* <Nom du compte de service>@<Nom du projet>.iam.gserviceaccount.com
---------------------------------------------------------------
Créer un programme de bot
mineserver-op.py
#Discord installé.Charger py
import discord
import os
import time
#Jeton d'accès pour votre bot
TOKEN = '<Jeton d'accès>'
client = discord.Client()
#Traitement qui fonctionne au démarrage
@client.event
async def on_ready():
#Une notification de connexion sera affichée dans le terminal après le démarrage
print('Yaho! Je me suis connecté!')
print('/Vous pouvez vérifier la commande avec de l'aide')
#Traitement qui fonctionne lors de la réception d'un message
@client.event
async def on_message(message):
#Ne pas traiter si l'expéditeur du message est Bot
if message.author.bot:
return
#Démarrez le serveur
if message.content == '/start':
await message.channel.send('Server starting up...')
await message.channel.send('* N'exécutez pas d'autres commandes tant que «démarrage» n'est pas affiché. *')
os.system('gcloud --account=<Nom du compte de service>@<Nom du projet>.iam.gserviceaccount.com compute instances start <Nom de l'instance> --project <Nom du projet> --zone <Nom de zone>')
await message.channel.send('up .minecraft_server starting...')
time.sleep(60)
await message.channel.send('start up')
#Arrêtez le serveur
if message.content == '/stop':
await message.channel.send('Server is stopping')
await message.channel.send('* N'exécutez pas d'autres commandes tant que "down" n'est pas affiché. *')
os.system('gcloud --account=<Nom du compte de service>@<Nom du projet>.iam.gserviceaccount.com compute instances stop <Nom de l'instance> --project <Nom du projet> --zone <Nom de zone>')
await message.channel.send('down')
#Voir aide
if message.content == '/help':
await message.channel.send('/start :Démarrez le serveur')
await message.channel.send('/stop :Arrêtez le serveur')
client.run(TOKEN)
Exécution du programme bot créé
#Assurez-vous de conserver le journal d'exécution et d'exécuter
$ nohup python3 mineserver-op.py > ./out.log &
À ce stade, vous pouvez faire fonctionner l'instance à partir de discord. Vérifions si vous pouvez réellement utiliser l'instance en tapant une commande de discord.
Cette fois, nous n'avons implémenté que les fonctions minimales de démarrage et d'arrêt de l'instance, Il est possible de mettre en œuvre diverses fonctions en donnant l'autorité souhaitée au compte de service.
En aparté, j'ai joué un peu Micra dans ce test de fonctionnement. Depuis que je jouais, il y a eu beaucoup de nouveaux éléments et je voulais refaire Micra (rires).
Recommended Posts