*

Google Cloud SQL APIのサンプルプログラムを動かしてみた

公開日: : 最終更新日:2015/11/06 投稿者: GCE ,

今回は、去年の6月にリリースされたGoogle Cloud SQL APIについてご紹介します。
このAPIは、簡単に言うと、Google Cloud SQLの管理がAPIでできてしまうという優れものです。

このAPIが登場する以前、Google Cloud SQL の管理は、Google Cloud PlatformのWeb上のコンソール画面からの操作のみが可能でした。
従って、プロジェクト管理者が手動で操作するしかできませんでした。
ところが、これら操作をこのAPIで操作できるようになり、これを使うことでCloud SQLインスタンスの生成やデータベースのエクスポートなどの管理をAPIで行うことができます。

今回は、このGoogle Cloud SQL APIを投げるプログラムを作って、実際にその良さを体験したいと思います。

1. 準備

それでは、早速以下のドキュメントに沿ってAPIを使用したプログラムを作成したいと思います。
https://developers.google.com/cloud-sql/docs/admin-api/v1beta3/api-lib/java

Google Cloud SQL API Client Libraryというライブラリがありますのでこちらを使います。

上のリンクから、Google Cloud SQL API Client Libraryのページに飛びます。
QuickstartのSelect Platformボタンを押して、Google App Engineを選択します。
Configure Projectを開いて、Google Cloud SQLを使っているプロジェクトを選択します。(以下の画面)

「Continue」すると、Quickstartの下の方から新しいページが表示されます。
ここでは、環境構築方法とサンプルプログラムのダウンロードができます。

ドキュメントにもありますが、JDK6以上、Maven 3.1.0以上を準備しておきましょう。また、Download the starter applicationからプロジェクト本体を、Download the client secrets fileからOAuth設定ファイルをダウンロードします。

プロジェクト本体には、Google Cloud SQL API Client Libraryが予めインポートされており、OAuth設定ファイルは、先ほど選択したアプリケーションのclient_idやclient_secretなどがJSON形式で記録されています。このclient_idやclient_secretは、そのプロジェクトがAPIにアクセスするときに、使用します。

このOAuth設定ファイルでソースコードのsrc/main/resources/client_secrets.jsonを上書きします。

これを使わない場合はclient_idの発行をCloud Consoleで行い、プログラムの中に書かないといけませんが、Client Libraryという便利なライブラリがありますので、client_secrets.jsonを上書き、というとても簡単な操作で済みます。

これで準備完了です。実際にソースコードを編集します。

2. コーディング

Google Cloud SQL APIでは、インスタンスの生成やデータベースのエクスポートなどの管理が行えますので、今回は、既存のデータベースをGoogle Cloud Storageにエクスポートするプログラムを作成します。

ソースコードのsrc/main/java/com/google/api/services/samples/sqladmin/appengine/SQLAdminSampleServlet.java
を開いてください。ここでは、OAuth設定ファイルを呼び出してOAuth認証させたsqladminが利用できるように既に宣言されています。
これを使って、現在Google Cloud SQLで起動中のデータベースから、SQLファイルのエクスポートを行い、Google Cloud Storageに保存してみます。SQLファイルは、データベースの構築から今までのSQLクエリが保存されていますので、他の環境に移植できます。
[java highlight=”15,16,17,18,19,20,21,22″]
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
// Get the stored credentials using the Authorization Flow
AuthorizationCodeFlow authFlow = initializeFlow();
Credential credential = authFlow.loadCredential(getUserId(req));
// Build the SQLAdmin object using the credentials
@SuppressWarnings("unused")
SQLAdmin sqladmin = new SQLAdmin.Builder(
Utils.HTTP_TRANSPORT, Utils.JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();

// Add the code to make an API call here.
ExportContext context = new ExportContext().setUri("gs://backup/backup_"+ 20140124 +".sql");

InstancesExportRequest expReq = new InstancesExportRequest();
expReq.setExportContext(context);

Instances instances = sqladmin.instances();
Export export = instances.export("myproject", "mydbinstance", expReq);
String res = export.execute().getOperation();

// Send the results as the response
resp.setStatus(200);
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.println("Success!");
}
[/java]
ハイライト部分が今回付け足したコードです。
ExportContextには、エクスポートするときの具体的な情報を入れておきます。それをInstancesExportRequestに突っ込んで、リクエストできる形にします。sqladminからインスタンスを呼び出して、リクエストを投げます。

