
技術・機能解説、ノウハウ|DevOps
サーバーレスアプリケーションのCI/CDに挑戦しませんか?
みなさん、Igniteのサービス(https://www.ignite.ci/?id=raloc#ignite)はお試し頂きましたでしょうか?
Igniteは、伊藤忠テクノソリューションズ株式会社が無償で提供する、簡単にCI/CDのアプリケーション環境をお試し頂くことが出来るサービスです。
本記事では、Igniteで提供するサンプルアプリケーションの一つであるサーバーレスアプリケーション、「RALOC」をご紹介します。
この記事をお読み頂いた後、実際にサンプルアプリケーションとそのCI/CDの仕組みを動かしてみていただければ、サーバーレスアプリケーションのCI/CDをどのように実現するかご理解いただけるのではないでしょうか。
1. RALOCとは
RALOCは、AWSの監査ログサービスであるCloudTrailの情報から簡易的な監査ログを作成する機能をAPIとして提供するアプリケーションになります。(RALOC - 「Retrieve Audit Log Of CloudTrail」の頭文字を取って、RALOCと呼んでいます。)
AWSをお使いの方は既に使われているかもしれませんが、CloudTrailは各サービスの利用状況をイベントとして記録することでAWSアカウントのガバナンス・コンプライアンス・運用とリスクの監査実施を支援するためのサービスです。
RALOCアプリケーションは、CloudTrailのログから抽出したアクセスログをAPIで返します。この抽出ログはUTC時間で1日のうち初めと最後のイベント発生時刻のみを抽出しています。これによりあるユーザーがある日付にAWSを利用していた時間帯を確認できるという仕組みになります。
RALOCアプリケーションではこの仕組みを実行する中で、AWSのさまざまなサービスを連携させています。アプリケーションの処理は、AWSが提供するサーバーレスアプリケーションサービスのLambdaを使い、Go言語で実装されています。
2. RALOCアプリケーションアーキテクチャ
RALOCアプリケーションでは下記のLambda関数を中心にシステムが構成されています。(図1)
- raloc関数
- paloc関数
図 1. RALOCアプリケーションアーキテクチャ
(図をクリックすると拡大できます)
2-1. raloc関数
サンプルアプリケーションとして提供する機能を呼び出すとraloc関数が実行されます。API Gatewayを経由して監査ログ情報をHTTP経由でJSON形式のデータを取得することが出来ます。raloc APIでは、指定ユーザーの全ログの取得と、指定ユーザーの特定の日付のログの取得の2つの問い合わせ方法を提供します。(図2)
図 2. raloc関数のシーケンス
(図をクリックすると拡大できます)
raloc関数のバックエンドでは、AthenaがSQLによる問い合わせに対してデータを返します。監査ログ自体はcsvファイルですが、Glueによってデータベース化されたデータに対して問い合わせを実行します。
2-2. paloc関数
paloc関数は、CloudTrailからのデータをGlueに投入するLambda関数となります。(図3)
図 3. paloc関数のシーケンス
(図をクリックすると拡大できます)
paloc関数は、CloudWatchのイベントにより1日1回起動します。CloudTrailのログから前日のデータを参照しデータが存在すればGlueにパーティションを作成し保存します。ここで保存されたデータが、前述のraloc APIの呼び出し時の検索対象となります。
3. RALOCアプリケーションのCI/CDアーキテクチャ
RALOCアプリケーションのCI/CD(継続的インテグレーション/継続的デリバリー)がどのような仕組みになっているか解説していきます。
全体的な流れは以下のような構成になっています。(図4)
図 4. RALOCアプリケーションのCI/CDパイプライン
(図をクリックすると拡大できます)
RALOCアプリケーションのCI/CDはAWSのCodePipelineによって制御されます。
パイプラインの動作は以下の通りです。
1. アプリケーションのソースコードはCodeCommitのリポジトリで管理
- リポジトリ上のファイルの更新をトリガーにパイプラインが起動
2. リポジトリから最新のソースコードを取得し、CodeBuildではビルド用のDockerコンテナを起動
- buildspec.ymlの定義に基づいてビルドとテストを実行
3. ビルドとテストが成功後、次にデプロイ用のCloudFormation用の
- テンプレートを作成(RALOCアプリケーションではOpenなAPI仕様であるSwaggerでraloc APIを定義しているため、これをCloudFormation用に変換してから実行する)
4. CloudFormationによりraloc関数の定義をLambdaおよびAPI Gatewayにデプロイ
- RALOCアプリケーションはサンプルのため単一の稼働環境の構成としています。アプリケーションを更新する際には既存アプリケーションをそのまま上書きデプロイしますのでご注意ください。
4. RALOCアプリケーションの使い方
RALOCアプリケーションを使ってみるには、事前準備が必要です。
詳細はRALOCのドキュメントをご参照ください。
ここでは実際にRALOCアプリケーションにアクセスする方法とWeb APIについて解説します。
- raloc APIは、一般的にWeb APIと呼ばれるインターフェイスをAPI Gatewayによって提供しています。
- API(Application Programming Interface)はプログラミング言語における関数などの機能のインターフェイスを指す言葉です。
- Web APIはWebの標準技術を用いたAPIという意味でWebの標準仕様にのっとったインターフェイスを提供することを意味します。
- Web APIの実装にあたりAPI GatewayではRESTを採用しています。(REST仕様のWeb APIをRESTful APIと呼びます)
- RESTではHTTPメソッドによりWeb APIに対する操作の種類を表しています。本アプリケーションではPOSTメソッドによる参照機能を提供しています。
- POSTメソッドによるアクセスが必要となるため、実際にRALOCアプリケーションをテストするには、Unix環境でcurlコマンドを使ってアクセスするか、HTMLでPOSTメソッドを指定したフォームタグを用意する必要があります。
先に示したドキュメントの中に確認手順が記載されていますのでご参照ください。
呼び出しURLについては上記ドキュメントにも記載されていますが、API Gatewayのダッシュボードから参照することが出来ます(図5)
図 5. RALOCアプリケーションの呼び出しURL
テスト用HTMLではそのままJSONデータを表示していますが、JavaScriptを使う等して整形してコンテンツを表示することもできます。
さいごに
駆け足でしたがRALOCアプリケーションをご紹介しました。
サーバーレスアプリケーションの構成パターンはさまざまですが、バックエンドサービスを含めた一つの実装例として、RALOCを参考に御社のアプリケーションアーキテクチャ及びCI/CDの仕組みを検討いただければ幸いです。
兎にも角にも百聞は一見にしかず、IGNITEは無償で利用可能なサービスですので、まずは実際に動かしてみてください。
実際の動作を見ることで新たな気付きや御社にとってどのような仕組みが合うのかを検討出来るようになるのではないかと考えています。
RALOCを利用するには、当社 Ignite 専用サイトにアクセスしてください。Ignite 専用サイトは下記よりアクセスできます。
Ignite DevOps サイト
(https://www.ignite.ci?id=dsointro)
(“IGNITE DASHBOARD” をクリック)
Ignite 専用サイトでユーザー登録いただければ、ご利用のAWS 環境に今回の環境が自動でデプロイされ利用可能となりますのでご興味のある方はぜひIgniteをお試しください。
※この仕組み自体は無償のものですが、ご利用の AWS 環境の料金はかかります。また、拡張等ご相談ありましたら ignite@ctc-g.co.jp までお問合せください。
■ Ignite とは
DevOps の取り組みを促進、支援させていただくために、CI/CD 環境をワンクリックでお客様の AWS 環境へ展開可能な仕組みを 2018年3月に公開致しました。
Ignite の詳細については、下記をご覧ください。
著者プロフィール

- 古川雅弘
- 伊藤忠テクノソリューションズ株式会社在職中|1. 現在の担当業務 : AWSを中心としたDevOps,CI/CDの技術支援と普及活動。AWS Certified Solution Architect Professional。|2. これまでの担当業務 : Java開発、Javaミドルウェアのプリセールス及び技術支援、オンプレミスサーバー技術支援等|3. 最近の想い・考えていること : AR/VR/MRを使って社会貢献出来ないか?