To launch a VM, use
gce_vm(). This will:
## reset instance job <- gce_vm_reset("markdev") ## check job until its finished gce_check_zone_op(job$name, wait = 20) ## stop VM job <- gce_vm_stop("markdev") ## check job until finished gce_check_zone_op(job$name, wait = 20) inst <- gce_get_instance("markdev") inst$status # "TERMINATED"
To create an instance from scratch you need to specify:
The default settings let you create a VM like so:
## create a VM > vm <- gce_vm(name = "test-vm") ## VM metadata > vm ==Google Compute Engine Instance== Name: test-vm Created: 2016-11-11 12:27:32 Machine Type: f1-micro Status: RUNNING Zone: europe-west1-b External IP: 184.108.40.206 Disks: deviceName type mode boot autoDelete 1 test-vm-boot-disk PERSISTENT READ_WRITE TRUE TRUE
The defaults for a new VM are:
predefined_type = "f1-micro"
image_project = "debian-cloud"
image_family = "debian-8"
network = "default"
There is support for RStudio, Shiny and OpenCPU docker images using the above to launch configurations. The configurations are located in the
/inst/cloudconfig package folder.
To launch those, use the
gce_vm() function and specify the argument
## for rstudio, you also need to specify a username and password to login > vm <- gce_vm(template = "rstudio", name = "rstudio-server", username = "mark", password = "mark1234") Checking job.... Job running: 0 /100 Job running: 0 /100 Operation complete in 22 secs External IP for instance rstudio : 220.127.116.11 ## rstudio running at 18.104.22.168:8787 You may need to wait a few minutes for the inital docker container to download and install before logging in.
You can then use
gce_vm_start etc. for your server. You are only charged for when the VM is running, so you can stop it until you need it.
There is also support for launching VMs from a docker container, as configured via a cloud-init configuration file.
Here is the example from the Google documentation - save this file locally:
#cloud-config users: - name: cloudservice uid: 2000 write_files: - path: /etc/systemd/system/cloudservice.service permissions: 0644 owner: root content: | [Unit] Description=Start a simple docker container [Service] Environment="HOME=/home/cloudservice" ExecStartPre=/usr/share/google/dockercfg_update.sh ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice gcr.io/google-containers/busybox:latest /bin/sleep 3600 ExecStop=/usr/bin/docker stop mycloudservice ExecStopPost=/usr/bin/docker rm mycloudservice runcmd: - systemctl daemon-reload - systemctl start cloudservice.service
If the above is saved as
example.yaml you can then launch a VM using its configuration via the
You can examine different options via the various list commands:
A list of the image projects and families available is here:
Most of the time you will want to leave network to the default, at present you can only configure this in the UI.
You can also create another disk to attach to the VM via:
By default it will be a 500GB disk unless you specify otherwise. You can then attach this disk to the instance upon creation using the
disk_source argument set to the disk resource URL.
0.1.0.9000 onwards you can also specify the size of the disk when creating a VM (Thanks to @jburos)
You can add custom metadata by passing a named list to the instance. More details from Google documentation is here
This includes useful utilities such as
shutdown-script that you can use to run shell scripts. In those cases the named list should include the script as its value.