プログラムで書くと、リクエストを送っているような印象を受けませんが、実際は、下のようなJSONでやり取りしています。

リクエスト

{
“exportContext”: {
“uri”: “gs://backup/backup_20140124.sql”
}
}

レスポンス

{
“kind”: “sql#instancesExport”,
“operation”: “90375fd2-931a-42ee-af6e-5f2e5a5a0cb2”
}

3. コンパイルとデプロイ

プロジェクトソースコードのsrc/main/webapp/WEB-INF/appengine-web.xmlのタグの間にデプロイ先のプロジェクトIDを追記します。

ターミナルから以下のコマンドを入力します。

cd sqladim-appengine-sample
mvn clean package
mvn appengine:update

Mavenでコンパイル、デプロイを行います。

また、ローカル環境で実行するには、以下のコマンドで確認できます。

mvn appengine:devserver

実行後に、Cloud Consoleを確認してみますと、
サンプルから指定したファイル名でSQLファイルが保存されているのを確認できました。
このようにGoogle Cloud SQL APIを投げるプログラムを実行すると、
Google Cloud Platformで実際に操作しているかのように、実行できたことが確認できました。

4. まとめ

Google Cloud SQL API がリリースされたので、APIを投げるプログラムを作り、実行してみました。
今回は、既に起動中のインスタンスからSQLファイルをGoogle Cloud Storageに保存するAPIを使用しました。
結果として、Google Cloud Platformでの操作と変わりなく、実行することが確認できました。
このAPIのおかげで、いろいろと便利な使い方ができそうに感じます。

関連記事

2015/09/16 GCE vs AWS ベンチマーク

2015/09/16 GCE vs AWS ベンチマーク 本シリーズでは定期的に

記事を読む

GCEのネットワーク性能調査(iperf3でゾーン間やEC2と比較もしてみる)

GCEとEC2の同一ゾーン間と同一リージョン別ゾーン間でのネットワーク性能(ping遅延、iperf

記事を読む

2015/10/16 GCE vs AWS ベンチマーク

2015/10/16 GCE vs AWS ベンチマーク 本シリーズでは定期的に

記事を読む

2014/12/18 GCE vs AWS ベンチマーク

2014/12/18 GCE vs AWS ベンチマーク 本シリーズでは定期的にGCEとEC2のベ

記事を読む

2014/11/20 GCE vs AWS ベンチマーク

さて、始まりました、待望のシリーズ! ワールドワイドなクラウドIaaS界の2大巨頭である2つの

記事を読む

GCEにPuttyから簡単接続する

年末ではありますが、先日ちょっとGCE(Google Compute Engine)を触る機会がまた

記事を読む

2015/02/12 GCE vs AWS ベンチマーク

2015/02/12 GCE vs AWS ベンチマーク 本シリーズでは定期的にGCEとEC2のベ

記事を読む

2016/03/30 GCE vs AWS vs Azure ベンチマーク

2016/03/30 GCE vs EC2 vs Azureベンチマーク 本シリー

記事を読む

[GoogleAPI千本ノック] Google Cloud Deployment Managerを試してみた

GoogleのAPIを隔週で片っ端から紹介する、GoogleAPI千本ノックという特集を開始致します

記事を読む

2016/10/03 GCE vs AWS vs Azure ベンチマーク

2016/10/03 GCE vs EC2 vs Azureベンチマーク 本シリ

記事を読む

PAGE TOP ↑