Diverses remarques lors de l'utilisation de terraform
Terraform à comprendre en 10 minutes
Le fait est que lorsque vous créez un environnement cloud, vous ne créez pas de manuel de procédure et ne le créez pas manuellement. Cela semble être un outil qui essaie de tout faire dans le code. (Si vous pouvez le gérer avec du code, il peut être plus facile de gérer la version de l'environnement lui-même, ou vous pourrez peut-être éliminer la personnalité.)
J'ai testé le script de scraping avec Colaboratory Pour lancer rapidement un serveur lorsque vous souhaitez l'exécuter toute la nuit
cloudshell Terraform est installé dans l'image docker cloudshell par défaut, vous n'avez donc pas besoin de créer une image personnalisée
L'image Docker est poussée vers GCR
Utilisez du sélénium et de la belle soupe pour remplir la base de données pandas avec des résultats de grattage Dockerfile qui peut être utilisé lorsque vous souhaitez insérer des pandas dans BigQuery
Le fichier de clé GCP JSON et le fichier python pour le scraping sont supposés se trouver dans le même répertoire que Dockerfile
Dockerfile
FROM python:3
ARG project_dir=/selenium/
ARG credential_json=<Nom du fichier de clé JSON>
ADD requirements.txt $project_dir
ADD $credential_json $project_dir
ADD <Scraping du fichier python> $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
Créez un fichier (fichier tf) qui définit les ressources dans un répertoire approprié
main.tf Fichier principal pour définir diverses choses liées à GCE
main.tf
provider "google" {
credentials = "${file("<Fichier de clé JSON>")}"
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 = "<Compte de service>"
scopes = ["cloud-platform"]
}
}
variables.tf Fichier qui gère les paramètres
Lors de la création d'une instance GCE à partir d'une image Docker, utilisez une image de démarrage appelée image optimisée pour le conteneur. Vous pouvez vérifier la version actuelle de l'image optimisée pour le conteneur avec la commande suivante
gcloud compute images list --project cos-cloud --no-standard-images
variables.tf
variable "project_name" {
type = string
default = "<ID du projet>"
}
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: '<image de docker>'\n stdin: false\n tty: true\n restartPolicy: Always\n"
}
Exécutez la commande suivante dans le répertoire où se trouve le fichier tf
Lorsqu'un tel message apparaît Terraform has initialized, but configuration upgrades may be needed.
terraform 0.12upgrade ↑ Il semble que cela mettra à jour le fichier tf avec la dernière version bien
terraform plan Vérifiez si le fichier tf est correct Si une erreur se produit, corrigez le fichier tf
terraform apply Jusqu'à gcp Il vous sera demandé si vous souhaitez l'exécuter en cours de route, alors entrez oui
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.
Si ça ressemble à ↑, c'est OK
Entrez ensuite l'instance GCE créée
docker container ls
Ensuite, le conteneur est en cours d'exécution, donc
docker container exec -it ID du conteneur/bin/bash
Entrez dans le conteneur avec des commandes telles que
nohup python grattant le fichier python> log.txt 2>&1 &
Laisser le programme s'exécuter
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
Sera supprimé par
Error: Cannot get auth token: Metadata server responded with status 404 Quand quand Il semble que vous ne puissiez pas obtenir de jetons du serveur de métadonnées de GCE ...
Donc, si vous exécutez la commande suivante dans l'instance,
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
-H "Metadata-Flavor: Google"
↓ le message apparaît Service account not enabled on this instance
Donc, quand j'ai ajouté la pièce jointe du compte de service à main.tf, c'était OK ↓
main.Cette partie de tf
service_account {
email = "<Compte de service>"
scopes = ["cloud-platform"]
}
documentation terraform Créer et configurer une instance (https://cloud.google.com/container-optimized-os/docs/how-to/create-configure-instance?hl=ja#gcloud_1) Utiliser des variables dans Terraform GCP Infrastructure Construction Automation Road part1 ~ Terraform Introduction ~ Déployez une application Web sur Google Compute Engine avec Terraform. Terraform 0.12 est sorti, donc je l'ai mis à jour [Essayez de créer un environnement GCP avec Terraform](https://techblog.gmo-ap.jp/2017/11/16/terraform%E3%81%A7gcp%E7%92%B0%E5%A2%83% E3% 82% 92% E6% A7% 8B% E7% AF% 89% E3% 81% 97% E3% 81% A6% E3% 81% BF% E3% 82% 8B /) scopes param for service_account of google_compute_instance should be optional
Recommended Posts