24
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CI/CDハンズオン

Posted at

AWS CI/CDハンズオン

今回は細かな用語の説明などは飛ばして、基本的にCI/CDを体感するためのとりあえず手を動かすという内容となっておりますので、15分程度で実践することができると思います。

用語説明

継続的インテグレーション(CI)とは

開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行するDevOpsソフトウェア開発の手法のことです。
メリットとして、テストが頻繁に行われる。それによって、バグの発見にかかる時間が削減されます。また、機械的なチェックなどを自動化することができるので、開発者はアプリケーションの本質的なことに集中できるのです。

継続的デリバリ(CD)とは

ソフトウェア開発手法の一つで、コード変更が発生すると、自動的に実稼働環境へのリリース準備が実行されるというものです。継続的デリバリーは継続的インテグレーションを拡張したものです。
メリットとして、デプロイまでのリリースが自動化されることです。それによって、コードの変更を素早くリリース可能となります。

登場人物

CodePipeline

マネージドな継続的デリバリサービスです。

AWS環境にデプロイするパイプラインを容易に構築できます。

CodeBuild

マネージドなビルドを行うサービスです。

CodeDeploy

マネージドな自動デプロイサービスです。

全体の構成

『Githubのmasterブランチへのコミットをトリガーにソースコードを取得(CodePipelineでの処理を開始)→CodeBuildでのビルド開始→CodeDeployのデプロイ開始』という流れとなっております。
スクリーンショット 2020-02-16 2.10.12.png

実践

Githubリポジトリの準備

デプロイするソースコード自体はなんでも良いのですが、今回はGolangのソースコードを用意しておきました。こちらのソースコードを使用して頂いても、独自のソースコードを使用して頂いても構いません。(独自ソースコードや異なる言語で作成する場合は、buildspec.ymlファイルを修正する必要があります。)

デプロイ対象となるEC2やVPCの準備

今回、EC2やVPCはハンズオンのメインではないので、cloudformation.yamlというファイルを作成しておきました。こちらはAWSの infrastructure as codeにあたるもので、簡単に環境を構築できるようにしておきました。以下の手順に従ってCloudFormationを流してください。

  1. AWSマネジメントコンソールにログインし(東京リージョン)、EC2サービスを選択する。
  2. 左側の一覧から、キーペアを選択する。

スクリーンショット 2020-02-16 1.02.51.png
3. キーペアの作成から、Name: HandsonSampleKey, FileFormat: pemで作成する(CloudFormationの記述と結びついているので、違う名前にしたければ、CloudFormationでHandsonSampleKeyとなっている点を任意の名前に変更する)。
スクリーンショット 2020-02-16 1.03.18.png
4. CloudFormationサービスを選択する。
5. スタックの作成→新しいリソースを使用(標準)を選択する。
6. 以下の画像のように選択をし、Golangのソースコードのリポジトリに含まれるcloudformation.yamlファイルを選択する。
スクリーンショット 2020-02-16 0.57.48.png
7. 以下の画像のようにスタックの名前: Handsonと入力し、次へ進む。
スクリーンショット 2020-02-16 0.58.26.png
8. スタックオプションの設定とレビューは特に指定しなくて良いので、レビューまで進む。
9. 最後に以下の画像のようにチェックボックスのチェックを行い、スタックの作成を行う。
スクリーンショット 2020-02-16 0.58.56.png
10. 以下の画像のようにCREATE_COMPLETEとなれば終了である。
スクリーンショット 2020-02-16 1.07.30.png
11. EC2のIPv4パブリックIPにアクセスし、Nginxが起動しているか確認する。
スクリーンショット 2020-02-16 1.09.25.png
スクリーンショット 2020-02-16 1.09.46.png

今回のハンズオンのメイン

CodeDeploy作成

  1. CodeDeployサービスを選択し、アプリケーションの作成を選択する。
  2. 以下の画像のように入力し、作成を選択する。

スクリーンショット 2020-02-16 1.11.24.png
3. 成功画面が表示されると、そのままデプロイグループの作成を選択する。
スクリーンショット 2020-02-16 1.11.36.png
4. 以下の画像のように入力し、作成を選択する。
スクリーンショット 2020-02-16 1.12.30.png
スクリーンショット 2020-02-16 1.40.55.png
スクリーンショット 2020-02-16 1.14.11.png

CodePipelineの作成

  1. CodePipelineサービスを選択し、パイプラインの作成を選択する。
  2. 以下の画像のように入力し、次にを選択する。

スクリーンショット 2020-02-16 1.16.31.png
3. ソースプロバイダとして以下の画像のようにソースコード引っ張ってきたい場所を選択する。(リポジトリやブランチは自分のものを選択してください。この時、リポジトリやブランチに選択肢が表示されるまで少し時間がかかると思います。)
スクリーンショット 2020-02-16 1.31.46.png
4. CodeBuildの設定を行います。以下の画像のように選択し、プロジェクトを作成するを選択します。
スクリーンショット 2020-02-16 1.32.00.png
5. 以下の画像のように入力・選択を行い、CodePipelineに進むを選択する。
スクリーンショット 2020-02-16 1.33.11.png
スクリーンショット 2020-02-16 1.33.44.png
スクリーンショット 2020-02-16 1.33.57.png
6. デプロイステージの追加では、前項で作成したCodeDeployを使用します。以下の画像のように入力・選択を行う。
スクリーンショット 2020-02-16 1.34.22.png
7. 以上で全ての設定が終了したので、作成ボタンを押します。
8. 正常に終了していれば、以下の画像のようにCodePipelineが稼働します。
スクリーンショット 2020-02-16 1.34.36.png
9. CodePipelineが全て終了後(5分程度)、EC2のエンドポイント(IP)に、IPアドレス:8080/ping/jsonとアクセスすると、以下の画像のようにレスポンスが返ってくると成功です。

スクリーンショット 2020-02-16 1.49.06.png

まとめ

今回は、とりあえず手を動かしてCI/CDを体感したい人向けに、細かな用語等は説明しませんでしたが、少しでも作り込みたい(appspec.ymlbuildspec.ymlなど)となった時に、必ず細かな知識等も必要になってきますので、そこは別記事等で学ぶことをお勧めします。

24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?