BacklogをAWSと組み合わせて定期タスクを自動登録する

こんにちは、金田です。今日はBacklogで定期的なタスクを管理する方法についてご紹介します。
Backlogにはマイルストーンやガントチャート (課題の開始日・期限日) など定期的なタスク登録をサポートするための機能がいくつか用意されていますが、それでも定期的なタスクが自動で登録されて欲しいというシーンはあるかと思います。

著作者:pikisuperstar/出典:Freepik

さて、ではどのような方法で定期的に自動でタスクを登録したらよいでしょうか。Backlog公式ではZapierを利用した方法が紹介されています。他にはGoogle Apps Script (Gmail) を使って、Backlogのメールによる課題登録機能を活用した事例もありました。

いずれも手軽で魅力的な方法ですが、弊社はAPIを利用したカスタマイズを得意としているのと、AWSを積極的に活用していることもあって今回はAWSで構築することにしました。利用するサービスはAWS LambdaとCloudWatchとAmazon S3、そしてSecrets Managerの4つです。

やりたいこと

細かい内容には触れませんが、今回やりたかったことをざっくりと説明すると「毎月一日に社内のすべてのAWSアカウントにおいて、登録されているユーザーのうち申請外のユーザーをリストアップする」というものです。管理されていないAWSのユーザー (IAMユーザー) を作られることがセキュリティの観点から望ましくない、というのが動機ですが、経緯などに興味のある方は是非こちらをご覧ください。

作ったもの

今回のしくみ

作ったものとしては、主に次の通りです。まずはCloudWatch Event (EventBridge) から。
スクリーンショットで示したように、毎月・毎日・毎時間など定期的なスケジュールを定義することができます。

続いては、AWS Lambdaです。※. 主要部分のみご紹介
Backlogの課題の追加APIを利用しています。プロジェクトIDや課題の種別、担当者などは固定値 (Lambdaの環境変数) に記載しました。また、BacklogのAPIキーは漏えいしてしまうとBacklogアカウントが乗っ取られるにも等しい事態になってしまいますので、Secrets Managerに格納して利用することとしました。APIキーについてはこちらの記事で詳しく扱っていますので、是非合わせてお読みください。

            body = {
                'projectId': os.environ['PROJECT'],
                'summary': f'{account_name} (Account id: {account}) - {datetime.now().year}年{datetime.now().month}月',
                'issueTypeId': os.environ['ISSUE'],
                'priorityId': PRIORITY,
                'description': f'{description}',
                'assigneeId': os.environ['ASSIGNEE'],
                f'customField_{ATTR_ID}': excludes.replace(' ', ','),
            } 

            response = send_request_to_backlog(body)

まとめ

この仕組みを導入したことによって、毎月1日に自動でタスクが登録されるようになりました。
下の画像は実際にこの仕組みによって登録されたBacklogの課題の一覧です。毎月1日に、定型的な件名で課題が登録されていることがお分かりいただけるかと思います。

このようにBacklog APIと他サービスを組み合わせることで、Backlogがより便利になります。皆さんの身の回りのお困りごとや効率化のアイディアなどがあれば、是非Backlog助っ人サービスにお問い合わせください。

助っ人サービスへのお問い合わせはこちら kintone for 助っ人サービス おっと発見OTTO