Verschiedene Hinweise bei der Verwendung von Terraform
Terraform in 10 Minuten zu verstehen
Der Punkt ist, dass Sie beim Erstellen einer Cloud-Umgebung kein Verfahrenshandbuch erstellen und es manuell erstellen. Es scheint ein Werkzeug zu sein, das versucht, alles im Code zu tun. (Wenn Sie es mit Code verwalten können, ist es möglicherweise einfacher, die Version der Umgebung selbst zu verwalten, oder Sie können möglicherweise die Persönlichkeit beseitigen.)
Ich habe das Scraping-Skript mit Colaboratory getestet Zum schnellen Starten eines Servers, wenn Sie ihn die ganze Nacht ausführen möchten
cloudshell Terraform ist im Standard-Cloudshell-Docker-Image installiert, sodass Sie kein benutzerdefiniertes Image erstellen müssen
Das Docker-Image wird an GCR gesendet
Verwenden Sie Selen und eine schöne Suppe, um den Pandas-Datenrahmen mit Kratzergebnissen zu füllen Docker-Datei, die verwendet werden kann, wenn Sie von Pandas in BigQuery einfügen möchten
Es wird davon ausgegangen, dass sich die GCP-JSON-Schlüsseldatei und die Python-Datei für das Scraping im selben Verzeichnis wie Dockerfile befinden
Dockerfile
FROM python:3
ARG project_dir=/selenium/
ARG credential_json=<Name der JSON-Schlüsseldatei>
ADD requirements.txt $project_dir
ADD $credential_json $project_dir
ADD <Python-Datei verschrotten> $project_dir
ENV GOOGLE_APPLICATION_CREDENTIALS ./$credential_json
WORKDIR $project_dir
RUN apt-get update
RUN apt-get install -y vim less python3-selenium
RUN pip install -r requirements.txt
CMD ["/bin/bash"]
requirements.txt
selenium==3.141.0
requests==2.23.0
pandas==1.0.4
bs4==0.0.1
google-cloud-bigquery==1.21.0
pandas-gbq==0.11.0
lxml==4.5.1
Erstellen Sie eine Datei (tf-Datei), die Ressourcen in einem geeigneten Verzeichnis definiert
main.tf Hauptdatei zum Einstellen verschiedener Dinge im Zusammenhang mit GCE
main.tf
provider "google" {
credentials = "${file("<JSON-Schlüsseldatei>")}"
project = "${var.project_name}"
region = "${var.region}"
}
data "google_compute_network" "default" {
name = "default"
}
resource "google_compute_instance" "apps-gcp-terraform" {
name = "selenium-docker"
machine_type = "n1-standard-1"
zone = "${var.zone}"
boot_disk {
auto_delete = true
initialize_params {
image = "${var.boot_image_name}"
type = "pd-standard"
}
}
metadata = {
gce-container-declaration = "${var.docker_declaration}"
}
network_interface {
network = "default"
access_config {
}
}
service_account {
email = "<Dienstkonto>"
scopes = ["cloud-platform"]
}
}
variables.tf Datei, die Parameter verarbeitet
Verwenden Sie beim Erstellen einer GCE-Instanz aus einem Docker-Image ein Boot-Image, das als containeroptimiertes Image bezeichnet wird. Sie können die aktuelle containeroptimierte Image-Version mit dem folgenden Befehl überprüfen
gcloud compute images list --project cos-cloud --no-standard-images
variables.tf
variable "project_name" {
type = string
default = "<Projekt-ID>"
}
variable "region" {
type = string
default = "us-central1"
}
variable "zone" {
type = string
default = "us-central1-a"
}
variable "boot_image_name" {
type = string
default = "projects/cos-cloud/global/images/cos-stable-81-12871-119-0"
}
variable "docker_declaration" {
type = string
default = "spec:\n containers:\n - name: selenium-docker\n image: '<Docker-Bild>'\n stdin: false\n tty: true\n restartPolicy: Always\n"
}
Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem sich die tf-Datei befindet
Wenn eine solche Meldung erscheint Terraform has initialized, but configuration upgrades may be needed.
terraform 0.12upgrade ↑ Es scheint, dass es die tf-Datei auf die neueste Version gut aktualisieren wird
terraform plan Überprüfen Sie, ob die tf-Datei korrekt ist Wenn ein Fehler auftritt, beheben Sie die tf-Datei
terraform apply Bis zu gcp Sie werden gefragt, ob Sie es unterwegs ausführen möchten. Geben Sie also yes ein
Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve.
Enter a value: yes
google_compute_instance.apps-gcp-terraform: Creating... google_compute_instance.apps-gcp-terraform: Still creating... [10s elapsed] google_compute_instance.apps-gcp-terraform: Creation complete after 13s
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Wenn es wie ↑ aussieht, ist es OK
Geben Sie dann die erstellte GCE-Instanz ein
docker container ls
Dann läuft der Container also
docker container exec -it Container ID/bin/bash
Geben Sie den Container mit Befehlen wie
Nohup Python Scraping Python-Datei> log.txt 2>&1 &
Lassen Sie das Programm laufen
terrafrom destroy Do you really want to destroy all resources? Terraform will destroy all your managed infrastructure, as shown above. There is no undo. Only 'yes' will be accepted to confirm.
Enter a value:yes
Wird von gelöscht
Error: Cannot get auth token: Metadata server responded with status 404 Wann wann Es scheint, dass Sie keine Token vom Metadatenserver von GCE erhalten können ...
Wenn Sie also den folgenden Befehl in der Instanz ausführen,
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
-H "Metadata-Flavor: Google"
Die Meldung ↓ wird angezeigt Service account not enabled on this instance
Als ich den Dienstkonto-Anhang zu main.tf hinzufügte, war es OK ↓
main.Dieser Teil von tf
service_account {
email = "<Dienstkonto>"
scopes = ["cloud-platform"]
}
Terraform-Dokumentation Instanz erstellen und konfigurieren (https://cloud.google.com/container-optimized-os/docs/how-to/create-configure-instance?hl=ja#gcloud_1) Variablen in Terraform verwenden GCP Infrastructure Construction Automation Road Teil 1 ~ Terraform-Einführung ~ Stellen Sie mit Terraform eine Web-App für Google Compute Engine bereit. Terraform 0.12 wurde veröffentlicht, daher habe ich es aktualisiert [Versuchen Sie, eine GCP-Umgebung mit Terraform zu erstellen](https://techblog.gmo-ap.jp/2017/11/16/terraform%E3%81%A7gcp%E7%92%B0%E5%A2%83% E. scopes param for service_account of google_compute_instance should be optional