Par précédent, j'ai créé un dépôt git sur GCP et exécuté manuellement le scraping PGM sur CloudShell. Cette fois, nous allons enfin effectuer un scraping automatique sur GCE.
(1) Réussir à gratter le contenu cible localement pour le moment. (2) Associez les résultats du scraping local à une feuille de calcul Google. (3) cron est automatiquement exécuté localement. (4) Défiez l'exécution automatique gratuite sur le serveur cloud. (Google Compute Engine) (4) -1 Placez la PGM de test sur le cloud et exécutez-la normalement sur CloudShell. (4) -2 Ajoutez la PGM de scraping au référentiel et exécutez-la normalement sur CloudShell. (4) -3 Créez une instance de VM de ComputeEngine et exécutez le scraping automatiquement. ← Maintenant ici </ font> (5) Défiez l'exécution automatique gratuite sans serveur sur le cloud. (Peut-être Cloud Functions + Cloud Scheduler)
(1) Création d'instance GCE (2) Sécurité renforcée de la connexion SSH de l'instance GCE (3) Installez git, anyenv, pyenv, python 3.8.5 sur l'instance GCE (3) Cloner le référentiel vers une instance GCE (4) paramètres crontab (test PGM) (5) paramètres crontab (grattage PGM)
Créez une instance de Compute Engine. Le niveau gratuit de Compute Engine est le suivant, alors faites-le dans cette plage de performances.
Compute Engine 1 instance f1-micro (par mois, région des États-Unis uniquement sauf Virginie du Nord [us-east4]) Disque dur de 30 Go par mois Instantané mensuel de 5 Go (certaines régions) Réseau descendant (sortant) de 1 Go de l'Amérique du Nord vers toutes les régions (par mois, à l'exception de la Chine et de l'Australie)
Citation: Version gratuite de Google Cloud Platform
La limite du niveau gratuit de l'instance f1-micro est basée sur le temps et non sur le nombre d'instances. Puisque 720 heures sont gratuites chaque mois, je pense que ce sera 30 jours si elle est toujours lancée. Attention aux amendes au 31ème mois ...?
La limite d'instance f1-micro de l'offre gratuite est basée sur le temps et non sur le nombre d'instances. Toutes les instances f1-micro pourront être utilisées gratuitement chaque mois jusqu'à ce que vous ayez utilisé le nombre d'heures équivalent dans le mois. L'utilisation est agrégée pour toutes les régions prises en charge.
Le niveau gratuit de Google Cloud est également fourni pour les adresses IP externes utilisées par les instances de VM. Vous pouvez utiliser l'adresse IP externe que vous utilisez sans frais supplémentaires jusqu'à ce que vous ayez utilisé le nombre d'heures équivalent au nombre total d'heures dans le mois. L'utilisation est la somme de toutes les adresses IP externes utilisées dans toutes les régions. Le niveau gratuit de Google Cloud pour votre adresse IP externe s'applique à tous les types d'instances, pas seulement aux instances f1-micro.
Citation: [Programme gratuit Google Cloud](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja&_ga=2.249650575.-865936855.1596008883&_gac=1.221982442.1601002469.CjwKCAjwh7H7BRBJBEiwAPXjadi Toujours libre)
Restreignez les connexions SSH à l'instance et modifiez le port SSH par défaut.
Il existe deux types de restrictions de connexion SSH pour une instance: l'une consiste à enregistrer la clé SSH dans les métadonnées et l'autre à utiliser une fonction appelée connexion au système d'exploitation. Cette fois, nous adopterons les restrictions SSH par connexion au système d'exploitation. Je pense que c'est une explication facile à comprendre des différences. Utilisez la fonction pratique "Connexion au système d'exploitation" pour restreindre les connexions SSH aux instances avec IAM
De plus, une authentification en deux étapes peut être définie pour la connexion au système d'exploitation, alors définissez-la également pour améliorer la sécurité. Configuration de la connexion au système d'exploitation à l'aide d'un processus d'authentification en deux étapes (https://cloud.google.com/compute/docs/oslogin/setup-two-factor-authentication?hl=ja)
Il désactive également le port SSH par défaut 22. Il est nécessaire de spécifier des paramètres supplémentaires lors de la connexion, mais s'il reste à 22, il sera attaqué sans discernement, donc il ne peut pas être aidé. À partir des détails de l'instance de VM, affichez les détails du réseau,
La connexion de l'instance après la configuration sera la suivante. En premier lieu, tous les comptes autres que ceux définis dans IAM (dans mon cas, le compte Google qui est le propriétaire du projet par défaut) doivent être rejetés. Ensuite, (pour la première fois) connectez-vous à ssh avec la phrase de passe de la clé ssh "google_compute_engine" créée automatiquement, mais vous verrez l'option d'authentification en deux étapes, et dans votre cas, connectez-vous avec le mot de passe à usage unique de l'application Authenticator sur votre smartphone.
bash
hoge@cloudshell:~ (my-hoge-app)$ gcloud compute --project "my-hoge-app" ssh --zone "us-central1-a" "instance-7" --ssh-flag="-p 50050"
Enter passphrase for key '/home/hoge/.ssh/google_compute_engine':
Please choose from the available authentication methods:
1: Google phone prompt
2: Security code from Google Authenticator application
3: Voice or text message verification code
Enter the number for the authentication method to use: 2
Enter your one-time password: xxxxxx
Linux instance-7 4.19.0-10-cloud-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep 29 11:38:31 2020 from 35.189.187.53
hoge_gmail_com@instance-7:~$
Donc, je vais commencer à installer Python à partir d'ici, mais ce n'est pas simple. Même si vous essayez simplement d'insérer Python, il y a de fortes chances qu'une erreur se produise en raison d'une zone de swap insuffisante.
Par conséquent, je tiens à vous remercier d'utiliser la méthode sur le site suivant. Création d'un environnement dans lequel Python peut s'exécuter dans l'environnement f1-micro de GCE
La signification de la commande Il y a d'autres aspects du manque de compréhension, mais comme c'est un environnement où il est tout à fait normal de la casser, je vais entrer la commande de la même manière. Le flux général est git, anyenv, pyenv et enfin Python 3.8.5.
bash
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ sudo dd if=/dev/zero of=/var/swapfile bs=1M count=1200
1200+0 records in
1200+0 records out
1258291200 bytes (1.3 GB, 1.2 GiB) copied, 11.2339 s, 112 MB/s
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ sudo chmod 600 /var/swapfile
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ sudo mkswap -L swap /var/swapfile
Setting up swapspace version 1, size = 1.2 GiB (1258287104 bytes)
LABEL=swap, UUID=80b8b0ee-3779-4f2d-b9cb-00cccd3f401f
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ sudo swapon /var/swapfile
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ cat /proc/swaps
Filename Type Size Used Priority
/var/swapfile file 1228796 0 -2
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ echo '/var/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
/var/swapfile swap swap defaults 0 0
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$
J'utilise git pour installer anyenv, mais comme git ne peut pas être utilisé dans l'état initial, installez-le.
bash
hoge_gmail_com@instance-7:~$ sudo apt-get install git-all
Le journal coule comme un démon. Expérience de 5 minutes. À la fin, cela se termine par le sentiment suivant.
bash
Install emacsen-common for emacs
emacsen-common: Handling install of emacsen flavor emacs
Install git for emacs
Setting up git-el (1:2.20.1-2+deb10u3) ...
Install git for emacs
Install git for emacs
Setting up emacs (1:26.1+1-3.2+deb10u1) ...
Setting up git-all (1:2.20.1-2+deb10u3) ...
Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
Processing triggers for libc-bin (2.28-10) ...
hoge_gmail_com@instance-7:~$
Revenez aux étapes du site d'exemple et installez anyenv.
bash
hoge_gmail_com@instance-7:~$ git clone https://github.com/anyenv/anyenv ~/.anyenv
Cloning into '/home/hoge_gmail_com/.anyenv'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 406 (delta 3), reused 4 (delta 2), pack-reused 392
Receiving objects: 100% (406/406), 70.99 KiB | 3.09 MiB/s, done.
Resolving deltas: 100% (179/179), done.
hoge_gmail_com@instance-7:~$
Les autres commandes sont exécutées fidèlement selon la procédure.
De plus, installez pyenv selon la procédure. Quelle est la version de pyenv? .. ..
bash
hoge_gmail_com@instance-7:~$ pyenv --version
pyenv 1.2.20-7-gdd62b0d1
Enfin, installez Python 3.8.5 sur pyenv. (Presque aucun flux de journal, mais environ 15 minutes) Globalement, en toute sécurité à 3.8.5.
bash
hoge_gmail_com@instance-7:~$ pyenv install 3.8.5
Downloading Python-3.8.5.tar.xz...
-> https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
Installing Python-3.8.5...
Installed Python-3.8.5 to /home/hoge_gmail_com/.anyenv/envs/pyenv/versions/3.8.5
hoge_gmail_com@instance-7:~$
hoge_gmail_com@instance-7:~$ pyenv global 3.8.5
hoge_gmail_com@instance-7:~$ python --version
Python 3.8.5
hoge_gmail_com@instance-7:~$
Essayons de cloner immédiatement le référentiel Cloud Source Repositories.
bash
instance-7:10/01/20 12:24:54 ~ $ gcloud source repos clone gce-cron-test
ERROR: (gcloud.source.repos.clone) PERMISSION_DENIED: Request had insufficient authentication scopes.
If you are in a compute engine VM, it is likely that the specified scopes during VM creation are not enough to run this command.
See https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam for more information of access scopes.
See https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes for how to update access scopes of the VM.
Qu'est-ce qui n'a pas fonctionné avec Cloud Shell échec du clonage du dépôt source gcloud. .. ..
La portée d'accès à l'API Cloud semble être un problème, alors corrigez-le. Arrêtez l'instance de VM une fois et, dans [Détails de l'instance de VM]> [Modifier], modifiez l'autorisation de "Cloud Source Repositories" de désactivée en lecture seule dans "Cloud API Access Scope" en bas.
Vous devriez désormais pouvoir travailler avec Cloud Source Repositories à partir de votre VM.
bash
instance-7:10/01/20 12:51:36 ~ $
instance-7:10/01/20 12:51:36 ~ $ gcloud source repos clone gce-cron-test
Cloning into '/home/hogehoge_gmail_com/gce-cron-test'...
remote: Total 11 (delta 1), reused 11 (delta 1)
Unpacking objects: 100% (11/11), done.
Project [my-gce-app] repository [gce-cron-test] was cloned to [/home/hogehoge_gmail_com/gce-cron-test].
Réussi. Vérifiez le contenu du répertoire gce-cron-test.
bash
nstance-7:10/01/20 12:53:02 ~ $
instance-7:10/01/20 12:53:20 ~ $
instance-7:10/01/20 12:53:20 ~ $ cd gce-cron-test
instance-7:10/01/20 12:53:42 ~/gce-cron-test $ ls -la
total 36
drwxr-xr-x 3 hogehoge_gmail_com hogehoge_gmail_com 4096 Oct 1 12:52 .
drwxr-xr-x 6 hogehoge_gmail_com hogehoge_gmail_com 4096 Oct 1 12:52 ..
-rw-r--r-- 1 hogehoge_gmail_com hogehoge_gmail_com 6148 Oct 1 12:52 .DS_Store
drwxr-xr-x 8 hogehoge_gmail_com hogehoge_gmail_com 4096 Oct 1 12:52 .git
-rw-r--r-- 1 hogehoge_gmail_com hogehoge_gmail_com 146 Oct 1 12:52 cron-test.py
-rw-r--r-- 1 hogehoge_gmail_com hogehoge_gmail_com 2352 Oct 1 12:52 my-web-scraping-app-6293fbee8c53.json
-rw-r--r-- 1 hogehoge_gmail_com hogehoge_gmail_com 2763 Oct 1 12:52 requests-test2.py
-rw-r--r-- 1 hogehoge_gmail_com hogehoge_gmail_com 334 Oct 1 12:52 requirements.txt
instance-7:10/01/20 12:53:47 ~/gce-cron-test $hogehoge
Des visages familiers sont alignés et c'est une belle réussite. Vérifiez le chemin python.
bash
instance-7:10/01/20 12:53:56 ~/gce-cron-test $
instance-7:10/01/20 12:53:56 ~/gce-cron-test $
instance-7:10/01/20 12:58:06 ~ $
instance-7:10/01/20 12:58:06 ~ $ which python
/home/hogehoge_gmail_com/.anyenv/envs/pyenv/shims/python
instance-7:10/01/20 12:59:10 ~ $
Modifions enfin le crontab. On vous demandera d'abord le choix d'un éditeur, alors choisissez vim en toute sécurité.
bash
instance-7:10/01/20 13:05:10 ~/gce-cron-test $
instance-7:10/01/20 13:05:36 ~/gce-cron-test $
instance-7:10/01/20 13:05:36 ~/gce-cron-test $ crontab -e
no crontab for hogehoge_gmail_com - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /usr/bin/emacs
Choose 1-4 [1]: 2
crontab: installing new crontab
instance-7:10/01/20 13:06:47 ~/gce-cron-test $
crontab: l'installation d'un nouveau crontab a généré un nouveau crontab.
Vérifiez le contenu avec crontab -l. La procédure est la même que précédemment, il suffit de modifier le chemin python et les répertoires PGM et log.
bash
instance-7:10/01/20 13:06:52 ~/gce-cron-test $ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
* * * * * cd /home/hogehoge_gmail_com/gce-cron-test; /home/hogehoge_gmail_com/.anyenv/envs/pyenv/shims/python /home/hogehoge_gmail_com/gce-cron-test/cron-test.py >> /home/hogehoge_gmail_com/gce-cron-test/cron.log 2>&1
instance-7:10/01/20 13:06:58 ~/gce-cron-test $
Résultat de l'exécution de la PGM de test avant le grattage.
bash
instance-7:10/01/20 13:09:49 ~/gce-cron-test $ cat cron.log
2020/10/01 13:07:02 cron fonctionne!
2020/10/01 13:08:01 cron fonctionne!
2020/10/01 13:09:01 cron fonctionne!
2020/10/01 13:10:01 cron fonctionne!
Il a été confirmé que crontab fonctionne correctement même avec GCE.
Installez la bibliothèque à l'aide de requirements.txt.
bash
instance-7:10/02/20 11:54:02 ~/gce-cron-test $ /home/hogehoge_gmail_com/.anyenv/envs/pyenv/versions/3.8.5/bin/python3.8 -m pip install -r requirements.txt
Il a été installé fermement.
bash
instance-7:10/02/20 11:57:34 ~/gce-cron-test $ pip list
Package Version
-------------------- ---------
beautifulsoup4 4.9.1
cachetools 4.1.1
certifi 2020.6.20
chardet 3.0.4
google-auth 1.21.0
google-auth-oauthlib 0.4.1
gspread 3.6.0
httplib2 0.18.1
idna 2.10
oauth2client 4.1.3
oauthlib 3.1.0
pip 20.2.3
pyasn1 0.4.8
pyasn1-modules 0.2.8
requests 2.24.0
requests-oauthlib 1.3.0
rsa 4.6
setuptools 47.1.0
six 1.15.0
soupsieve 2.0.1
#scope = ['https://spreadsheets.google.com/feeds',
urllib3 1.25.10
Essayez de frapper directement la commande sur crontab.
bash
iinstance-7:10/02/20 11:57:40 ~/gce-cron-test $
instance-7:10/02/20 12:06:15 ~/gce-cron-test $ cd /home/hogehoge_gmail_com/gce-cron-test; /home/hogehoge_gmail_com/.anyenv/envs/pyenv/shims/python /home/hogehoge_gmail
_com/gce-cron-test/requests-test2.py
2020/10/02 12:06:44 Grattage terminé.
instance-7:10/02/20 12:06:46 ~/gce-cron-test $
C'est un succès.
###paramètres crontab (grattage PGM)
Puis modifiez le fichier crontab.
#### **`bash`**
```bash
instance-7:10/02/20 12:06:57 ~/gce-cron-test $
instance-7:10/02/20 12:06:59 ~/gce-cron-test $ crontab -e
crontab: installing new crontab
instance-7:10/02/20 12:08:52 ~/gce-cron-test $
instance-7:10/02/20 12:08:54 ~/gce-cron-test $
instance-7:10/02/20 12:08:54 ~/gce-cron-test $ crontab -l
Edit this file to introduce tasks to be run by cron.
Each task to run has to be defined through a single line
indicating with different fields when the task will be run
and what command to run for the task
To define the time you can provide concrete values for
minute (m), hour (h), day of month (dom), month (mon),
and day of week (dow) or use '*' in these fields (for 'any').
Notice that tasks will be started based on the cron's system
daemon's notion of time and timezones.
Output of the crontab jobs (including errors) is sent through
email to the user the crontab file belongs to (unless redirected).
For example, you can run a backup of all your user accounts
at 5 a.m every week with:
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
For more information see the manual pages of crontab(5) and cron(8)
m h dom mon dow command
* * * * * cd /home/hogehoge_gmail_com/gce-cron-test; /home/hogehoge_gmail_com/.anyenv/envs/pyenv/shims/python /home/hogehoge_gmail_com/gce-cron-test/cron-test.py >> /home/hogehoge_gmail_com/gce-cron-test/cron.log 2>&1
*/3 * * * * cd /home/hogehoge_gmail_com/gce-cron-test; /home/hogehoge_gmail_com/.anyenv/envs/pyenv/shims/python /home/hogehoge_gmail_com/gce-cron-test/requests-test2.py >> /home/hogehoge_gmail_com/gce-cron-test/cron.log 2>&1
instance-7:10/02/20 12:11:42 ~/gce-cron-test $
Cela fonctionnait bien avec le réglage toutes les 3 minutes! !! Exécution automatique réussie du scraping python dans GCE!
bash
instance-7:10/02/20 12:16:38 ~/gce-cron-test $ cat cron.log
2020/10/01 13:04:53 cron fonctionne!
2020/10/01 13:07:02 cron fonctionne!
2020/10/01 13:08:01 cron fonctionne!
2020/10/01 13:09:01 cron fonctionne!
2020/10/01 13:10:01 cron fonctionne!
2020/10/02 12:09:21 Grattage terminé.
2020/10/02 12:12:21 Grattage terminé.
2020/10/02 12:15:21 Grattage terminé.
instance-7:10/02/20 12:16:48 ~/gce-cron-test $
#Sommaire ・ Crontab fonctionne même avec GCE ・ Le grattage fonctionne même avec les performances du cadre libre pour les instances GCE -L'instance de VM GCE ne peut pas être utilisée à moins que git ne soit installé dans l'état initial. -Pour les instances de VM GCE, les opérations de référentiel ne peuvent être effectuées que si des autorisations sont définies. -L'installation de Python 3 avec le cadre gratuit GCE peut échouer à moins que vous n'installiez après avoir correctement défini la zone d'échange
Recommended Posts