Mit Vorherige habe ich ein Git-Repository auf GCP erstellt und das Scraping von PGM in CloudShell manuell ausgeführt. Dieses Mal werden wir endlich ein automatisches Scraping für GCE durchführen.
(1) Schaffen Sie das Zielmaterial vorerst erfolgreich vor Ort ab. (2) Verknüpfen Sie die Ergebnisse von lokal abgekratzt mit einer Google-Tabelle. (3) cron wird automatisch lokal ausgeführt. (4) Fordern Sie die kostenlose automatische Ausführung auf dem Cloud-Server heraus. (Google Compute Engine) (4) -1 Legen Sie das Test-PGM in die Cloud und führen Sie es normal in CloudShell aus. (4) -2 Fügen Sie das Scraping-PGM zum Repository hinzu und führen Sie es normal in CloudShell aus. (4) -3 Erstellen Sie eine VM-Instanz von ComputeEngine und führen Sie das Scraping automatisch aus. ← Jetzt hier </ font> (5) Fordern Sie die kostenlose automatische Ausführung ohne Server in der Cloud heraus. (Vielleicht Cloud-Funktionen + Cloud Scheduler)
(1) Erstellung einer GCE-Instanz (2) Verbesserte Sicherheit der SSH-Verbindung der GCE-Instanz (3) Installieren Sie git, anyenv, pyenv, python 3.8.5 auf der GCE-Instanz (3) Klonen Sie das Repository in eine GCE-Instanz (4) Crontab-Einstellungen (Test-PGM) (5) Crontab-Einstellungen (Scraping PGM)
Erstellen Sie eine Instanz von Compute Engine. Die kostenlose Stufe der Compute Engine lautet wie folgt: Stellen Sie sie also innerhalb dieses Leistungsbereichs auf.
Compute Engine 1 f1-Mikroinstanz (pro Monat nur US-Region außer North Virginia [us-east4]) 30 GB monatliche Festplatte 5 GB-monatlicher Schnappschuss (einige Regionen) 1 GB Downlink-Netzwerk (nach außen) von Nordamerika in alle Regionen (pro Monat, außer China und Australien)
Zitat: Google Cloud Platform Free Tier
Das freie Tier-Limit für f1-Mikroinstanzen basiert auf der Zeit und nicht auf der Anzahl der Instanzen. Da jeden Monat 720 Stunden kostenlos sind, denke ich, dass es 30 Tage sein wird, wenn es immer gestartet wird. Achten Sie auf Bußgelder im 31. Monat ...?
Das Limit für die kostenlose Stufe f1-micro basiert auf der Zeit und nicht auf der Anzahl der Instanzen. Alle f1-micro-Instanzen können jeden Monat kostenlos verwendet werden, bis Sie die entsprechende Anzahl von Stunden im Monat verbraucht haben. Die Verwendung wird für alle unterstützten Regionen aggregiert.
Die Google Cloud Free Tier wird auch für externe IP-Adressen bereitgestellt, die von VM-Instanzen verwendet werden. Sie können die von Ihnen verwendete externe IP-Adresse ohne zusätzliche Kosten verwenden, bis Sie die Anzahl der Stunden aufgebraucht haben, die der Gesamtzahl der Stunden im Monat entspricht. Die Verwendung ist die Summe aller verwendeten externen IP-Adressen in allen Regionen. Die kostenlose Stufe von Google Cloud für Ihre externe IP-Adresse gilt für alle Instanztypen, nicht nur für f1-micro-Instanzen.
Zitat: [Kostenloses Google Cloud-Programm](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja&_ga=2.249650575.-865936855.1596008883&gac=1.221982442.1601002469.CjwKCAjwh7H7BRBKJ immer frei)
Beschränken Sie die SSH-Verbindungen zur Instanz und ändern Sie den Standard-SSH-Port.
Es gibt zwei Arten von SSH-Verbindungsbeschränkungen für eine Instanz: Zum einen durch Registrieren des SSH-Schlüssels in den Metadaten und zum anderen durch eine Funktion namens OS-Anmeldung. Dieses Mal übernehmen wir SSH-Einschränkungen durch die Anmeldung des Betriebssystems. Ich denke, dies ist eine leicht verständliche Erklärung der Unterschiede. Verwenden Sie die praktische Funktion "OS Login", um SSH-Verbindungen auf Instanzen mit IAM zu beschränken
Darüber hinaus kann die zweistufige Authentifizierung für die Anmeldung am Betriebssystem festgelegt werden. Stellen Sie dies auch ein, um die Sicherheit zu erhöhen. Einrichten der Betriebssystemanmeldung mithilfe eines zweistufigen Authentifizierungsprozesses (https://cloud.google.com/compute/docs/oslogin/setup-two-factor-authentication?hl=ja)
Außerdem wird der Standard-SSH-Port 22 deaktiviert. Es ist notwendig, zusätzliche Parameter beim Anmelden anzugeben, aber wenn es bei 22 bleibt, wird es wahllos angegriffen, so dass es nicht geholfen werden kann. Zeigen Sie in den VM-Instanzdetails die Netzwerkdetails an.
Die Instanzanmeldung nach dem Einstellen lautet wie folgt. Zunächst sollten alle Konten außer den in IAM festgelegten Konten (in meinem Fall das Google-Konto, das standardmäßig der Projektbesitzer ist) abgelehnt werden. Melden Sie sich dann (zum ersten Mal) mit der Passphrase des automatisch erstellten SSH-Schlüssels "google_compute_engine" bei ssh an. Ihnen wird jedoch die Option der zweistufigen Authentifizierung angezeigt. In Ihrem Fall melden Sie sich mit dem Einmalkennwort der Authenticator-App auf Ihrem Smartphone an.
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:~$
Also werde ich von hier aus mit der Installation von Python beginnen, aber es ist nicht einfach. Selbst wenn Sie einfach versuchen, Python einzufügen, besteht eine hohe Wahrscheinlichkeit, dass ein Fehler aufgrund eines unzureichenden Swap-Bereichs auftritt.
Daher möchte ich mich bei Ihnen für die Verwendung der Methode auf der folgenden Website bedanken. Erstellen einer Umgebung, in der Python in der f1-micro-Umgebung von GCE ausgeführt werden kann
Die Bedeutung des Befehls Es gibt andere Aspekte des Unverständnisses, aber da es eine Umgebung ist, in der es völlig in Ordnung ist, ihn zu brechen, werde ich den Befehl auf die gleiche Weise eingeben. Der allgemeine Ablauf ist git, anyenv, pyenv und schließlich 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:~$
Ich benutze git, um anyenv zu installieren, aber da git im Ausgangszustand nicht verwendet werden kann, installiere es.
bash
hoge_gmail_com@instance-7:~$ sudo apt-get install git-all
Das Protokoll fließt wie ein Dämon. Erleben Sie 5 Minuten. Am Ende endet es mit dem folgenden Gefühl.
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:~$
Gehen Sie zurück zu den Schritten auf der Beispielsite und installieren Sie 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:~$
Andere Befehle werden gemäß der Prozedur korrekt ausgeführt.
Installieren Sie außerdem pyenv gemäß dem Verfahren. Was ist die Version von Pyenv? .. ..
bash
hoge_gmail_com@instance-7:~$ pyenv --version
pyenv 1.2.20-7-gdd62b0d1
Installieren Sie schließlich Python 3.8.5 auf pyenv. (Fast kein Protokoll fließt, aber ca. 15 Minuten) Weltweit sicher bis 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:~$
Versuchen wir sofort, das Cloud Source Repositories-Repository zu klonen.
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.
Was ist mit Cloud Shell schief gelaufen? gcloud source repos clone fehlgeschlagen. .. ..
Der Zugriffsbereich der Cloud-API scheint ein Problem zu sein. Beheben Sie ihn daher. Stoppen Sie die VM-Instanz einmal und ändern Sie unter [Details zur VM-Instanz]> [Bearbeiten] die Berechtigung von "Cloud Source Repositories" von "deaktiviert" in "Cloud API Access Scope" unten schreibgeschützt.
Sie sollten jetzt in der Lage sein, mit Cloud Source Repositories von Ihrer VM aus zu arbeiten.
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].
Erfolgreich. Überprüfen Sie den Inhalt des Verzeichnisses 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
Bekannte Gesichter stehen in einer Reihe und es ist ein wunderbarer Erfolg. Überprüfen Sie den Python-Pfad.
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 ~ $
Lassen Sie uns endlich die Crontab bearbeiten. Sie werden zuerst nach der Wahl eines Editors gefragt, wählen Sie also sicher vim.
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: Durch die Installation einer neuen crontab wurde eine neue crontab generiert.
Überprüfen Sie den Inhalt mit crontab -l. Die Vorgehensweise ist die gleiche wie zuvor. Optimieren Sie einfach den Python-Pfad sowie die PGM- und Protokollverzeichnisse.
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 $
Das Ergebnis der Ausführung des Test-PGM vor dem Scraping.
bash
instance-7:10/01/20 13:09:49 ~/gce-cron-test $ cat cron.log
2020/10/01 13:07:02 cron funktioniert!
2020/10/01 13:08:01 cron funktioniert!
2020/10/01 13:09:01 cron funktioniert!
2020/10/01 13:10:01 cron funktioniert!
Es wurde bestätigt, dass Crontab auch mit GCE ordnungsgemäß funktioniert.
Installieren Sie die Bibliothek mit den Anforderungen.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
Es wurde fest installiert.
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
Versuchen Sie, den Befehl direkt auf crontab zu drücken.
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 Fertiges Schaben.
instance-7:10/02/20 12:06:46 ~/gce-cron-test $
Es ist ein Erfolg.
###Crontab-Einstellungen (Scraping PGM)
Bearbeiten Sie dann die 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 $
Es funktionierte gut mit der Einstellung alle 3 Minuten! !! Erfolgreiche automatische Ausführung von Python Scraping in GCE!
bash
instance-7:10/02/20 12:16:38 ~/gce-cron-test $ cat cron.log
2020/10/01 13:04:53 cron funktioniert!
2020/10/01 13:07:02 cron funktioniert!
2020/10/01 13:08:01 cron funktioniert!
2020/10/01 13:09:01 cron funktioniert!
2020/10/01 13:10:01 cron funktioniert!
2020/10/02 12:09:21 Schaben beendet.
2020/10/02 12:12:21 Schaben beendet.
2020/10/02 12:15:21 Schaben beendet.
instance-7:10/02/20 12:16:48 ~/gce-cron-test $
#Zusammenfassung ・ Crontab funktioniert auch mit GCE ・ Scraping funktioniert auch mit der Leistung des freien Frames für GCE-Instanzen -Die GCE VM-Instanz kann nur verwendet werden, wenn git im Ausgangszustand installiert ist. -Für GCE VM-Instanzen können Repository-Vorgänge nur ausgeführt werden, wenn Berechtigungen festgelegt wurden. -Die Installation von Python 3 mit GCE Free Frame kann fehlschlagen, es sei denn, Sie installieren nach dem richtigen Einstellen des Swap-Bereichs
Recommended Posts