*

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クエリが保存されていますので、他の環境に移植できます。

@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!");
  }

ハイライト部分が今回付け足したコードです。
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のおかげで、いろいろと便利な使い方ができそうに感じます。

関連記事

2016年 GCE vs AWS:何故Amazonを絶対使ってはイケナイのか!

本文章は以下の記事の超訳(著者の許可を得て)に一部私のコメントを付加したものになります。 GC

記事を読む

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

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

記事を読む

[GoogleAPI千本ノック] Google Compute Engine API を試してみた

こんにちは。GoogleのAPIを隔週で片っ端から紹介する、GoogleAPI千本ノック 第二回目

記事を読む

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

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

記事を読む

EC2のAMIイメージをGCEで起動したベンチマーク!

2倍高速! AWSからイメージで移行したインスタンスの性能比較をしたものです。 移行については、

記事を読む

GCP×Zencoderで始める動画トランスコーディング

はじめに 以前apps-gcpでは、GCP(GoogleCloudPlatform)と連携可能なA

記事を読む

GCE VPNの検証

GCE VPNのα版が公開されました。α版のためGoogleに申請し許可制ですが、取り急ぎ性能テスト

記事を読む

GCEの超絶性能!100秒で1000コア起動!

ちょっとふとしたことがあり、GCEで1000コア立ち上げるのにどのくらい時間がかかるだろうと思って、

記事を読む

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

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

記事を読む

2016/05/25 GCE vs AWS vs Azure ベンチマーク

2016/05/25 GCE vs EC2 vs Azureベンチマーク 本シリー

記事を読む

PAGE TOP ↑