DevSecOpsの原則を適用してeコマースアプリケーションを構築する方法

この記事では、**DevSecOps**の概念を探り、**Alibaba Cloud**上の暗号通貨ウォレットを使ってeコマースアプリケーションを構築する際に、その原理をどのように適用できるかを議論します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/devsecops-best-practices-on-alibaba-cloud-building-an-e-commerce-application_593846)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.5d052c92TUmXQW) 、著者 Anand V、[Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.5d052c92TUmXQW)は、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

>"2019年までに、企業のDevSecOpsイニシアチブの70%以上が、オープンソースのコンポーネントや商用パッケージのセキュリティ脆弱性と設定の自動スキャンを組み込んでおり、2016年の10%未満から増加しています。2021年までには、ラピッド開発チームの80%にDevSecOpsのプラクティスが組み込まれ、2017年の15%から増加しています"

近年、ソフトウェア開発ライフサイクル（SDLC）の成熟度モデルがウォーターフォールからアジャイルへと移行し、DevOpsへと大規模なカルチャーシフトが見られるようになりました。継続的インテグレーション、継続的デプロイメント、継続的デリバリがソフトウェア開発に必要とされるようになりました。多くの開発者がDevOpsで無視しがちな大きな側面の1つは、セキュリティです。DevOpsのライフサイクルのあらゆる段階でセキュリティを統合することは、DevSecOpsにとって不可欠な要素です。

#DevSecOpsとは？
DevSecOpsとは、SDLCにおいて開発、運用、セキュリティを単一のプロセスとして統一することを目的としたソフトウェア開発の概念または考え方です。簡単に言えば、DevSecOpsはDevOpsと非常によく似ていますが、セキュリティに重点を置いています。また、DevSecOpsを導入する過程では、DevOpsツール、マイクロサービス、コンテナ、自動化、API、テストツールの必要性もあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f239fa24-1726-65b8-2dd0-bf7fdca33182.png)


出典：Annotated DevSecOps Cycle, Larry Maccherone

DevSecOpsの導入を成功させるための5つのステップについて説明しましょう。

**ステップ1: DevOpsから始めて左にシフトする**

1、ソフトウェア開発では、左シフトの概念は、テストなどのタスクをサイクルの早い段階で移動させ、これらのタスクが開発活動と並行して発生するようにします。
2、新しいアプリケーションの風景は、開発プロセスの早い段階でセキュリティ対策を統合し、本番に到達するコードのセキュリティを向上させる機会となります。
3、SAST、DAST、脆弱性とペネトレーションテストの統合が重要です。

**ステップ2：マイクロサービスを取り入れる**

1、アプリケーションをより速く構築する必要があるので、マイクロサービスアーキテクチャが必要です。
2、マイクロサービスでは、大規模で複雑なシステムをシンプルで独立したプロジェクトに分離します。これにより、敏捷性とビジネス全体との整合性がもたらされ、開発者は顧客のためにコードの変更を即座に行うことができます。

**ステップ 3: DevSecOps ライフサイクルの一部としてコンテナを使用する**

1、ソフトウェアコンテナは、アプリケーションをマイクロサービスに分解できるようにすることで、開発を加速させます。
2、コンテナは、サービスの実行に必要なすべてのコンポーネント（ソフトウェア、システムライブラリ、ファイルシステム）を含むソフトウェアのパッケージを保持します。これにより、テストの質を向上させ、統合とデプロイの複雑さを軽減することができます。

**ステップ 4: 自動化でソフトウェアコードを構築する**

1、自動化は、ソフトウェア開発メカニズムを強化するだけでなく、ソフトウェア開発モデルの手動の努力によって作られた抜け穴を埋めることを目的としています。
2、組織は、頻繁なリグレッションテストの反復に取り組むために自動化を採用し、配信プロセスのペースアップを図ることができます。
3、開発者は、マイクロサービスアーキテクチャに取り組んでいるときや、例外的に大規模なプロジェクトに取り組んでいるときに、自動化が恩恵をもたらすことに気づくでしょう。

**ステップ5：APIゲートウェイの統合**

1、API ゲートウェイは、クライアントから来るすべてのリクエストのための単一のエントリポイントを確立します。これは、アプリケーションがどのようにマイクロサービスに分割されるかを理解することで、クライアントをトラブルから隔離します。また、これにより、クライアントは1つのリクエストで複数のサービスからデータを取得することができます。

#アリババクラウドでのDevSecOps
Alibaba CloudはDevSecOpsを実現するための統合パッケージを提供しています。

1、Alibaba Cloud Container Serviceは、Kubernetesクラスタのサポートを提供します。
2、Alibaba Cloud Resource Orchestration Service（ROS）のアプリケーションデプロイ機能を利用して、ユーザーはROSのテンプレートを使用して、ワンクリックで高可用性と安全性の高いKubernetesクラスタを作成することができます。
3、Kubernetesクラスタは、Alibaba Cloudのストレージ、ネットワーク、仮想化、セキュリティ機能を統合し、高性能なアプリケーション管理を提供し、クラスタの作成と拡張を簡素化します。
4、Alibaba Cloud上に展開されたKubernetesは、コンテナ化されたアプリケーションの展開、拡張、管理を容易にします。
5、それはさらにコンテナ化された管理とアプリケーション開発に焦点を当てており、以下の機能が付属しています。
----- 1、弾力性のある拡張とセルフレパレーション
----- 2、サービスの発見とサーバーのロードバランシング
----- 3、サービスの公開とロールバック
----- 4、秘密と設定管理

