アリババクラウドで開発・テスト・本番環境のインフラストラクチャを分離する方法

このチュートリアルでは、**Alibaba Cloud**で開発、テスト、および本番環境のインフラストラクチャをどのように分離するかを決定する際に考慮すべき重要な事項を説明します。

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

#前提条件
このチュートリアルの提案を試すには、Alibaba Cloudアカウントが必要です。まだアカウントを持っていない場合は、www.alibabacloud.com にアクセスしてサインアップしてください。機能を試すために、WindowsおよびLinuxサーバを作成する機能など、さまざまな無料トライアルが用意されています。

#背景
ウェブサイト、社内システム、アプリのバックエンドなどのクラウドベースのサービスのデプロイは、アリババクラウドを使えば非常に簡単です。1台または複数のクラウドサーバーとデータベースインスタンスを立ち上げ、その上でアプリケーションを開発し、ユーザーに公開するだけです。

しかし、最適な信頼性、セキュリティ、回復力、顧客満足度を確保するためには、2つ以上の別々のデプロイメント環境を維持することが不可欠です。このチュートリアルでは、これを実現するための最善の方法と、Alibaba Cloud上でこれらの方法を実装する方法を検討します。

#分離の必要性
ソフトウェア開発は一般的に、アイデアからプロトタイプ、評価プラットフォーム、完全に立ち上げられたシステムへとコードが進む過程で、いくつかの段階を経ることになります。時には、これらのステージは異なるチームで行われることもあり、開発者やテスターが本番システムで作業したり、ステージ間のコードやデータのデプロイに関与したりすることはほとんどありません。しかし、最近では開発と運用の両方の役割を兼ねる人、いわゆるDevOpsがトレンドとなっており、このような状況を変えつつあります。DevOpsでは、開発者は本番サーバへのコードのデプロイにも携わることが多くあります。

ソフトウェア開発がローカルのワークステーションで行われるか、クラウドで行われるかにかかわらず、ソフトウェアの完全なデプロイメントのライフサイクルには、通常、開発、テスト、ステージング、本番と呼ばれる最大4つのコンピューティング環境が含まれます。これらの目的は次のとおりです。

###開発の様子
開発マシンとは、開発者が日々の作業を行うコンピュータやサーバーのことです。開発者がコーディングやデバッグに必要とするソフトウェアツールの膨大なコレクションがあるため、開発用マシンは最終製品を保持するものを反映することはありません。例えば、セキュリティ上の制限は多くの場合オフになっており、重要なライブラリやその他のコンポーネントの複数のバージョンがインストールされていることがあります。そのため、開発マシンをテストに使うべきではありません。

###テスト
テストマシンとは、開発者が使用する環境とは別の環境でコードをテストできる場所のことです。テストマシンは、製品全体ではなく、特定の状況や項目のテストや評価に使用されることが多いです。例えば、購入を検討しているサードパーティ製のライブラリを、メインのデータセットの小さなサンプルで試してみることができます。

開発用、ステージング用、本番用のマシンとは異なり、テストマシンは頻繁に破壊されたり再構築されたりするのが一般的です。テスト対象の内容やテスト結果によっては、1日に何度も行われることもあります。

テストマシンは、ドキュメントの作成やユーザーエクスペリエンスのガイドに携わる人が、特定のアクションや条件の効果を調査するために使用することもあります。ドキュメントの読者が完了しなければならない正確なステップのセットを確立するために、テストを繰り返し実行し、その都度サーバーを破壊して再作成する必要があるかもしれません。

###ステージング
ステージングサーバーは、本番サーバーの正確な、またはほぼ正確なミラーです。サービスがエンドユーザーや有料の顧客にリリースされる前に、受け入れテストや負荷テストを行う場所を提供します。ちょっとした設定変更を除いて、ステージングサーバ上で開発を行うべきではありません。

パフォーマンスが重要でない場合は、本番環境と比較して、ステージングサーバに小型で低消費電力のインスタンスを使用することで、コストを節約することができます。

