Edited at

GCE AutoHeading構成構築メモ

More than 1 year has passed since last update.

取得できるmetadata情報

$ curl -s http://metadata.google.internal/computeMetadata/v1/instance/ -H "Metadata-Flavor: Google"

attributes/
description
disks/
hostname
id
image
machine-type
maintenance-event
network-interfaces/
scheduling/
service-accounts/
tags
virtual-clock/
zone

tagsで、Custom Metadataを取得

$ curl -s http://metadata.google.internal/computeMetadata/v1/instance/ tags/ -H "Metadata-Flavor: Google"

インスタンスにアタッチされているディスク情報を取得。

/disks/0/が、root volume、/disks/1/などは、追加されたディスク

$ curl -s http://metadata.google.internal/computeMetadata/v1/instance/disks/0/ -H "Metadata-Flavor: Google"

device-name
index
mode
type

ネットワークインターフェースの情報。

$ curl -s http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ -H "Metadata-Flavor: Google"

access-configs/
forwarded-ips/
ip
network

インスタンスのスケジュールイベントの情報

$ curl -s http://metadata.google.internal/computeMetadata/v1/instance/scheduling/ -H "Metadata-Flavor: Google"

automatic-restart
on-host-maintenance

インスタンスのゾーン取得

REGION=`curl -s http://metadata.google.internal/computeMetadata/v1/instance/zone  -H "Metadata-Flavor: Google" | cut -d "/" -f 4`

出力

asia-east1-a

インスタンスのExternal IP取得

curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip"  -H "Metadata-Flavor: Google"

カスタムイメージ作成のためのインスタンス作成

gcloud compute instances create instance-1 --machine-type g1-small --subnet=prod-asia --maintenance-policy MIGRATE  --image-family=ubuntu-1404-lts --image-project=ubuntu-os-cloud --boot-disk-type pd-standard

空のディスク作成(50G、SSD)

gcloud compute disks create disk-1 --size 50 --zone asia-east1-a --type pd-ssd

作業用インスタンス起動

nginx、Fluentd、BQuery等各種設定

[nginx]

name=nginx repo
#baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=0

yum --enablerepo=nginx install nginx

systemctl enable nginx

curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-bigquery
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-forest

SELinux無効

timezoneをJSTにする

timedatectl set-timezone Asia/Tokyo

ntp(時刻同期はデフォルトでオン)

$ ntpq -p

remote refid st t when poll reach delay offset jitter
==============================================================================
*metadata.google 27.227.116.206 2 u 7 64 7 0.403 -31.466 5.497

すでに作成済のディスクをアタッチする

gcloud compute instances attach-disk instance-1 --disk disk-1 --zone asia-east1-a

指定したdevice名にはできなそう。(--device-name)

外部ディスクのフォーマット

mkfs.ext4 /dev/sdb 

VMインスタンスを削除(ディスクは削除しない)

作業用インスタンスのイメージ取得

VMインスタンスに紐付いたディスクからイメージ作成不可

gcloud compute images create cmsweb-20150405 --source-disk-zone asia-east1-a --source-disk disk-1

startup scriptを配置するバケットを作成

gsutil mb -l ASIA h-XXXXXX-XXXX

startup.sh

#! /bin/bash

timedatectl set-timezone Asia/Tokyo

PRIVATE_IP=`curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip" -H "Metadata-Flavor: Google"`
INSTANCE_ID=`curl -s http://metadata.google.internal/computeMetadata/v1/instance/hostname -H "Metadata-Flavor: Google" | cut -d "." -f 1`

gcloud compute instances attach-disk $INSTANCE_ID --disk disk-1 --zone asia-east1-a

mount -o discard,defaults /dev/disk/by-id/google-persistent-disk-1 /mnt

startup-scriptをGoogle Cloud Storageのバケットに配置しておくことが可能。

public-readのACL権限が必要になります。

startup scriptをバケットに、アップロードします。

gsutil cp startup.sh gs://h-XXXXXX-XXXX/

startup.shにpublic-readのアクセス権限を付与します。

gsutil setacl public-read gs://h-XXXXXX-XXXX/startup.sh

インスタンステンプレート

gcloud compute  instance-templates create instance-template-1 --machine-type n1-standard-1 --network product-network --maintenance-policy MIGRATE --scopes "https://www.googleapis.com/auth/compute" ,"https://www.googleapis.com/auth/devstorage.read_write" ,"https://www.googleapis.com/auth/bigquery" ,"https://www.googleapis.com/auth/sqlservice.admin" ,"https://www.googleapis.com/auth/logging.write" --image ,"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20150325" --boot-disk-type pd-standard  --metadata startup-script-url=gs://h-XXXXXX-XXXX/startup.sh --boot-disk-device-name instance-template-1 --boot-disk-size 30GB

インスタンスグループ

gcloud preview managed-instance-groups --zone asia-east1-a create instance-group-1 --base-instance-name instance-group-1 --template instance-template-1 --size 1

コンソール出力情報を確認します。

gcloud compute instances <instance id> get-serial-port-output instance-1

インスタンスとzoneが違うとエラーとなります。

(EBSが配置されているAvailability Zoneのインスタンスしかアタッチできないのと同じか。)

gcloud compute instances attach-disk instance-1 --disk disk-2 --zone asia-east1-c

ERROR: (gcloud.compute.instances.attach-disk) Some requests did not succeed:
- The resource 'projects/skillful-fx-531/zones/asia-east1-c/instances/instance-1' was not found

ヘルスチェック

gcloud compute  alive-health-check create "alive-health-check" --port "80" --request-path "/alive.php" --check-interval "5" --timeout "5" --unhealthy-threshold "2" --healthy-threshold "2"

gcloud preview instance-groups --zone asia-east1-a add-service instance-group-1 --port 80 --service http

gcloud compute backend-services add-backend web-service --group instance-group-1 --zone asia-east1-a

gcloud compute url-maps create web-map --default-service web-service

gcloud compute target-http-proxies create web-proxy --url-map web-map

gcloud compute forwarding-rules create http-rule --global \

--target-http-proxy web-proxy --port-range 80