G-gen ã®ææã§ããè€æ°ã® Google Cloud ãããžã§ã¯ãã® Compute Engine VM ã®æ
å ±äžèЧãååŸãã bash ã¹ã¯ãªããã玹ä»ããŸãã ã¯ããã« æŠèŠ åææ¡ä»¶ å
責äºé
ãœãŒã¹ã³ãŒã åºåäŸ å®è¡æ¹æ³ å
¥åãã¡ã€ã«ã®æºå ã¹ã¯ãªããã®å®è¡ å¿çš ã¯ããã« æŠèŠ åœèšäºã§ç޹ä»ããã®ã¯ãè€æ°ã® Google Cloud ãããžã§ã¯ãã«ååšãã Compute Engine VM ã®äžèЧã CSV ãã¡ã€ã«ã«åºåããããã®ã¹ã¯ãªããã§ãã åœã¹ã¯ãªããã䜿ãããšã§ãGoogle Cloud çµç¹é
äžã®å
š VM ãäžèЧã«ããããšãã§ããŸããçµç¹å
ã§ã® VM ã®æ£åžãçã«ãå©çšãã ããã åææ¡ä»¶ åœ bash ã¹ã¯ãªããã¯ã Debian GNU/Linux 12 (bookworm) äžã§éçºãããåäœç¢ºèªãããŠããŸãã ãŸãã以äžã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããŠããããšãåæã§ããæ¬åŒ§å
ã¯éçºæã®ããŒãžã§ã³ã§ãã gcloudïŒ Google Cloud SDK 488.0.0 ïŒ jq ïŒ jq-1.6 ïŒ ãŸãå®è¡æã¯ãgcloud ã³ãã³ãã®èªèšŒæ
å ±ã«ãVM ã®äžèŠ§è¡šç€ºæš©éãæã€ Google ã¢ã«ãŠã³ããèšå®ãããŠããå¿
èŠããããŸãã åè : ãŠãŒã¶ãŒ ã¢ã«ãŠã³ãã䜿çšããŠèªå¯ãã åè : ãµãŒãã¹ ã¢ã«ãŠã³ãã䜿çšããŠæ¿èªãã åè : Compute Engine IAM ã®ããŒã«ãšæš©é ãªããçµç¹å
ã®å
šãããžã§ã¯ããäžèЧååŸããæ¹æ³ã«ã€ããŠã¯ã以äžãåç
§ããŠãã ããã blog.g-gen.co.jp å
責äºé
åœèšäºã§ç޹ä»ããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã¯ããèªèº«ã®è²¬ä»»ã®ããšã䜿çšãåŒçšãæ¹å€ãåé
åžããŠæ§ããŸããã ãã ããåãœãŒã¹ã³ãŒããåå ã§çºçããäžå©çããã©ãã«ã«ã€ããŠã¯ãåœç€Ÿã¯äžåã®è²¬ä»»ãè² ããŸããã ãœãŒã¹ã³ãŒã åœãœãŒã¹ã³ãŒãã¯ãåè¿°ã® å
責äºé
ããçè§£ã®ããããå©çšãã ããã list_all_vms.sh #!/bin/bash # åŒæ°ãã§ã㯠if [ $# -ne 1 ]; then echo " ERROR : Please specify project list file. " exit 1 fi # 倿°å®çŸ© input_file = $1 datetime = `date " +%Y%m%d%H%M " ` output_file_name = " all_vms_ ${datetime} .csv " # ãããžã§ã¯ãããšã«ã«ãŒããå®è¡ while read project; do ## VM æ
å ±ååŸåŠç result = `gcloud compute instances list --project = ${project} --format = json --quiet` ## ãšã©ãŒã®å Žåã¯ã¹ããã if [ $? -ne 0 ]; then continue fi ## ãã¡ã€ã«ã«èšé² IFS =$' \n '; for vm in ` echo ${result} | jq -c ' .[] ' ` ; do # JSON ããåèŠçŽ ãæœåº id = ` echo ${vm} | jq -r .id` name = ` echo ${vm} | jq -r .name` zone = ` echo ${vm} | jq -r .zone | rev | cut -d / -f 1 | rev` machine_type = ` echo ${vm} | jq -r .machineType | rev | cut -d / -f 1 | rev` internal_ip = ` echo ${vm} | jq -r .networkInterfaces [ 0 ] .networkIP` service_account = ` echo ${vm} | jq -r .serviceAccounts [ 0 ] .email` # ãã¡ã€ã«ãšæšæºåºåã«åºå echo " ${project} , ${id} , ${name} , ${zone} , ${machine_type} , ${internal_ip} , ${service_account} " | tee -a ${output_file_name} done continue done < ${input_file} echo "" echo " ##### All VMs are listed in the file below ##### " ls -la ${output_file_name} exit 0 åºåäŸ ä»¥äžã®ãã㪠CSV ãã¡ã€ã«ãåºåãããŸããããããããããã«ããŒãã«åœ¢åŒã§æ²èŒããŠããŸãããå®éã«ã¯åºå㯠csv ã§ããããããã¯åºåãããŸããã ãããžã§ã¯ã ID ã€ã³ã¹ã¿ã³ã¹ ID ã€ã³ã¹ã¿ã³ã¹ å ãŸãŒã³ ãã·ã³ã¿ã€ã å
éš IP ã¢ãã¬ã¹ ãµãŒãã¹ã¢ã«ãŠã³ã my-project-01 12345 my-test-vm-01 us-central1-b e2-micro 10.128.0.33 1234567890-compute@developer.gserviceaccount.com my-project-01 23456 my-test-vm-02-tokyo asia-northeast1-b e2-medium 10.146.0.2 1234567890-compute@developer.gserviceaccount.com my-project-02 78901 example-vm-1 us-central1-c e2-medium 10.128.0.2 0987654321-compute@developer.gserviceaccount.com my-project-03 54321 hoge-vm asia-northeast1-c e2-micro 10.146.0.5 2345678901-compute@developer.gserviceaccount.com å®è¡æ¹æ³ å
¥åãã¡ã€ã«ã®æºå ãŸããå
¥åãã¡ã€ã«ãšããŠ1è¡ã«1ã€ã® Google Cloud ãããžã§ã¯ã ID ãèšèŒããããã¹ããã¡ã€ã«ãçšæããŸãïŒãããžã§ã¯ãåã§ã¯ãªããID ã§ããããšã«æ³šæããŠãã ããïŒã projects.txt my-project-01 my-project-02 my-project-03 ãã®ãã¡ã€ã«ãäœãã«ã¯ã以äžã®èšäºã§ç޹ä»ããŠããã¹ã¯ãªãããå©çšããããšãã§ããŸãã blog.g-gen.co.jp ã¹ã¯ãªããã®å®è¡ ãã®åŸã以äžã®ããã«ã¹ã¯ãªãããå®è¡ããŸãã projects.txt ã¯ãçšæããããã¹ããã¡ã€ã«åã«çœ®ãæããŠãã ããã ./list_all_vms.sh projects.txt å¿çš ãœãŒã¹ã³ãŒãã®28è¡ç®ã36è¡ç®ãä¿®æ£ããããšã§ãä»»æã®æ
å ±ã CSV ãã¡ã€ã«ã«å«ããããšãã§ããŸãã åç®æã§ã¯ãJSON 圢åŒã§ååŸãã VM æ
å ±ããjq ã³ãã³ãã§ãã£ã«ã¿ããŠæ
å ±ãååŸããŠããŸããåèãšããŠãVM æ
å ±ã¯ä»¥äžã®ãããªãã©ãŒãããã«ãªã£ãŠããŸãïŒ2024幎9æçŸåšïŒã { " canIpForward ": false , " confidentialInstanceConfig ": { " enableConfidentialCompute ": false } , " cpuPlatform ": " Unknown CPU Platform ", " creationTimestamp ": " 2024-08-31T18:53:29.048-07:00 ", " deletionProtection ": false , " description ": "", " disks ": [ { " architecture ": " X86_64 ", " autoDelete ": true , " boot ": true , " deviceName ": " my-test-vm ", " diskSizeGb ": " 10 ", " guestOsFeatures ": [ { " type ": " UEFI_COMPATIBLE " } , { " type ": " VIRTIO_SCSI_MULTIQUEUE " } , { " type ": " GVNIC " } , { " type ": " SEV_CAPABLE " } , { " type ": " SEV_LIVE_MIGRATABLE_V2 " } ] , " index ": 0 , " interface ": " SCSI ", " kind ": " compute#attachedDisk ", " licenses ": [ " https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm " ] , " mode ": " READ_WRITE ", " source ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/disks/my-test-vm ", " type ": " PERSISTENT " } ] , " displayDevice ": { " enableDisplay ": false } , " fingerprint ": " xxxxxxxxxxx= ", " id ": " 1234567890123456789 ", " keyRevocationActionType ": " NONE ", " kind ": " compute#instance ", " labelFingerprint ": " xxxxxxxxxxx= ", " lastStartTimestamp ": " 2024-09-02T19:49:37.720-07:00 ", " lastStopTimestamp ": " 2024-09-02T20:07:08.821-07:00 ", " machineType ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/machineTypes/e2-micro ", " metadata ": { " fingerprint ": " xxxxxxxxxxx= ", " items ": [ { " key ": " enable-oslogin ", " value ": " true " } ] , " kind ": " compute#metadata " } , " name ": " my-test-vm ", " networkInterfaces ": [ { " accessConfigs ": [ { " kind ": " compute#accessConfig ", " name ": " External NAT ", " networkTier ": " PREMIUM ", " type ": " ONE_TO_ONE_NAT " } ] , " fingerprint ": " xxxxxxxxxxx= ", " kind ": " compute#networkInterface ", " name ": " nic0 ", " network ": " https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default ", " networkIP ": " 10.0.0.2 ", " stackType ": " IPV4_ONLY ", " subnetwork ": " https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default " } ] , " reservationAffinity ": { " consumeReservationType ": " ANY_RESERVATION " } , " satisfiesPzi ": false , " scheduling ": { " automaticRestart ": true , " onHostMaintenance ": " MIGRATE ", " preemptible ": false , " provisioningModel ": " STANDARD " } , " selfLink ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b/instances/my-test-vm ", " serviceAccounts ": [ { " email ": " 1234567890-compute@developer.gserviceaccount.com ", " scopes ": [ " https://www.googleapis.com/auth/devstorage.read_only ", " https://www.googleapis.com/auth/logging.write ", " https://www.googleapis.com/auth/monitoring.write ", " https://www.googleapis.com/auth/service.management.readonly ", " https://www.googleapis.com/auth/servicecontrol ", " https://www.googleapis.com/auth/trace.append " ] } ] , " shieldedInstanceConfig ": { " enableIntegrityMonitoring ": true , " enableSecureBoot ": false , " enableVtpm ": true } , " shieldedInstanceIntegrityPolicy ": { " updateAutoLearnPolicy ": true } , " startRestricted ": false , " status ": " TERMINATED ", " tags ": { " fingerprint ": " xxxxxxxxxxx= " } , " zone ": " https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-b " } ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO / ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³éš éšé· å
èŠå¯å®ãšããçµæŽãæã€çŸ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS 12è³æ ŒãGoogle Cloudèªå®è³æ Œ11è³æ ŒãX (æ§ Twitter) ã§ã¯ Google Cloud ã AWS ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it