ステージングサーバは、デプロイとビルドのプロセスをテストしたり、自動または手動でデータを移行したりするための場所です。本番環境にデプロイする前に、必ず開発環境からステージングサーバにデプロイしてください。手順の一部として、誰がステージングサーバと本番サーバにコードをデプロイすることを許可されているかを指定するルール（文書化されたプロセスとアクセス制御リストの両方）を用意しておく必要があります。

あなたが代理店で働いている場合、ステージングサーバは、開発中の製品をクライアントがテストできるようにするのに便利です。企業環境では、ステージングサーバを使用することで、プロダクトマネージャー、ドキュメントの専門家、業界ジャーナリスト、その他の主要な利害関係者がサービスに事前にアクセスできるようになります。

ステージング環境は、単一のサーバーだけではありません。ウェブサーバ、データベースインスタンス、ファイアウォールルール、認証、ストレージ、監査など、すべての主要なコンポーネントを一緒にテストする方法です。

ステージングサーバは本番環境と同じであるため、技術サポートスタッフがミッションクリティカルなバグの報告を受けても、本番サーバの安定性に影響を与えることなく再現することができます。

また、ステージング環境は、バックアップや災害復旧の手順をテストするためにも使用できます。自動化スクリプトやバックアップからのリストアでステージング環境を削除して再構築できるのであれば、いざというときに本番環境でも同じことができるはずです。

ステージング環境が本番環境と大きく異なる場合、ステージング環境の完全な再構築が必要になることはよくあります。たとえば、新しい機能がステージング環境に展開されたが、その後、システムの製品バージョンにそれを含めないことが決定された場合です。

###生産
本番サーバーは、最終的にリリースされた製品やサービスが置かれている場所です。ライブサーバとしても知られています。開発や理想的にはテストはライブシステム上で行うべきではありません。設定の調整などのマイナーな変更は、常に最初にステージング環境でテストすべきです。

#理論と現実
理想的なシナリオは、上記のように4つのサーバ環境を維持することです。コードは開発サーバー上で開発され、テストシステムとステージングシステムを経て、最終的に本番環境に移行します。

しかし、すべての組織が4つのデプロイメント環境を維持するための人的資源と財政的資源を持っているわけではありません。必要な数は、業界の性質、規制要件、開発チームの規模、開発者やテスターの地理的な広がりによっても異なります。

最低限、本番環境とそれ以外のすべての環境に1台ずつ、計2台のサーバー環境を維持することを強くお勧めします。これにより、少なくとも、顧客に向けたシステムと、このような広範囲のユーザーにさらされるべきではないシステムとの間に、ある程度の分離が可能になります。

#おすすめポイントとテクニック
このチュートリアルの残りの部分では、Alibaba Cloud 上でソフトウェアデプロイメントを管理し、複数の環境を処理するための便利な方法を検討していきます。特定の状況に応じて、これらすべての提案または選択のみを実装することをお勧めします。

#別のアカウント
クラウドホスト型のサービスや製品を作成する場合、デプロイ環境を分離するための究極の手段は、別々のAlibaba Cloudアカウントを使用することです。1つのアカウントを本番用に、もう1つのアカウントをその他のすべてに使用することができます。あるいは、必要に応じて、dev、test、staging、productionの4つのアカウントを別々に管理することもできます。これは、異なるデプロイ段階の環境にあるコンポーネント間の通信が不用意に行われないようにするための究極の方法です。また、予算と支出を互いに分離しておくことで、予算と支出を管理するのにも最適な方法です。

新しいAlibaba Cloudアカウントを作成するには、www.alibabacloud.com にアクセスし、無料アカウントボタンをクリックするだけです。新しいアカウントの支払い方法を設定する必要がありますが、クレジットカード、PayPal、またはその両方を使用することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/64cdc253-6a00-a244-d464-1fc74f7dc508.png)


#VPCまたはリージョンを分ける
1つのAlibaba Cloudアカウントだけを維持したい場合は、データベースインスタンス、仮想スイッチやルーター、サブネットなど、サーバーや関連インフラストラクチャのグループを分離する方法もあります。複数のVPC（仮想プライベートクラウド）を作成し、各デプロイメントグループに1つずつ使用することができます。