アリババクラウドからのサービスのソリューションアーキテクチャは以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/deca4176-d127-6789-27b9-aad47d387037.png)


上記のコンテナソリューションアーキテクチャは、ソフトウェア開発のためのマイクロサービスとして機能します。Kubernetesクラスタはマイクロサービスの運用に優れたサポートを提供するため、アプリケーションの開発とイテレーションに集中することができます。

大規模なアプリをマイクロサービスの集合体に分割することで、アジャイルな開発、テスト、デプロイ、O&Mが可能になります。また、マイクロサービスは理解、開発、保守が容易です。さらに、無料のフレームワークと技術的なオプションにより、チーム内での効率的なコミュニケーションが促進されます。

さらに、アリババのマイクロサービスには以下のような特徴があります。

1、軽量展開
2、コンテナ管理の簡素化
3、他のサービスへの影響が少ない
最後のステップとして、Alibaba CloudはDevSecOpsの実装に必要な自動化を提供しています。

Alibaba Cloudは、コアパッケージングとインフラストラクチャのプロビジョニングのためのPackerとTerraformをサポートしています。これらのツールにより、ユーザーは、インフラストラクチャとアプリケーションをAlibaba Cloud上に迅速にデプロイすることができます。エンタープライズビジネスでは、アプリケーションとインフラストラクチャの迅速なイテレーションと継続的な開発により、運用の強化とメンテナンスコストの最小化を実現しています。

さらに、Alibaba Cloudは、Alibaba CloudとDevOpsのプラクティスを使用して、顧客が迅速かつ確実に製品を構築して提供できるように設計された一連の柔軟なサービスを提供しています。TerraformとPackerのサポートにより、Alibaba Cloudのお客様は、グローバルインフラストラクチャを管理するためのインパクトのあるワークフローを持つことができます。

これにより、ユーザーは時間を節約し、ビジネスに不可欠なニーズの提供に集中することができます。Packerのユーザーは、他のプラットフォームでのイメージ管理と同じワークフローと設定を使用して、Alibaba Cloud上でカスタマイズされたイメージを簡単に構築および設定することができます。同様に、Terraformユーザーは、他のクラウド上でインフラストラクチャを管理する場合と同様のワークフローと構成を使用して、計算、ネットワーク、およびストレージリソースをAlibaba Cloud上でプロビジョニングすることができます。

Alibaba Cloudは、組織がDevSecOpsモデルへと進化するためのワンストップ・ソリューションです。

#DevSecOpsを使用したEコマースポータルの構築
上記のアーキテクチャに基づいて、私はある顧客がこのプラットフォームを使用してeコマースサイトをホストするのを手伝ったことがあります。Eコマースのポータルは、主に携帯電話、ラップトップ、タブレット、ホームオートメーション製品、カメラなどの電子製品に焦点を当てたシンプルな機能を備えています。

ストアは以下のような最低限の機能を備えています。

**オーダーレベルデータ**

1、FSN ID：各SKUのユニークな識別
2、注文日：ご注文をいただいた日
3、注文ID：各注文の固有識別番号
4、注文アイテムID：同じ注文で2つの異なる商品を注文した場合、同じ注文IDの下に2つの異なる注文アイテムIDが生成され、注文は注文アイテムIDによって追跡されます。
5、GMV： Gross Merchandise Value または Revenue
6、単位：特定商品の販売個数
7、注文の支払いタイプ：ご注文のお支払い方法 - 前払いまたは代金引換
8、SLA: 製品を納品するのに通常かかる日数
9、Cust ID：顧客固有の識別
10、製品MRP：製品の最大小売価格
11、製品調達SLA：製品の調達に要する時間

**技術スタック**

1、LinuxまたはWindowsマシン
2、JDK 8以降
3、Apache Maven 3以降
4、Eclipse またはお好みの他のコードエディタ
5、Spring MVC 4.2.5
6、Hibernate 5.x
7、データベース Oracle、Mysql、SQL Server、RDS

####Eコマースプラットフォームのソリューションアーキテクチャ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/599d92db-2cca-8c0d-232e-297d90cb48d4.png)

