AWS CI/CDハンズオン
今回は細かな用語の説明などは飛ばして、基本的にCI/CDを体感するためのとりあえず手を動かすという内容となっておりますので、15分程度で実践することができると思います。
用語説明
継続的インテグレーション(CI)とは
開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行するDevOpsソフトウェア開発の手法のことです。
メリットとして、テストが頻繁に行われる。それによって、バグの発見にかかる時間が削減されます。また、機械的なチェックなどを自動化することができるので、開発者はアプリケーションの本質的なことに集中できるのです。
継続的デリバリ(CD)とは
ソフトウェア開発手法の一つで、コード変更が発生すると、自動的に実稼働環境へのリリース準備が実行されるというものです。継続的デリバリーは継続的インテグレーションを拡張したものです。
メリットとして、デプロイまでのリリースが自動化されることです。それによって、コードの変更を素早くリリース可能となります。
登場人物
CodePipeline
AWS環境にデプロイするパイプラインを容易に構築できます。
CodeBuild
CodeDeploy
全体の構成
『Githubのmasterブランチへのコミットをトリガーにソースコードを取得(CodePipelineでの処理を開始)→CodeBuildでのビルド開始→CodeDeployのデプロイ開始』という流れとなっております。
実践
Githubリポジトリの準備
デプロイするソースコード自体はなんでも良いのですが、今回はGolangのソースコードを用意しておきました。こちらのソースコードを使用して頂いても、独自のソースコードを使用して頂いても構いません。(独自ソースコードや異なる言語で作成する場合は、buildspec.yml
ファイルを修正する必要があります。)
デプロイ対象となるEC2やVPCの準備
今回、EC2やVPCはハンズオンのメインではないので、cloudformation.yaml
というファイルを作成しておきました。こちらはAWSの infrastructure as codeにあたるもので、簡単に環境を構築できるようにしておきました。以下の手順に従ってCloudFormationを流してください。
- AWSマネジメントコンソールにログインし(東京リージョン)、EC2サービスを選択する。
- 左側の一覧から、キーペアを選択する。
3. キーペアの作成から、Name: HandsonSampleKey
, FileFormat: pem
で作成する(CloudFormationの記述と結びついているので、違う名前にしたければ、CloudFormationでHandsonSampleKey
となっている点を任意の名前に変更する)。
4. CloudFormationサービスを選択する。
5. スタックの作成→新しいリソースを使用(標準)を選択する。
6. 以下の画像のように選択をし、Golangのソースコードのリポジトリに含まれるcloudformation.yaml
ファイルを選択する。
7. 以下の画像のようにスタックの名前: Handson
と入力し、次へ進む。
8. スタックオプションの設定とレビューは特に指定しなくて良いので、レビューまで進む。
9. 最後に以下の画像のようにチェックボックスのチェックを行い、スタックの作成を行う。
10. 以下の画像のようにCREATE_COMPLETEとなれば終了である。
11. EC2のIPv4パブリックIPにアクセスし、Nginxが起動しているか確認する。
今回のハンズオンのメイン
CodeDeploy作成
- CodeDeployサービスを選択し、アプリケーションの作成を選択する。
- 以下の画像のように入力し、作成を選択する。
3. 成功画面が表示されると、そのままデプロイグループの作成を選択する。
4. 以下の画像のように入力し、作成を選択する。
CodePipelineの作成
- CodePipelineサービスを選択し、パイプラインの作成を選択する。
- 以下の画像のように入力し、次にを選択する。
3. ソースプロバイダとして以下の画像のようにソースコード引っ張ってきたい場所を選択する。(リポジトリやブランチは自分のものを選択してください。この時、リポジトリやブランチに選択肢が表示されるまで少し時間がかかると思います。)
4. CodeBuildの設定を行います。以下の画像のように選択し、プロジェクトを作成するを選択します。
5. 以下の画像のように入力・選択を行い、CodePipelineに進むを選択する。
6. デプロイステージの追加では、前項で作成したCodeDeployを使用します。以下の画像のように入力・選択を行う。
7. 以上で全ての設定が終了したので、作成ボタンを押します。
8. 正常に終了していれば、以下の画像のようにCodePipelineが稼働します。
9. CodePipelineが全て終了後(5分程度)、EC2のエンドポイント(IP)に、IPアドレス:8080/ping/json
とアクセスすると、以下の画像のようにレスポンスが返ってくると成功です。
まとめ
今回は、とりあえず手を動かしてCI/CDを体感したい人向けに、細かな用語等は説明しませんでしたが、少しでも作り込みたい(appspec.ymlやbuildspec.ymlなど)となった時に、必ず細かな知識等も必要になってきますので、そこは別記事等で学ぶことをお勧めします。