デフォルトでは、サーバーはVPC間で通信できませんが、Express Connect製品を使用して通信を有効にすることができます。詳細は [https://www.alibabacloud.com/product/express-connect](https://www.alibabacloud.com/product/express-connect?spm=a2c65.11461447.0.0.728c6c87ZmjLEg) を参照してください。

Express Connectを使用して、異なるVPC上のサーバー間の通信や、異なるユーザーアカウント間の通信を可能にすることができます。

別のオプションとして、異なるゾーンまたはホスティングリージョンを使用して、本番サーバーと非本番サーバーを分離することもできます。Alibaba Cloudの19のホスティングリージョンには、それぞれ少なくとも2つのゾーンがあり、中には最大7つのゾーンがあるものもあります。デフォルトでは、サーバーはゾーン間で通信できないため、分離を強制するのに役立ちます。さらに、サーバーとVPCが同じリージョンとゾーンにある必要があるため、誰かが誤って間違ったVPCにサーバーを接続してしまうことはありません。

#命名規約
誰もがその目的を明確に理解できるように、インスタンスには正式な命名規約を使用してください。例えば、新しいサーバーや ApsaraDB RDS インスタンス、または VPC やセキュリティグループなどの他のアイテムに名前を付ける場合は、次のようなプレフィックスを追加します。

dev_

test_

staging_

prod_



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9f192cc0-cb87-950d-7136-5f9885b953fb.png)


WindowsサーバーやGUIを含むLinuxサーバーを使用している場合は、デスクトップの背景色や壁紙を設定して、サーバーの性質がすぐにわかるようにしてください。例えば、デスクトップの色を、すべての本番用サーバーでは濃い赤色に設定し、ステージングサーバーでは緑色に設定します。

#テストサーバーの構築
新しい機能やアイデアを試すために、短期間だけテストサーバーが必要な場合もあります。Alibaba Cloudでは、Webベースのコンソールを介してECSサーバーを素早く簡単に作成することができます。さらに、最近のすべてのバージョンでAlibaba Cloudをサポートしているオープンソース製品であるTerraformを使用することで、プロセスを自動化することができます。

ダウンロードは www.terraform.io から可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f40b81b0-e10a-9285-23cb-0c177104b020.png)


サーバー構築を自動化することで一貫性が保たれます。これは、ステージング・アーキテクチャが本番環境と同じであることを確認する必要がある場合や、短期間の単発テストのために新しいステージング環境を構築してリリースする必要がある場合に重要です。TerraformのスクリプトはJSONベースで人間が読めるので、簡単に修正や編集ができます。

短期間のテストを行う場合は、月額課金ではなく、クラウド・インスタンスの従量課金を選択しましょう。10分だけ必要な場合は、それだけの料金を支払うことになります。テストサーバーが必要ですが、継続的にアクセスする必要がない場合は、必要のないときにテストサーバーを停止すれば、料金は発生しません。

後で忘れてしまった場合に備えて、テストインスタンスを作成する際に有効期限と時間を設定しておきましょう。これは、コストを抑えるのに役立ちます。さらに、正確なホスティング地域が重要ではない場合は、いくつかは他のものよりも安いですので、各地域の価格を確認してください。

#データの分離
Alibaba Cloud上のApsaraDB RDSインスタンスを使用することで、基盤となるサーバーOSを保守する必要なくデータベースを作成することができます。本番用データベースにはより大きなインスタンスサイズ（より多くのプロセッサとRAM）を選択し、テストや開発時にはより低スペックのインスタンスを使用することでコストを削減できます。

ソフトウェアプロジェクトに1つ以上のデータベースが含まれている場合、本番用データベース、開発用データベース、テスト用データベース、ステージング用データベースが分離されていることを確認することが重要です。適切に分離されていないと、例えばステージング環境で誤って設定されたコードが、本番用データベースのインスタンスに誤って接続されてしまうことは、あまりにも簡単です。間違いに気づく頃には、ステージングサーバーのテスターがライブデータに変更を加えています。このような状況を避ける必要があるのは明らかです。別々の VPC を作成し、正しい VPC にデータベースインスタンスを配置することで、例えばステージングサーバーが本番用データベースとデフォルトで通信できないようにすることができます。これはつまり、誤ったコードが動作しないことを意味します。

