近年、ソフトウェア開発がより大規模に行われるようになり、それに伴ってソースコードの管理や品質維持が非常に困難になりました。このような問題を解決するツールの一つが、CI/CDサービスです。今回はAWSのCI/CDを中心にお伝えし、なぜCI/CDが近年必要とされているのかについてご紹介するのと設定方法も紹介します。
ソフトウェア開発とは
ソフトウェア開発は、ユーザーのニーズ、マーケティング分析を踏まえて、それをソフトウェア製品として設計開発、リリースする一連のプロセスをいいます。
ソフトウェア開発では、システムソフトウェアやアプリケーションソフトウェアなど作られる製品はいくつかに分類されます。
例えば、表計算ソフトの「Excel」や文章作成ソフトの「Word」は世界的に使用されるアプロケーションソフトの一種です。
ソフトウェア開発の背景
ソフトウェア開発は開発手法が多様化し、国内外でアウトソーシングによる分散型開発も増加しています。
開発規模が大きくなるにつれて、多種多様なソフトウェア開発が行われているのです。
しかしその結果、ソースコードの管理や品質維持がより困難になるという問題が発生します。
ソフトウェア開発における具体的な問題
近年起こりうるソフトウェア開発における問題として、以下のようなことが挙げられます。
・品質管理チェックを怠り、品質維持ができないこと
・テスト早期不実施によるバグやテスト工程のコスト増大
・不具合の修正の管理が徹底して行われない
開発規模が大きくなればなるほど、プロジェクト管理が煩雑になり、企業にとって大きな損失につながることも少なくありません。
CI/CD とは?
CI/CDとはContinuous Integration/Continuous Deliveryの略で、日本語では継続的インテグレーション/継続的デリバリーといいます。
どちらもソフトウェア開発の手法の一つなのですが、具体的にはどんな点で活躍するのか、実際にみていきましょう。
CI/CDを超ざっくり解説!【何となく理解するIT】- クライン【KLEIN】
CIの意味
CIは開発者による新しいコード変更が定期的にビルド・テストされ、自動化される手法です。これにより、ソフトウェアのバグを早期に発見し、その発見にすぐ対応することができます。
CDの意味
CDとは継続的インテグレーション(CI)を拡張した手法で、ビルドやテストだけでなく、本番環境のリリースプロセス全体を自動化することです。これは、“いつ”、“どこの環境に”、デプロイすればよいのかという開発プロセスを自動化することを意味しています。この結果、開発スピードが格段に上がり、あらゆるミスも防ぐことができます。
CICDの利用のメリット
継続的テスト
CICDは新しいコードを継続的にテストします。これにより、新しいコードがサーバーに更新される前にシステムでエラーが発生するのを防ぐことができます。
ショートコード
システム全体が正常に動作しているときに、修正または改善が必要な部分のショートコードを更新できます。これにより、コードのテストとデバッグが簡単になります。プログラマーは、全体を確認しなくても、エラーコードを簡単に見つけることができます。
クイックリリース
更新された新しいコードを継続的に更新およびチェックします。システムエラーがある場合は、簡単に検出して特定し、切り分けることができます。これにより、コードリリースプロセスがより速く簡単になります。
高速MTTR
MTTRまたは平均解決時間。これは、実行中のシステムのエラーを修正するのにかかる時間を意味します。 CICDは、テスト用にコードをセクションに分割します。これにより、コードが分離され、プログラマーは全体を確認しなくてもエラーコードを簡単に見つけることができます。
簡単なメンテナンス
CICDは非常にわかりやすい見やすい形式であり、以前のシステムアップデートも保存されます。プログラマーは古いコードを調べて、システムを簡単にテストおよび保守できます。
AWSのCI/CDサービスについて
簡潔にお伝えすると、CI/CDとはソフトウェア開発を自動化しようとする考え方です。
このようなCI/CDを実現するツールはたくさんあるのですが、今回はAWS(アマゾン ウェブ サービス株式会社)のCI/CDサービスをご紹介します。
AWS CodeStar
サービスは機能によっていくつか種類に分かれます。
まずご紹介するのは、AWS CodeStarです。
こちらはソフトウェア開発のプロジェクトを作成、管理をするサービスのことで、たった数分でプロジェクトの設定を完了することができます。
このサービスは料金が発生することなく、サンプルコードを自動生成したりすることができるため、ソフトウェア開発初心者に大変お勧めのツールです。
AWS CodeCommit
続いてこちらは、AWSが提供するGitベースのバージョン管理サービスです。
メリットとしては、まず他のバージョン管理サービスと違い、初期設定がわずか数分で完了することが挙げられます。
また、サーバの管理が不要であることに加え、月額料金が他と比較して安価です。
AWSが提供する他の開発サービスとの連携も容易なため、多くの開発者にとって使いやすいと思われます。
AWS CodeBuild
続いてこちらは、バージョン管理サービス内のソースコードをビルドし、テストを自動的に実行するためのCIサービスです。
ご自分のビルド環境をこちらのツールに持ち込んで利用できるため、構築に必要なサーバのアップデートや管理も不要です。
また、使用料金はビルドの実行にかかった時間分だけ課金する仕組みであるため、コストの削減が期待できます。
AWS CodeDeploy
アプリケーションを構成しているファイル群をステージング環境のサーバ群に自動配置するサービスです。
CodebuildのようなAWSの他ツールと連携することにより、コードのコミットからデプロイまですべてを自動化することもできます。
AWS でCICDの設定方法
AWSには、CICDシステムとEC2とAWSのCodecommit間の接続、またgithubなどの他のソースコード管理サービスを構成できる独自のエコシステムがあります。今回はEC2とAWSのCodecommitの間にCDシステムを構築します。
ステップ1:Code Commitを作成する
CICDシステムをセットアップするには、AWSでコードを保存および管理するためのCode Commitリポジトリを作成する必要があります。
-AWSマネジメントコンソールにアクセスし、[サービス]メニューでCodeCommitを見つけてCodeCommitにアクセスします。
-ナビゲーションバーで、[リポジトリの作成]を選択して新しいリポジトリを作成します。
– [リポジトリの作成]ページで、作成するリポジトリの名前を入力し、[作成]を選択します
正常にリポジトリを作成した後、.ymlファイル(自動デプロイ構成ファイル)とスクリプトフォルダーを新しく作成したリポジトリにアップロードします。
ファイルappspec.ymlの内容:
version: 0.0
os: linux
files:
– source: /index.php
destination: /var/www/test/
hooks:
BeforeInstall:
– location: scripts/install_dependencies
timeout: 300
runas: root
– location: scripts/start_server
timeout: 300
runas: root
ApplicationStop:
– location: scripts/stop_server
timeout: 300
runas: root
フォルダースクリプト: http://file.tek1.top/sharing/zhXUe6o1v
ステップ2:S3にアクセスできるEC2のロールを作成します
-[サービス]メニューでIAMアイテムを見つけて、IAMアイテムにアクセスします –ナビゲーションバーで、[役割]と[役割の作成]を選択します
– [ロールの作成]ページの[一般的なユースケース]で、[EC2]をクリックし、[次のアクセス許可]をクリックします
-2ページでロールを作成し、ポリシーエントリをフィルタリングして検索するs3と入力し、AmazonS3FullAccessを選択して、[次へ:タグ]をクリックします。
– 3ページで、タグを入力し、[次へ:レビュー]を選択します
4ページで、役割名を入力し、[役割の作成]を選択します
これで、S3にアクセスできるEC2のロールの作成が完了しました。
ステップ3:CodeDeployロールを作成する
-[サービス]メニューでIAMアイテムを見つけて、IAMアイテムにアクセスします
-ナビゲーションバーで、[役割]と[役割の作成]を選択します
– [役割の作成]ページで、ユースケースCodeDeployを選択し、[次へ:アクセス許可]をクリックします
-2ページと3ページで役割を作成し、[次へ]をクリックし続けます
-4ページで、役割名を入力し、[役割の作成]をクリックします
これで、Codedeployロールが正常に作成されました
ステップ4:コードをデプロイするためのEC2サーバーを準備する
-ステップ2で作成したロールとしてIAMロールを使用してEC2サーバーを作成するか、上記のロールを使用して既存のEC2IAMロールを変更します。
– 次のコマンドを使用して、codedeployパッケージをサーバーにインストールします。
#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/centos
aws s3 cp s3://aws-codedeploy- ap-northeast-1/latest/install . –region ap-northeast-1
chmod +x ./install
./install auto
ここで、EC2のリージョンはap-northeast-1です。このパラメーターは、EC2のリージョンに応じて変更できます。
ステップ5:CodeDeployを作成する
-AWSマネジメントコンソールにアクセスし、[サービス]メニューでCodeDeployを見つけてCodeDeployにアクセスします。
-ナビゲーションバーで、[アプリケーション]と[アプリケーションの作成]を選択します
- [アプリケーションの作成]ページで、名前とプラットフォームパラメータを入力し、[アプリケーションの作成]を選択します
- 作成後、ナビゲーションバーで[展開グループの作成]を選択します
- [展開グループの作成]ページで、グループ名を入力します。サービスロールは、手順3で作成されたロールです。- [Environment Configuration]セクションで、Amazon Ec2インスタンスを選択し、デプロイに使用するEC2情報を設定します。
- [ロードバランシング有効]をオフにします。
次に、[デプロイグループの作成]をクリックして、新しいグループを作成します
ステップ6:CodePipeline(コードパイライン)を作成する
– ナビゲーションバーで、[コードパイプライン]を選択し、 [パイプラインの作成]ボタンを選択します
新しいパイプラインの作成のページで、パイプライン名を入力し、[次へ]を選択します
次のソースステージページで、新しいコードを取得するためのソースを選択します。 ここではAWSCodeCommitを使用します
ビルドステージページで、このラボは.ymlファイルを使用してデプロイするため、[スキップ]を選択します。
デプロイステージページで、プロバイダーをAWS Codedeployとして選択し、上記の手順で設定した情報を入力して、「次」ボタンを選択します。
最後の確認画面では、パイプラインの作成を選択します
パイプラインを作成した後、Codecommitで新しいコードをプッシュまたはアップロードしてテストを実行します。パイプラインは、Codecommitでソースを確認し、コードをサーバーに自動的にデプロイできるかを確認します。
マネージドサービスの利用
サーバーの運用管理や問題発生時の対応といった管理工程の全てを社内で完結しようとすると、多くのコストやリソースによって負担が大きくなってしまいます。
そのため、近年では一連の業務をアウトソーシングする考えが一般的で、そのようなサービスを「マネージドサービス」と言います。
サービス利用によるメリット
メリットには以下のような点が挙げられます。
・管理にかかっていた時間が短縮できる。
・デプロイ、ビルド、リリースのような工程を自動化することで、作業工程が削減できる
・その結果、以前よりも早くユーザーに新機能等を公開することができ、顧客満足度向上に繋がる。
これらのメリットをうまく活用し、導入を成功させましょう。
おわりに
CI/CDサービスをかしこく使用することで、時間や作業コストを効率的に削減することができます。
ぜひサービスを導入し、以前より快適なソフトウェア開発を実現しましょう。
ONETECHはベトナムオフショア開発に15年以上携わる日本人とベトナム人で構成されています。
最近オフショア開発は単なる下請けから事業会社のDXパートナーへと進化しています。DXパートナーとして単なる開発だけではなく開発チーム(Development)と運用チーム(Operations)がお互いに協調しDevopsの概念を採用しています。特にAWSを利用したWEB開発やパッケージからのWEB化やクラウド化に力を入れています。