####DevSecOpsでソリューションを導入する方法
1、JavaとJDKを使用してストアモジュールを構築します。これは、受注管理、ショップ管理、顧客管理、支払いモジュール、顧客サービスが含まれています。
2、継続的なデリバリーで左にシフトする。これは、WAF、不正行為防止、Server Guard、セキュリティテスト、CloudMonitorの追加など、セキュリティソリューションをモジュールに統合することで行います。
3、上記2ステップでマイクロサービスアーキテクチャを有効化します。これにより、ポータルを拡張性のあるものにし、ビジネスに俊敏性と整合性をもたらします。このソリューションを使えば、顧客のためにコードの変更をすぐに行うことができます。
4、Server Load Balancer、Auto Scaling、Elastic Compute Service (ECS)を使用して、クラウド展開に弾性コンピューティングを統合します。DevOpsライフサイクルの一部としてコンテナを使用しました。コンテナは、サービスの実行に必要なすべてのコンポーネント（ソフトウェア、システムライブラリ、ファイルシステム）を含むソフトウェアのパッケージを保持します。我々は、ショッピングのピークシーズンに顧客の需要が急増するのに合わせて、Auto Scalingを使用しました。

5、また、開発ライフサイクルの一部として、メッセージサービスを使用して自動化を支援することができます。Message Serviceは、典型的な大規模、高信頼、高カレンシーなソフトウェアコードの自動化に役立ちます。
6、オブジェクトストレージだけでなく、バックエンドもAPIで統合しましょう。大量の画像を処理するためのデータベースや、画像処理のためのトランスコード機能、音声や動画コンテンツを扱うためのデータベースも必要になるでしょう。
7、CDNとライフサイクルをマージして、エンドユーザーへのコンテンツ配信を高速化します。
上記の7つのステップが完了したら、Cloud Monitorでライフサイクルの運用を維持する必要があります。

#Eコマースポータルのホスティング
Eコマースポータルをホストするための多くの利用可能な方法があります。私のソリューションでは、[アリババクラウドのウェブホスティング](https://www.alibabacloud.com/product/hosting?spm=a2c65.11461447.0.0.5d052c92TUmXQW)ソリューションを選択しました。アリババクラウドのウェブホスティングは、FTPを使ってウェブサイトを構築したり、転送したりすることができる柔軟で使いやすい製品です。多種多様なウェブビルダーに対応しており、個人ブログからEコマースサイトまで、あらゆる用途に対応しています。必要なのは、お好みのパッケージを選択し、アリババクラウド管理コンソールにログインするだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/063dc828-4c7f-d21c-fc0b-be91faae572a.png)

次のステップとして、FTP認証情報を取得する必要があります。あなたのコンソールで、ドメインとウェブサイトの下にあるウェブホスティングセクションに移動します。ファイル管理に移動し、アップロードサイトを選択します。サイトのアップロードページでは、FTPの認証情報を取得するか、FTPログインのパスワードをリセットすることができます。

これが完了したら、FTPクライアントを使用してWebファイルを管理することができます。FTPクライアントとしてFilezillaを使用します。Filezillaを開き、ウェブホスティング管理コンソールから取得したホスト名、ユーザー名、パスワードを入力して、クイック接続を有効にする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/666d8779-431e-f454-fa2f-34a1ea7d49f8.png)

htdocsフォルダにコードベースをアップロードします。次に、ドメインをAlibaba Cloud Serverにバインドする必要があります。コンソールにアクセスして、左側のパネルのAdd-on Domainsをクリックする必要があります。そして、テスト用のドメイン名を入力してOKをクリックしてバインドします。CNAMEを使ってドメイン名を*.aliwebs.comに解決します。ドメイン名を叩くとホームページが表示されます。

###マイクロサービス
その後、kubernetesを使用してソリューション全体を統合し、自動デプロイを行いました。このアーキテクチャは非常に柔軟性が高く、マイクロサービスとの統合を可能にしています。私はHystrixやChaos monkeyなどのオープンソースのマイクロサービスをいくつか利用しました。

また、基本的なクリプトカレンシーウォレットと、blockcypherを使ったクリプトカレンシーAPI統合のためのAPIを追加しました。

#結論
Alibaba Cloud上でDevSecOpsの原則を用いて、crypto-walletを統合したeコマースアプリケーションを作成する能力を実証しました。このプラットフォームでは、DevOpsを利用した継続的なデプロイメントと自動化も活用しています。

継続的インテグレーションと継続的デプロイメント（CI/CD）はDevOpsの中核的な機能であるため、自動化がDevOpsモデル全体に大きく貢献していることは明らかです。自動化は、ソフトウェア開発メカニズムを強化するだけでなく、ソフトウェア開発モデルの手動努力によって作られた抜け穴を埋めることを目的としています。組織は、自動化を採用して、頻繁なリグレッションテストの繰り返しに取り組み、配信プロセスのペースを上げることができます。
そして最後にSecOpsでは、OAuthのようなセキュリティ機能もプラットフォームに統合されています。


リソース：
[https://github.com/Netflix/Hystrix](https://github.com/Netflix/Hystrix?spm=a2c65.11461447.0.0.5d052c92TUmXQW)
[https://github.com/Netflix/chaosmonkey](https://github.com/Netflix/chaosmonkey?spm=a2c65.11461447.0.0.5d052c92TUmXQW)
[https://www.blockcypher.com/dev/dash/#wallet-api](https://www.blockcypher.com/dev/dash/?spm=a2c65.11461447.0.0.5d052c92TUmXQW#wallet-api)
[https://block.io/docs/basic](https://block.io/docs/basic?spm=a2c65.11461447.0.0.5d052c92TUmXQW)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*