gcloud
Version:
Google Cloud APIs Client Library for Node.js
773 lines (587 loc) • 22.5 kB
Markdown
# `gcloud` is deprecated!
## Use [google-cloud](https://www.npmjs.com/package/google-cloud) instead.
# Google Cloud Node.js Client
> Node.js idiomatic client for [Google Cloud Platform](https://cloud.google.com/) services.
[](https://www.npmjs.org/package/gcloud)
[](https://travis-ci.org/GoogleCloudPlatform/gcloud-node/)
[](https://dependencyci.com/github/GoogleCloudPlatform/gcloud-node)
[](https://coveralls.io/r/GoogleCloudPlatform/gcloud-node?branch=master)
* [Homepage][gcloud-homepage]
* [API Documentation][gcloud-docs]
This client supports the following Google Cloud Platform services:
* [Google BigQuery](#google-bigquery)
* [Google Cloud Bigtable](#google-cloud-bigtable)
* [Google Cloud Datastore](#google-cloud-datastore)
* [Google Cloud DNS](#google-cloud-dns)
* [Google Cloud Pub/Sub](#google-cloud-pubsub)
* [Google Cloud Storage](#google-cloud-storage)
* [Google Compute Engine](#google-compute-engine)
* [Google Prediction API](#google-prediction-api)
* [Google Translate API](#google-translate-api)
* [Google Cloud Logging](#google-cloud-logging-beta) (Beta)
* [Google Cloud Resource Manager](#google-cloud-resource-manager-beta) (Beta)
* [Google Cloud Vision](#google-cloud-vision-beta) (Beta)
If you need support for other Google APIs, check out the [Google Node.js API Client library][googleapis].
## Quick Start
```sh
$ npm install --save gcloud
```
## Example Applications
- [nodejs-getting-started][nodejs-getting-started] - A sample and [tutorial][nodejs-getting-started-tutorial] that demonstrates how to build a complete web application using Cloud Datastore, Cloud Storage, and Cloud Pub/Sub and deploy it to Google App Engine or Google Compute Engine.
- [gcloud-node-todos][gcloud-todos] - A TodoMVC backend using gcloud-node and Datastore.
- [gitnpm][gitnpm] - Easily lookup an npm package's GitHub repo using gcloud-node and Google App Engine.
- [gcloud-kvstore][gcloud-kvstore] - Use Datastore as a simple key-value store.
- [hya-wave][hya-wave] - Cloud-based web sample editor. Part of the [hya-io][hya-io] family of products.
- [gstore-node][gstore-node] - Google Datastore Entities Modeling library.
- [gstore-api][gstore-api] - REST API builder for Google Datastore Entities.
## Authentication
With `gcloud-node` it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services.
### On Google Compute Engine
If you are running this client on Google Compute Engine, we handle authentication for you with no configuration. You just need to make sure that when you [set up the GCE instance][gce-how-to], you add the correct scopes for the APIs you want to access.
``` js
// Authenticating on a global basis.
var projectId = process.env.GCLOUD_PROJECT; // E.g. 'grape-spaceship-123'
var gcloud = require('gcloud')({
projectId: projectId
});
// ...you're good to go! See the next section to get started using the APIs.
```
### Elsewhere
If you are not running this client on Google Compute Engine, you need a Google Developers service account. To create a service account:
1. Visit the [Google Developers Console][dev-console].
2. Create a new project or click on an existing project.
3. Navigate to **APIs & auth** > **APIs section** and turn on the following APIs (you may need to enable billing in order to use these services):
* Google Cloud Datastore API
* Google Cloud Storage
* Google Cloud Storage JSON API
4. Navigate to **APIs & auth** > **Credentials** and then:
* If you want to use a new service account, click on **Create new Client ID** and select **Service account**. After the account is created, you will be prompted to download the JSON key file that the library uses to authenticate your requests.
* If you want to generate a new key for an existing service account, click on **Generate new JSON key** and download the JSON key file.
``` js
// Authenticating on a global basis.
var projectId = process.env.GCLOUD_PROJECT; // E.g. 'grape-spaceship-123'
var gcloud = require('gcloud')({
projectId: projectId,
keyFilename: '/path/to/keyfile.json'
});
// ...you're good to go! See the next section to get started using the APIs.
```
You can also set auth on a per-API-instance basis. The examples below show you how.
## Google BigQuery
- [API Documentation][gcloud-bigquery-docs]
- [Official Documentation][cloud-bigquery-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var bigquery = gcloud.bigquery({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Access an existing dataset and table.
var schoolsDataset = bigquery.dataset('schools');
var schoolsTable = schoolsDataset.table('schoolsData');
// Import data into a table.
schoolsTable.import('/local/file.json', function(err, job) {});
// Get results from a query job.
var job = bigquery.job('job-id');
// Use a callback.
job.getQueryResults(function(err, rows) {});
// Or get the same results as a readable stream.
job.getQueryResults().on('data', function(row) {});
```
## Google Cloud Bigtable
- [API Documentation][gcloud-bigtable-docs]
- [Official Documentation][cloud-bigtable-docs]
*You may need to [create a cluster][cloud-bigtable-cluster] to use the Google Cloud Bigtable API with your project.*
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var bigtable = gcloud.bigtable({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json',
zone: 'my-zone',
cluster: 'my-cluster'
});
var table = bigtable.table('prezzy');
table.getRows(function(err, rows) {});
// Update a row in your table.
var row = table.row('alincoln');
row.save('follows:gwashington', 1, function(err) {
if (err) {
// Error handling omitted.
}
row.get('follows:gwashington', function(err, data) {
if (err) {
// Error handling omitted.
}
// data = {
// follows: {
// gwashington: [
// {
// value: 1
// }
// ]
// }
// }
});
});
```
## Google Cloud Datastore
- [API Documentation][gcloud-datastore-docs]
- [Official Documentation][cloud-datastore-docs]
*Follow the [activation instructions][cloud-datastore-activation] to use the Google Cloud Datastore API with your project.*
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var datastore = gcloud.datastore({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
var key = datastore.key(['Product', 'Computer']);
datastore.get(key, function(err, entity) {
console.log(err || entity);
});
// Save data to Datastore.
var blogPostData = {
title: 'How to make the perfect homemade pasta',
author: 'Andrew Chilton',
isDraft: true
};
var blogPostKey = datastore.key('BlogPost');
datastore.save({
key: blogPostKey,
data: blogPostData
}, function(err) {
// `blogPostKey` has been updated with an ID so you can do more operations
// with it, such as an update.
blogPostData.isDraft = false;
datastore.save({
key: blogPostKey,
data: blogPostData
}, function(err) {
if (!err) {
// The blog post is now published!
}
});
});
```
## Google Cloud DNS
- [API Documentation][gcloud-dns-docs]
- [Official Documentation][cloud-dns-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var dns = gcloud.dns({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Create a managed zone.
dns.createZone('my-new-zone', {
dnsName: 'my-domain.com.'
}, function(err, zone) {});
// Reference an existing zone.
var zone = dns.zone('my-existing-zone');
// Create an NS record.
var nsRecord = zone.record('ns', {
ttl: 86400,
name: 'my-domain.com.',
data: 'ns-cloud1.googledomains.com.'
});
zone.addRecord(nsRecord, function(err, change) {});
// Create a zonefile from the records in your zone.
zone.export('/zonefile.zone', function(err) {});
```
## Google Cloud Pub/Sub
- [API Documentation][gcloud-pubsub-docs]
- [Official Documentation][cloud-pubsub-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you
// auth on a global basis (see Authentication section above).
var pubsub = gcloud.pubsub({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Reference a topic that has been previously created.
var topic = pubsub.topic('my-topic');
// Publish a message to the topic.
topic.publish({
data: 'New message!'
}, function(err) {});
// Subscribe to the topic.
var options = {
reuseExisting: true
};
topic.subscribe('subscription-name', options, function(err, subscription) {
// Register listeners to start pulling for messages.
function onError(err) {}
function onMessage(message) {}
subscription.on('error', onError);
subscription.on('message', onMessage);
// Remove listeners to stop pulling for messages.
subscription.removeListener('message', onMessage);
subscription.removeListener('error', onError);
});
```
## Google Cloud Storage
- [API Documentation][gcloud-storage-docs]
- [Official Documentation][cloud-storage-docs]
#### Preview
```js
var fs = require('fs');
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var gcs = gcloud.storage({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Create a new bucket.
gcs.createBucket('my-new-bucket', function(err, bucket) {
if (!err) {
// "my-new-bucket" was successfully created.
}
});
// Reference an existing bucket.
var bucket = gcs.bucket('my-existing-bucket');
// Upload a local file to a new file to be created in your bucket.
bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
if (!err) {
// "zebra.jpg" is now in your bucket.
}
});
// Download a file from your bucket.
bucket.file('giraffe.jpg').download({
destination: '/photos/zoo/giraffe.jpg'
}, function(err) {});
// Streams are also supported for reading and writing files.
var remoteReadStream = bucket.file('giraffe.jpg').createReadStream();
var localWriteStream = fs.createWriteStream('/photos/zoo/giraffe.jpg');
remoteReadStream.pipe(localWriteStream);
var localReadStream = fs.createReadStream('/photos/zoo/zebra.jpg');
var remoteWriteStream = bucket.file('zebra.jpg').createWriteStream();
localReadStream.pipe(remoteWriteStream);
```
## Google Compute Engine
- [API Documentation][gcloud-compute-docs]
- [Official Documentation][cloud-compute-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var gce = gcloud.compute({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Create a new VM using the latest OS image of your choice.
var zone = gce.zone('us-central1-a');
var name = 'ubuntu-http';
zone.createVM(name, { os: 'ubuntu' }, function(err, vm, operation) {
// `operation` lets you check the status of long-running tasks.
operation
.on('error', function(err) {})
.on('running', function(metadata) {})
.on('complete', function(metadata) {
// Virtual machine created!
});
});
```
## Google Prediction API
- [API Documentation][gcloud-prediction-docs]
- [Official Documentation][cloud-prediction-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var prediction = gcloud.prediction({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Get all of the trained models in your project.
prediction.getModels(function(err, models) {
if (!err) {
// `models` is an array of Model objects.
}
});
// Reference an existing trained model.
var model = prediction.model('my-existing-model');
// Train a model.
model.train('english', 'Hello from your friends at Google!', function(err) {});
// Query a model.
model.query('Hello', function(err, results) {
if (!err) {
// results.winner == 'english'
// results.scores == [
// {
// label: 'english',
// score: 1
// },
// {
// label: 'spanish',
// score: 0
// }
// ]
}
});
```
## Google Translate API
- [API Documentation][gcloud-translate-docs]
- [Official Documentation][cloud-translate-docs]
**An API key is required for Translate.** See [Identifying your application to Google][api-key-howto].
#### Preview
```js
var gcloud = require('gcloud');
// Authenticating on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authentication section above).
var translate = gcloud.translate({
key: 'API Key'
});
// Translate a string of text.
translate.translate('Hello', 'es', function(err, translation) {
if (!err) {
// translation = 'Hola'
}
});
// Detect a language from a string of text.
translate.detect('Hello', function(err, results) {
if (!err) {
// results = {
// language: 'en',
// confidence: 1,
// input: 'Hello'
// }
}
});
// Get a list of supported languages.
translate.getLanguages(function(err, languages) {
if (!err) {
// languages = [
// 'af',
// 'ar',
// 'az',
// ...
// ]
}
});
```
## Google Cloud Logging (Beta)
> **This is a Beta release of Google Cloud Logging.** This API is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
- [API Documentation][gcloud-logging-docs]
- [Official Documentation][cloud-logging-docs]
```js
// Authenticating on a global-basis. You can also authenticate on a per-API-
// basis (see Authentication section above).
var gcloud = require('gcloud')({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
var logging = gcloud.logging();
// Create a sink using a Bucket as a destination.
var gcs = gcloud.storage();
logging.createSink('my-new-sink', {
destination: gcs.bucket('my-sink')
}, function(err, sink) {});
// Write a critical entry to a log.
var syslog = logging.log('syslog');
var resource = {
type: 'gce_instance',
labels: {
zone: 'global',
instance_id: '3'
}
};
var entry = syslog.entry(resource, {
delegate: process.env.user
});
syslog.critical(entry, function(err) {});
// Get all entries in your project.
logging.getEntries(function(err, entries) {
if (!err) {
// `entries` contains all of the entries from the logs in your project.
}
});
```
## Google Cloud Resource Manager (Beta)
> **This is a Beta release of Google Cloud Resource Manager.** This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
- [API Documentation][gcloud-resource-docs]
- [Official Documentation][cloud-resource-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authorizing on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authorization section above).
var resource = gcloud.resource({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Get all of the projects you maintain.
resource.getProjects(function(err, projects) {
if (!err) {
// `projects` contains all of your projects.
}
});
// Get the metadata from your project. (defaults to `my-project`)
var project = resource.project();
project.getMetadata(function(err, metadata) {
// `metadata` describes your project.
});
```
## Google Cloud Vision (Beta)
> **This is a Beta release of Google Cloud Vision.** This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
- [API Documentation][gcloud-vision-docs]
- [Official Documentation][cloud-vision-docs]
#### Preview
```js
var gcloud = require('gcloud');
// Authorizing on a per-API-basis. You don't need to do this if you auth on a
// global basis (see Authorization section above).
var vision = gcloud.vision({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
// Read the text from an image.
vision.detectText('./image.jpg', function(err, text) {
// text = [
// 'This was text found in the image',
// 'This was more text found in the image'
// ]
});
// Detect faces and the locations of their features in an image.
vision.detectFaces('./image.jpg', function(err, faces) {
// faces = [
// {
// angles: {pan,tilt,roll},
// bounds: {
// head: [{x,y},{x,y},{x,y},{x,y}],
// face: [{x,y},{x,y},{x,y},{x,y}]
// },
// features: {
// confidence: 34.489909,
// chin: {
// center: {x,y,z},
// left: {x,y,z},
// right: {x,y,z}
// },
// ears: {
// left: {x,y,z},
// right: {x,y,z}
// },
// eyebrows: {
// left: {
// left: {x,y,z},
// right: {x,y,z},
// top: {x,y,z}
// },
// right: {
// left: {x,y,z},
// right: {x,y,z},
// top: {x,y,z}
// }
// },
// eyes: {
// left: {
// bottom: {x,y,z},
// center: {x,y,z},
// left: {x,y,z},
// pupil: {x,y,z},
// right: {x,y,z},
// top: {x,y,z}
// },
// right: {
// bottom: {x,y,z},
// center: {x,y,z},
// left: {x,y,z},
// pupil: {x,y,z},
// right: {x,y,z},
// top: {x,y,z}
// }
// },
// forehead: {x,y,z},
// lips: {
// bottom: {x,y,z},
// top: {x,y,z}
// },
// mouth: {
// center: {x,y,z},
// left: {x,y,z},
// right: {x,y,z}
// },
// nose: {
// bottom: {
// center: {x,y,z},
// left: {x,y,z},
// right: {x,y,z}
// },
// tip: {x,y,z},
// top: {x,y,z}
// }
// },
// confidence: 56.748849,
// blurry: false,
// dark: false,
// happy: false,
// hat: false,
// mad: false,
// sad: false,
// surprised: false
// }
// ]
});
```
## Contributing
Contributions to this library are always welcome and highly encouraged.
See [CONTRIBUTING](CONTRIBUTING.md) for more information on how to get started.
## License
Apache 2.0 - See [COPYING](COPYING) for more information.
[gcloud-homepage]: https://googlecloudplatform.github.io/gcloud-node/
[gcloud-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs
[gcloud-bigquery-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/bigquery
[gcloud-bigtable-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/bigtable
[gcloud-compute-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/compute
[gcloud-datastore-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/datastore
[gcloud-dns-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/dns
[gcloud-logging-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/logging
[gcloud-prediction-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/prediction
[gcloud-pubsub-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/pubsub
[gcloud-resource-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/resource
[gcloud-storage-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/storage
[gcloud-translate-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/translate
[gcloud-vision-docs]: https://googlecloudplatform.github.io/gcloud-node/#/docs/vision
[nodejs-getting-started]: https://github.com/GoogleCloudPlatform/nodejs-getting-started
[nodejs-getting-started-tutorial]: https://cloud.google.com/nodejs/getting-started/hello-world
[gcloud-todos]: https://github.com/GoogleCloudPlatform/gcloud-node-todos
[gitnpm]: https://github.com/stephenplusplus/gitnpm
[gcloud-kvstore]: https://github.com/stephenplusplus/gcloud-kvstore
[hya-wave]: https://wav.hya.io
[hya-io]: https://hya.io
[gstore-node]: https://github.com/sebelga/gstore-node
[gstore-api]: https://github.com/sebelga/gstore-api
[dev-console]: https://console.developers.google.com/project
[gce-how-to]: https://cloud.google.com/compute/docs/authentication#using
[api-key-howto]: https://cloud.google.com/translate/v2/using_rest#auth
[googleapis]: https://github.com/google/google-api-nodejs-client
[cloud-bigquery-docs]: https://cloud.google.com/bigquery/what-is-bigquery
[cloud-bigtable-docs]: https://cloud.google.com/bigtable/docs/
[cloud-bigtable-cluster]: https://cloud.google.com/bigtable/docs/creating-compute-instance
[cloud-compute-docs]: https://cloud.google.com/compute/docs
[cloud-datastore-docs]: https://cloud.google.com/datastore/docs
[cloud-datastore-activation]: https://cloud.google.com/datastore/docs/activate
[cloud-dns-docs]: https://cloud.google.com/dns/docs
[cloud-logging-docs]: https://cloud.google.com/logging/docs
[cloud-prediction-docs]: https://cloud.google.com/prediction/docs
[cloud-pubsub-docs]: https://cloud.google.com/pubsub/docs
[cloud-resource-docs]: https://cloud.google.com/resource-manager
[cloud-storage-docs]: https://cloud.google.com/storage/docs/overview
[cloud-translate-docs]: https://cloud.google.com/translate/docs
[cloud-vision-docs]: https://cloud.google.com/vision/docs