Serverlessで始めるBacklog API

Backlogは、ブラウザでの操作のほぼすべての機能をAPIで提供しています。Backlog APIを皆様はご活用してますでしょうか?ヌーラボでも、日頃の業務を自動化するためにBacklog APIをフル活用しています。今回は私の仕事で利用する機会のあったBacklog APIについてご紹介させて頂きます。

Backlogには「ファイル共有」というファイルサーバの機能があります。このファイルサーバーにアップロードされたファイルの一部を、S3(AmazonS3)へ自動的に同期したい、という思いがありました。

この作業をBacklog APIとAWS Lambdaを使って自動化しましたので、今回の記事では、Bakclog APIの設定からAWS Lambdaでのプログラミング、そして、Serverless Frameworkを使った自動デプロイの方法まで詳しくご紹介します。

構成

では今回の仕組みを構成する要素について説明していきます。

  • AWS Lambda
  • Serverless Framework
  • Backlog API
  • Backlog Webhook

AWS Lambda

AWSで発生した特定のイベントに対して実行したい処理をプログラムするだけで実行可能なアプリケーションが作成できます。実際動く環境にはサーバーが立ち上がりますが、そこはあまり意識しないでプログラムを記述するだけで作成できます。そして今回は、BacklogのWebhookにAWS API Gateway(API Gateway)で作成したURLを登録して、API Gatewayが受けたイベントをLambdaで処理します。詳しくは AWS Lamda 開発者ガイドを参照ください。

Serverless Framework

Lambda、API Gateway、DynamoDBなどを作成、管理、デプロイできるツールです。実行ファイルと設定ファイルを準備するだけで利用できます。詳しくは Serverless frameworkを参照ください。

※事前に AWSアカウントの作成AWS CLIの設定、 npmのインストールSeverless Frameworkのインストールが必要です。

Backlog API

課題、Wiki、ファイルの追加や取得を始め、プロジェクトやユーザーの管理などブラウザ上のBacklogでできる操作の大部分をAPIから行うことができます。詳しくは APIを参照ください。

今回利用するAPI

Backlog Webhook

プロジェクトで発生したイベントの情報をリアルタイムに指定されたURL(サーバ)へHTTP POSTする機能です。詳しくは Webhookを参照ください。

実際に作ってみる

まずはServerless Frameworkのテンプレートを作成します。今回はaws-goのテンプレートを使用することにします。

serverless-sampleのディレクトリができて、その中にgoのテンプレートが展開されます。

実行ファイルの作成

実行するコードを見ていきます。

パッケージ、インポート設定、レスポンス、リクエストの構造体、そしてBacklogApiKey、Bucketは環境変数から取得しています。MonitoringDirectoryは指定フォルダ配下を同期する場合に設定(共有ディレクトリのsample以下を同期対象)します。SourceDirectoryはS3のBucket以下の出力先の設定です。

続いてメインの処理です。

処理の流れは以下の通りです。

  • リクエストを扱いやすいようにRequestの構造体にパースする
  • 共有ファイルのパス(MonitoringDirectory)をチェックする
  • Backlog APIを利用してファイルをダウンロードする
  • ダウンロードしたファイルをS3にアップロードする

そしてBacklogからのダウンロードと、S3へのアップロード処理です。

ダウンロード処理のsample.backlog.comは環境に合わせて変更してください。

最後におきまりのコードを追加します。

コードはこれで完成です。ソースファイルはserverless-sampleディレクトリ以下にmain.goというファイルを作成します。

次にMakefileを変更します。

依存ライブリの設定と、buildして作成される実行ファイルの出力先を設定しています。

そして実行します。

これで実行ファイル(bin/replicateFile)の準備は完了です。

設定ファイルの作成

続いて設定ファイルのserverless.ymlを変更します。

変更箇所1つ目は、iamRoleStatements以下の内容です。Lambdaと結びつくIAMロールにS3へのPUT権限を付与します。BUCKET_NAMEに対象のbucket名を設定します。

変更箇所2つ目は、functions以下の内容です。

  • サービスとなるlambdaの名称(replicateFile)
  • 実行ファイル(bin/replicateFile)
  • 環境変数としてBacklogのファイルをダウンロードする際に利用するAPI key、出力先のS3のBucket名
  • 今回はAPI Gatewayのイベントを利用するので- httpの設定とURLのpathとmethodを指定

BACKLOG_API_KEYの設定はAPIキーについてを参照ください。

これでAWS Lambdaと、AWS API Gatewayのサービスが立ち上がる設定ファイルの準備は完了です。 

準備ができたのでServerless Frameworkのdeployを行ってAWSの環境を構築します。

結果として、サービスの情報が表示されますので確認してください。

endpointsのPOST - https://〇〇〇.execute-api.us-east-1.amazonaws.com/dev/replicateS3は、API Gatewayの情報となります。URLはBacklogのWebhookに設定します。functionsのreplicateFile: serverless-sample2-dev-replicateFileはLambdaの名称です。 どちらもAWSのコンソールから確認可能です。

Webhookの設定

最後にBacklog Webhookの設定を行います。

  • API GatewayのエンドポイントをWebhook URLに設定する
  • 共有ファイルに関するイベントのファイルの追加ファイルの更新にチェックを入れる

これですべて完了です。

動作の確認

まずはBacklogの共有ファイルにファイルをアップロードします。 今回はserverlessTest.txtというファイルで動きをみていきます。

プログラムで設定したMonitoringDirectoryのsampleフォルダ配下にファイルをアップロードします。

画像ようにアップロードされていることが確認できます。

次にS3へ同期されていることを確認します。

S3のコンソール画面を開き、プログラムで設定したSourceDirectoryのtargetフォルダ配下を確認するとファイルが同期されていることが確認できます。

今回の目に見える成果物としてはこれだけになります。他の方法としては、AWSにログインしてファイルをアップロードしたり、もしくはaws cliで認証情報を設定してコンソールからコマンドで操作したりすることも可能です。ただ開発者ではない方にとってはハードルが高く、運用して頂くのは難しいかもしれません。今回はそうのような状況でしたので自動化しました。

皆様の運用の中でも同様な場合があると思います、そのような際にはBacklog APIを使ったServerlessなサービスの構築の参考にして頂ければと思います。

まとめ

いかがでしたでしょうか。

Backlog APIとServerless Frameworkを活用することで、ワークフローは改善できる可能性があります。これを機会にBacklogAPIに興味を持って頂ければ幸いです。

長くなりましたが、ありがとうございました。


お知らせ

明日8/2(木)開催のkintone devCamp 2018で、Backlog SREの吉澤が、AWS Lambdaを用いたAPI連携に関するハンズオンに登壇します。Backlog APIとAWS Lambdaの連携に関しては、このハンズオンのプレゼン資料およびサンプルコードもぜひご参考ください。

開発メンバー募集中

より良いチームワークを生み出す

チームの創造力を高めるコラボレーションツール

製品をみる