DevOpsのためのInfrastructure as Codeのデプロイメントを持つことの重要性

この記事では、**DevOps**のためのInfrastructure as Codeのデプロイメントを持つことの重要性について説明し、Resource Orchestration Serviceを使ってそれを実現する方法を紹介します。

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

[Alibaba Cloud Community Blog](https://www.alibabacloud.com/blog?spm=a2c65.11461447.0.0.7e87432bdCznKB)の著者であり、[Alibaba Cloud MVP](https://mvp.alibabacloud.com/mvp/detail/150?spm=a2c65.11461447.0.0.7e87432bdCznKB)でもあるAfzaal Ahmad Zeeshan氏によるものです。

#Infrastructure as Code ：概要
ラックサーバーやスタックサーバーの基本的なプロセスは、決して好ましいものではありません。ほとんどすべての主要な設定、微調整について、システムは人間の介入にのみ依存しており、リスクが高く面倒です。だからこそ、「Infrastructure as code」という空回りしたアイデアは、このプロセスを便利で効率的なものにするために、これらの細かなディテールをコード化して捉え、自動化への道を切り開くことを約束しているように思われます。本当の目的は、インフラストラクチャのダイナミズムに対処し、ユーザーベースの成長やビジネス能力の成長に合わせてインフラストラクチャを成長させることです。


サーバサイドの設定や、サーバマシン、設定ファイル、VM、その他のネットワークレベルの詳細を管理することは、多くの場合、非常に困難で複雑です。インフラストラクチャやウェブサーバの設定は、単にパッケージをインストールするだけではありません。APIやWebソリューションのためにネットワークトラフィックが流れるようにするためには、いくつかの設定を行う必要があります。クラッシュやダウンタイムがなくても、クラスタ内に新しいノードを追加すると、セットアップやインストールされているロードバランサーの変更が必要になる場合があります。

これらをすべて手作業で行うと、問題が発生するリスクが高まります。たとえインフラエンジニアが信頼性が高く、完璧な仕事をしていて、すべてを完璧に設定していたとしても、1つのリソースに永遠に依存することはできません。いつの日か新しいリソースがこれらのタスクを行わなければならなくなるかもしれませんが、その時に自動化とDevOpsの重要性を理解することになるでしょう。

コードの一部を書くことで、サイトの構成に関連付けられている大きな問題やリスクを軽減することができます。また、企業のためにスケーラブルなインフラストラクチャシステムを設計することが容易になり、柔軟性が増します。これらの利点は、Infrastructure as Codeのデプロイメントの性質に由来しています。

1、Infrastructure as Code は、構成と状態の値を保存するテキスト・ファイルで、通常は JSON ファイルとして表示されます。
2、すべてのファイルはバージョン管理されているため、必要に応じて監査、テスト、アップグレード、ロールバックが容易になります。
3、読みやすいようになっているため、デバッグやレビューが容易になります。
Infrastructure as Code (IaC とも表記します) の他にも、セキュリティ原則やツールの認証など、ガイダンスを必要とする重要な分野があります。この記事では、この概念がどのようなものであるかを説明するために、それらすべてに言及していきます。

#DevOpsの主な利点：
PowerShellやbashスクリプトの束を使ってプロセスやシステムを自動化するだけでは、全体のパフォーマンスやスピードを低下させることになり、標準的な方法がないため、エンジニアはスクリプトの実装やトラブルシューティングの際にトラブルに巻き込まれる可能性があります。しかし、戦略的な方法で実行すれば、物事はうまくいく可能性があります。実際には、サーバやマシンのアーキテクチャの設計が悪かったり、ネットワークのトポロジが混乱していたり、互換性のないツールを使用していたりと、様々な理由で状況を悪化させてしまい、結果として壊滅的なダメージを与えることになりかねません。そこで、問題は、IaCモデルが私たちに提供できる大きなメリットは何かということです。

DevOps チェーンの一部である IaC は、次のような点で役立ちます。

1、Infrastructure as Code のコード化された実装方法により、エンジニアはスクリプトや構成よりもインフラストラクチャの定義に集中して作業できるようになり、より優れたスケーラビリティと集中管理された変更のコントロールが可能になります。その結果、サーバーノードやその他のリソースではなく、自動化ツールの品質に重点が置かれるようになります。
2、反復はコストがかかることも、人間の努力を消費することもないでしょう。だから、何度もやる必要があるなら、それを自動化すればいい。ほんの数回のクリックで、要件や用途に応じてサーバーやマシンを毎日起動したり、シャットダウンしたりすることがどれだけ面白いことかを想定してみましょう。
3、意思決定や戦略を分析するために、異なるシステムで異なる構成をテストしたり比較したりすることができるという利点があります。これらの毎日のパフォーマンスのスナップショットは、最適化された方法でインフラストラクチャを実装するための洞察力のある要約を提供します。
4、一日の終わりに、インフラストラクチャの構成がうまくいかなかったり、コストに見合うメリットがほとんどない場合は、変更をロールバックして、インフラストラクチャのワーキングモデルをクラウド上に展開することができます。

これだけではなく、他の多くの主要な快適さと利点を持っています。CIやCDパイプライン、バージョニング、より高い精度での一貫性などです。

これらの概念の多くは、開発やソフトウェアエンジニアリングの側から来ていますが、インフラ管理や運用に応用することで、クラウドファーストの環境で組織が十分なパフォーマンスを発揮できるようになります。クラウド・ベンダーはオンデマンド・リソース・オーケストレーションをサポートしているので、IaCは新しいインフラストラクチャ構成をテストして、うまくいかなければ元のやり方に戻ることができます。

#アリババクラウドリソースオーケストレーションサービス
そこで、[リソースオーケストレーションサービス(ROS)](https://www.alibabacloud.com/product/ros?spm=a2c65.11461447.0.0.7e87432bdCznKB)は、運用チームと開発チームが協力してシンプルな方法で作業できるように、インフラストラクチャをコード化するという考え方を取り入れています。ROSは、私たちが頻繁に直面している設定や保存された設定を管理するための簡単な仕組みとフローを提供します。ROSの主要な機能の1つは、リソースアグリゲーションテンプレートで、インフラストラクチャ（ネットワーク、ストレージ、基礎となる構成など）のアーキテクチャまたは図式的な青写真を提供し、開発者がインフラストラクチャをコード化された方法で実装するために使用することができます。

Alibaba Cloud ROSを使用している間は、インフラストラクチャをLIFOスタックではなく、スタックとして考える必要があります。これにより、ECSやSLBなどの基本的なサービスやリソースを組み合わせて、顧客が利用できる完全なWebソリューションへと道を切り開いていくことで、Alibaba Cloud上に完全なソリューションを構築することができます。

Alibaba Cloud ROSは、インフラ設計やコンポーネントを決定し、Alibaba Cloudプラットフォーム上にデプロイすることができる無料サービスなので、新規アカウントを作成することができます。また、ほとんどのコンポーネントはサンプルテンプレートとして提供されており、プラットフォーム上に完全なソリューションをデプロイするために使用することができます。サンプルやソリューションは、基本的なNode.jsアプリから複雑なTensorFlowトレーニングソリューション、Hadoopベースのビッグデータコンポーネントまで多岐にわたります。それについては後の記事で掘り下げていき、これらのテンプレートがどのようにして完全なクラウドネイティブソリューションを素早くデプロイするのに役立つかを見ていきたいと思います。

#アリババクラウドROSの構造とSDK
ROSが提供するテンプレートを使用することで、簡単かつ迅速に物事を進めることができます。ROSが提供するリソースAPIとSDKは、完全な運用管理サイクルの設計と開発を容易にします。ROSは、DevOpsチームが継続的なインテグレーションとデリバリパイプラインを管理し、デプロイするのに役立ち、システムの自動化能力の向上を保証します。ROSテンプレートは以下の機能を提供します。

1、テンプレートの再デプロイ機能。
2、リント機能により、デプロイ前にテンプレートの構造を検証し、構造上の問題がないかどうかをテストすることができます。
3、アリババクラウドのリソース、セキュリティ、リージョンなどをネイティブにサポート。
さらに、ROSの言語とライブラリスイートには、幅広い管理コンソール、API、CLIが含まれており、サポートとリソースの可用性を確保しています。

#IaCのためのROSの理由
ROSを使用する第一の理由は、Alibaba Cloudのインフラストラクチャと直接統合されているため、ポータル内からリソースの作成やデプロイが簡単に行えることです。ROSは、当社のインフラストラクチャの高い弾力性を保証します。ROSは、スタック情報を使用してリソースの状態を確認する方法として前のセクションで説明したように、スタック内のリソースとその詳細について適切なチェックとバランスを維持します。スタック情報を使ってリソースの状態を確認する方法については前節で説明しましたが、これはスタック情報を使ってリソースの状態を確認する方法です。

ROSを使用することで、リソースの作成と継続的な変更が非常に簡単になります。すべての設定、クラウドリソース、時間の経過とともに蓄積されていく依存関係を含む、インフラストラクチャの完全な可視化をデザインすることができます。作成したテンプレートは編集可能なので、必要な変更を何度でも、何度でも再利用することができます。これをROSでどのように管理できるかを示すサンプル図がこちらです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/94cf5339-14d7-c087-e199-33563a5fcbee.png)


また、リソースの作成（依存関係や他のアリババクラウドサービスなどを定義するために、インフラの状態をJSON形式で記述しておく）管理や自動スケーリングは、たまにではありますが頻繁に必要になります。そのため、テンプレートを変更する機能は、手動プロセスではエラーが発生しやすい更新を管理された堅牢な方法で反映させるのにも役立ちます。

#コミュニティまたはサードパーティの IaC ツール
Alibaba Cloudのリソース管理をサポートするコミュニティベースのツールに興味があるのであれば、Terraformのような他の選択肢があります。Alibaba CloudはAlicloudのプロバイダとして利用可能で、Terraformを使ってリソースを管理することができます。Alibaba Cloudのリソース管理におけるTerraformの利用方法については[こちら](https://www.terraform.io/docs/providers/alicloud/index.html?spm=a2c65.11461447.0.0.7e87432bdCznKB)をご覧ください。

Ansible、Chef、Puppet、Jenkinsなど、インフラストラクチャとDevOpsの封じ込めをクラウドに適用するのに役立つ他のオプションが時々使用されています。しかし、この記事ではAlibaba Cloud ROSに焦点を当て、次のフェーズではさらに深く掘り下げて、実際にROSのテンプレートを使ってインフラストラクチャのインスタンスを作成する方法や、テンプレートのバージョン管理の方法を勉強していきたいと思います。

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