クラウドネイティブなアプリケーション開発のために、サーバーレスアーキテクチャの導入を検討されるお客様が増えています。サーバーレスアーキテクチャを導入することで、これまで必要であったサーバーやOS、ミドルウェアの管理から開放され、大幅なコストダウンも可能です。
TOKAIコミュニケーションズは、これまでの豊富なアプリケーション開発とAWS構築の知見に基づき、要件のヒアリングからアーキテクチャ選定、設計、開発、保守など、幅広く対応します。
サービス内容
- お客様ご要望のヒアリングとアーキテクチャの選定
- サーバーレスアプリケーション開発における要件定義、設計、開発
- サーバーレスアーキテクチャに必要なAWS環境の設計、構築
- 開発した環境の運用・保守
サーバーレスアプリケーション開発の課題と解決策
課題
- サーバーレスアプリケーション開発を検討したいが自社の要件にマッチしているのかわからない
- さまざまなAWSサービスと連携するアプリケーションを作りたいが社内にノウハウがない
- AWS利用料の試算をしたいが料金体系が複雑でどのように試算すればいいかわからない
TOKAIコミュニケーションズがお客様のお悩みを解決します
解決策
サービスの特長
-
特長1 AWS環境構築実績多数
当社には多数のAWS構築実績があります。これまでの経験・ノウハウを活用し、お客様のご要件に応じた最適なAWS環境を提案・設計します。
-
特長2 開発から保守までワンストップ対応
サーバーレスアプリケーションのための最適な設計/開発と、ベースとなるAWS環境の構築、その後の保守運用までをワンストップで実施いたします。
-
特長3 AWS プレミアティアサービスパートナーとして
当社はAPN(AWS Partner Network)において、AWS設計・構築、導入の実績を評価され、AWS プレミアティアサービスパートナーに認定されています。
サーバーレスアプリケーション開発のポイント
サーバーレスアーキテクチャとは?
サーバーレスアーキテクチャとは、コードを動作させるためにサーバーを用意する必要がなく、コードをファンクション単位でデプロイ、実行することができる仕組みです。サーバーレス環境を手に入れることで、これまで必要であったサーバーの構築や運用保守から解放され、開発者はアプリケーションの作成に集中することができるようになります。
AWSのサーバーレスコンピューティングサービスと言えばAWS Lambdaです。Lambdaはコードを実行するための全てのインフラをサービス側で管理してくれるフルマネージド型サービスです。つまり、サーバーレスとはサーバーが無いことを意味するのではなく、コード実行に必要なサーバー、OS、ネットワーク、その他必要なインフラをAWSが維持管理してくれており、利用者はそれらを意識する必要がないことを意味します。
AWSでは、Lambdaに加えてAmazon API Gateway、Amazon DynamoDB、S3などのフルマネージド型サービスを組合せることで、EC2に代表されるコンピューティングサービスの利用に比べて運用管理コストとAWS利用料を低減したサーバーレス開発を行うことが可能です。
サーバーレス開発でよく使われるAWSサービス
AWS Lambda
ファンクション単位でデプロイを行うフルマネージド型サーバーレスコンピューティングサービスです。API Gatewayと組み合わせてREST APIを構成できます。また、様々なAWSリソースで発生するイベントをトリガーに起動することができ、処理の自動化が可能となります。
Amazon API Gateway
セキュアで信頼性の高いAPIを構築できるフルマネージド型サービスです。Lambdaと連携することでLambdaコードをAPIとして簡単に呼び出せるようになります。
Amazon DynamoDB
フルマネージド型のNoSQLデータベースです。AWS Lambdaとの相性が良く、サーバーレス開発で良く利用されるデータベースです。
Amazon S3
AWSのあらゆる場面で利用されるフルマネージド型オブジェクトストレージです。サーバーレス開発ではWebの静的コンテンツの格納場所、Lambdaに処理させるデータの置き場所、処理結果やログの出力先として利用されます。
Amazon Cognito
ウェブアプリケーションやモバイルアプリケーションに素早く簡単にユーザのサインアップ/サインイン機能やアクセスコントロールを追加できるサービスです。
AWS CodePipeline
CodeCommit、CodeBuilde、CodeDeploy、CloudFormationなどと組み合わせて使用し、アプリケーションとインフラのデプロイを自動化するCI/CDパイプラインを構成するサービスです。
AWS Lambdaを活用したサーバーレスアプリケーション開発
AWS Lambdaの特長
- サーバーの管理が不要、負荷に応じて実行環境が自動的にスケールされる
- コードを書いてデプロイすればすぐに実行が可能
- 複数のプログラミング言語に対応している
- 割り当てメモリ量と実行時間×呼出回数による従量課金制(デプロイしても実行されなければ課金されない)
- AWSの様々なサービスで発生するイベントをトリガーとして起動することができる
AWS Lambdaの料金の考え方
サーバーレスで利用されるサービスも、他のAWSサービスと同様に「どれだけの時間・容量を使ったか」による従量課金が適用されます。
AWSにおけるサーバーレス構成ではコードをLambdaで実行することになりますが、Lambdaは呼び出されて実行された時間・回数と、その際に割り当てられるメモリサイズで課金されます。
Amazon EC2上にコードをデプロイしてアプリケーションを構成する場合、コードが動いていなくてもAmazon EC2の利用料金が発生しますが、Lambdaでは呼び出された時のみの課金となります。Lambdaの実行頻度次第では、Amazon EC2上でアプリケーションを動かす場合に比べて大幅に利用料金を削減できる場合があり、コスト削減効果が見込めます。
しかし、全てのアプリケーションがLambdaによるサーバーレス構成に向いているわけではなく、一日中常に多くのリクエストが継続し、処理を実行しつづけるようなアプリケーションの場合はAmazon EC2よりも高額になってしまう可能性があります。
サーバーレス構成を検討する際には、アプリケーションの処理特性と利用料金の両面から向き不向きを判断することが重要です。
AWS Lambdaによる構成例
AWSにおけるベーシックなサーバーレスWebアプリケーション構成です。
動的コンテンツはAPI Gateway+Lambdaで実装し、静的コンテンツはS3に配置します。CloudFrontを前面に配置してリクエストパスによってAPI GatewayとS3への振り分けを行い、コンテンツのキャッシュを行います。
セキュリティ対策としてAWS WAFによる攻撃のブロック、ACMで発行するSSL/TLS証明書による通信の暗号化などを実装します。
この構成は、モバイルアプリケーションやシングルページWebアプリケーションのバックエンドに向いています。
AWS Lambdaのセキュリティ対策
サーバーレスアーキテクチャではLambda、API Gateawy、S3、DynamoDBなどのフルマネージド型サービスを利用するため、OSやミドルウェアのセキュリティ対策はAWSが実施してくれます。
しかし、Lambdaで実行するコードやライブラリについては一般的なWebアプリケーションと同様に利用者側で以下の様な脆弱性対策やセキュリティ対策が必要です。
- セキュアコーディングの実施
- コード内にクレデンシャル情報をハードコーディングせず、AWS Secrets Managerなどを使用する
- 利用するライブラリについてもセキュアなものを選択する
- IAM Roleの使用と最低限の権限付与を意識する
上記対策に加えて、以下のAWSサービスを利用することでよりセキュアなサーバーレスアプリケーションを構築することが可能です。
AWS WAF
API Gatewayと連携するフルマネージド型のウェブアプリケーションファイアウォールです。手動でのルール設定に加え、AWSやサードパーティベンダーが提供するマネージドルールを適用可能で、運用負荷を下げながらアプリケーションを保護することができます。
Amazon CodeGuru
コードの問題を検出し、コードを改善するためのレコメンデーションを提供してくれるサービスです。一般的な脆弱性とAWSに蓄積されているセキュリティに関するベストプラクティスに基づいてレコメンデーションを提供します。
AWS Lambdaのモニタリング
Lambdaによるサーバーレスアーキテクチャであってもモニタリングは重要です。Lambdaの実行結果やリクエスト数、実行時間などをAmazon CloudWatchのメトリクスで収集し、各メトリクスに対してアラームを設定することで異常検知時に通知を実施します。
また、Lambda上で実行されるコードのログはCloudWatchLogsに出力され、ログメッセージのフィルタ設定をすることで特定のメッセージを検知して通知を実施したり回復処理を自動実行することができます。
CI/CDパイプラインによるデプロイの自動化
AWS CodepipelineによってCI/CDパイプラインを構成し、ビルド、テスト、デプロイの自動化を行います。CI/CDを導入することでソフトウェアリリースプロセスの自動化、開発者の生産性の向上、更新の迅速なデリバリーなどのメリットを得ることができます。
AWSにおけるサーバーレス開発でCI/CDを実装するには、Code系サービス、SAM、CloudFormationなどを組合せることで様々なパターンのパイプラインを構成することが可能です。