テストや開発中に本番用のデータセットをすべて使用する必要はないかもしれないので、本番用以外の環境でコストを抑えるために、より小さなクラウドディスクとそれほど強力ではないApsaraDB RDSインスタンスを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f8e7307f-61c8-8116-e572-ddff45dfe4b0.png)


従来のECSサーバーインスタンスと同様に、ApsaraDB RDSデータベースインスタンスは、月額サブスクリプションまたは従量課金制で、後者は1時間あたりわずか0.05ドルからです。短期間のテストでは、常に従量課金を選択してください。

#ハイブリッド・オプション
メインのデータセンターがまだ社内にあり、クラウドへの移行がまだ完全に完了していない場合でも、ハイブリッド・セットアップの一部としてアリババ・クラウドを使用することができます。テストサーバーやステージングサーバーとして使用するために専用のハードウェアを購入するのは、特に24時間365日使用しない場合には、無駄が多くなってしまいます。その代わりに、必要なときにAlibaba Cloud上に従量課金型のインスタンスを作成し、使用しないときには削除または停止するようにしましょう。予約インスタンスでは、前払いでバウチャーを購入し、そのバウチャーを利用して従量課金サーバーを作成することができます。3年間の利用で全額前払いした場合、通常の従量課金と比較して45％もの節約になります。その後、購入したクーポンが不要と判断した場合は、返金を申請することができます。

特定のタスク（大規模なデータ変換など）を実行する必要があるが、実行時に気にしない場合は、先読み可能なインスタンスを使用することを検討してください。ここでは、需要と供給に応じて変化する市場で、サーバーに支払う時間当たりの価格を入札します。市場価格が入札価格よりも低くなると、サーバーは自動的に稼働を開始します。これにより、少なくとも1時間の稼働が保証されます。あなたが指定した場合と、市場価格が入札価格よりも高くなった場合のいずれか早い方で、サーバーは停止します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b7321877-17d2-19ec-56de-9fc90abce9d0.png)

#概要
賢明なITコンサルタントがかつて言ったことがありますが、もし本番用のサーバーだけを持っていてテスト用のサーバーがない場合、実際にはテスト用のサーバーだけを持っていて、開発用のサーバーがないという厳しい現実があります。セキュリティ、コンプライアンス、レジリエンス、ベストプラクティスの観点から、本番環境を開発とテストに使用しないこと、そして開発/テスト環境を全世界に公開しないことが非常に重要です。

これまで見てきたように、ステージングサーバは様々な理由で非常に便利です。実際の本番環境やライブ環境を動かす以外は、ほとんど何にでも使えます。したがって、すべてが社内や開発者のワークステーションで行われているため、開発やテスト用のサーバーが必要ない場合でも、本番環境を反映しつつ、一般的な品質保証やディザスタリカバリテストにも利用できるステージング環境を構築することは本当に重要です。

Alibaba Cloudを利用すると、開発、テスト、ステージング、本番用に別々のITインフラストラクチャを維持し、必要なときだけそれらの間にコードをデプロイすることが非常に簡単でコスト効率が良くなります。このチュートリアルでは、別々のシステムを維持することのメリットを説明し、Alibaba Cloudを使用してそれを実現する方法の例をいくつか示しています。

アカウントをお持ちでない場合は、www.alibabacloud.com にアクセスしてください。アカウントをお持ちでない場合は、登録は無料です。また、WindowsやLinuxサーバの作成など、ほとんどのサービスを無料で評価できるトライアルオファーも多数用意されています。

すでに1つのAlibaba Cloudアカウントを持っているが、配備環境間の分離を維持するために複数のアカウントの使用を検討している場合は、同じ手順で簡単に追加アカウントを設定することができます。


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