1. ホーム
  2. 記事一覧
  3. CodeCommitとCodePipelineによるCICDパイプラインの構築ハンズオン

2024.05.13

CodeCommitとCodePipelineによるCICDパイプラインの構築ハンズオン

はじめに

ハンズオンの目的と概要

このハンズオンでは、AWSのCodeCommit、CodePipeline、およびCodeBuildを使用して、シンプルな継続的インテグレーション/継続的デリバリー(CICD)パイプラインを構築します。このパイプラインは、ソースコードのバージョン管理からビルド、デプロイまでのプロセスを自動化するものです。今回のハンズオンを通じて、以下の技術を習得できます。

  1. CodeCommit

    ソースコードをホストするGitリポジトリの設定

  2. CodePipeline

    ビルドとデプロイを自動化するパイプラインの設定

  3. CodeBuild

    ビルドプロセスの自動化

  4. ECS

    アプリケーションのコンテナ化とデプロイ

最終的には、CodeCommitにコードをプッシュすると、自動的にビルドとデプロイが行われる環境を構築します。

GitHubを使用したCICDはこちらの記事で解説しています。

https://envader.plus/article/354

使用する技術スタックの紹介

  • CodeCommit

    AWSが提供するソースコードのホスティングサービスで、Gitリポジトリとして機能します。

  • CodePipeline

    ビルド、テスト、デプロイの各ステージを自動化するサービスです。

  • CodeBuild

    ソースコードのビルドとテストを行う完全マネージド型ビルドサービスです。

  • ECS (Elastic Container Service)

    コンテナ化されたアプリケーションのデプロイ、管理を行うためのサービスです。

CICD(継続的インテグレーションとデリバリー)のメリット

CICDパイプラインを導入することで得られるメリットを紹介します。

コード品質の向上

自動テストを組み込むことで、コードの品質を高めることができます。

デプロイの高速化

手動デプロイの手間を省き、リリースサイクルを短縮できます。

チームの効率化

コードのマージやデプロイが自動化されることで、チームメンバーの負担が軽減されます。

実際の開発での利用方法と今回のハンズオンの位置付け

現代のソフトウェア開発において、CICDパイプラインは開発効率と品質を向上させるために不可欠な要素です。以下に、各サービスが実際の開発でどのように用いられるかを簡単に説明します。

  • CodeCommit

分散バージョン管理システムとして、チームメンバー間でのコード共有とバージョン管理を容易にします。

  • CodePipeline

継続的なインテグレーションとデリバリーを支えるパイプラインとして、コードの変更が自動的にビルド、テスト、デプロイされるプロセスを確立します。

  • CodeBuild

ソースコードのビルドとテストを自動化し、一貫性のあるビルド結果を得るために使用されます。

  • ECS

マイクロサービスアーキテクチャを採用するプロジェクトで、コンテナ化されたアプリケーションのスケーリングと管理を簡素化します。

今回のハンズオンでは、これらの技術を統合して、実際の開発プロセスに即したCICDパイプラインを構築します。これにより、開発者はコードの変更が自動的にテストおよびデプロイされる仕組みを理解し、実践的なスキルを身につけることができます。

前提条件

必要なアカウントと権限

  • AWSアカウント

    AWSのサービスを利用するために必要です。

  • IAMロール

    CodePipelineやCodeBuildに必要な権限を持つIAMロールを設定しておく必要があります。

必要なツール

  • AWS CLI

    AWSのサービスをコマンドラインから操作するためのツールです。

  • Git

    ソースコードのバージョン管理を行うためのツールです。

環境設定

AWS CLIのインストールと設定

  1. AWS CLIのインストール

  2. AWS CLIの設定

    コマンドラインで以下を実行し、AWS CLIを設定します。

    aws configure

    プロンプトに従い、AWS Access Key ID, AWS Secret Access Key, Default region name, Default output formatを入力します。

CodeCommit リポジトリの作成

CodeCommit リポジトリの作成手順

  1. AWS Management Consoleにログイン

  2. CodeCommitコンソールに移動

  3. リポジトリの作成

    • 「リポジトリを作成」をクリック
    • 「リポジトリ名」を入力(例: MySampleRepo
    • 必要に応じて「説明」を入力
    • 「リポジトリの作成」をクリック
  4. 初期設定

    • README.md ファイルの追加や基本的なディレクトリ構造の作成

アプリケーションコードの準備

サンプルアプリケーションの準備

  1. ローカル環境にリポジトリをクローン

    git clone https://git-codecommit.<region>.amazonaws.com/v1/repos/MySampleRepo
    cd MySampleRepo
  2. 簡単なアプリケーションコードの説明

    ここでは、シンプルなNode.jsアプリケーションを例にします。

    • index.js:
      const http = require('http');
      const port = process.env.PORT || 3000;
      
      const requestHandler = (request, response) => {
        response.end('Hello World!');
      };
      
      const server = http.createServer(requestHandler);
      
      server.listen(port, (err) => {
        if (err) {
          return console.log('something bad happened', err);
        }
        console.log(`server is listening on ${port}`);
      });
  3. ローカル環境での動作確認方法

    • 必要なパッケージをインストール
      npm install
    • アプリケーションを起動
      node index.js
    • ブラウザでhttp://localhost:3000にアクセスし、「Hello World!」が表示されることを確認
  4. コードをCodeCommitにプッシュ

    • 変更をステージング
      git add .
    • コミットメッセージを作成
      git commit -m "Initial commit"
    • リポジトリにプッシュ
      git push origin master

CodePipeline の設定

パイプラインの作成

  1. AWS Management Consoleにログイン
  2. CodePipelineコンソールに移動
  3. パイプラインの作成
    • 「パイプラインを作成」をクリック
    • パイプライン名を入力(例: MySamplePipeline
    • その他はデフォルトのまま、「次へ」をクリック

ソースステージの設定

  1. ソースプロバイダーを選択
    • 「AWS CodeCommit」を選択
  2. リポジトリ名とブランチを選択
    • リポジトリ名: MySampleRepo
    • ブランチ名: master
  3. 次へをクリック

ビルドステージの設定

  1. ビルドプロバイダーを選択

    • 「AWS CodeBuild」を選択
  2. CodeBuildプロジェクトの作成

    • 「プロジェクトの設定」で「プロジェクトを作成」を選択
    • プロジェクト名を入力(例: MySampleBuild
    • 環境イメージ: マネージドイメージ
    • オペレーティングシステム: Ubuntu
    • ランタイム: Standard
    • イメージ: aws/codebuild/standard:7.0
    • Buildスペックセクションでbuildspecファイルを使用するを選択

    buildspec.ymlは以下の内容でファイルを作成し、リポジトリのルートディレクトリ(index.js と同じ階層)に配置

  3. buildspec.yml ファイルの内容

    version: 0.2
    
    phases:
      install:
        runtime-versions:
          nodejs: 12
        commands:
          - echo Installing NPM dependencies...
          - npm install
      build:
        commands:
          - echo Build started on `date`
          - npm run build
    
    artifacts:
      files:
        - '**/*'
  4. パイプラインの保存と実行

    • デプロイステージは今回設定せず「次へ」をクリックし、パイプラインの作成を完了します。

以上で、CodeCommitとCodePipelineを使用したCICDパイプラインの構築が完了です。次回の記事では、ECSを使用してアプリケーションをデプロイし、動作確認を行います。

まとめ

本記事では、AWS の CodeCommit、CodePipeline、CodeBuild を活用して、CI/CD パイプラインを構築する方法を学びました。主な内容は以下の通りです。

  • CodeCommit でソースコードリポジトリを作成し、バージョン管理を行う
  • 簡単な Node.js アプリケーションをサンプルとして用意する
  • CodePipeline を設定し、ソースコードの変更を検知するソースステージとビルドを実行するビルドステージを作成する
  • CodeBuild 用のビルド仕様ファイル buildspec.yml を作成し、リポジトリに追加する

次の記事では、このパイプラインを拡張し、ECSを使用してアプリケーションのデプロイステージを追加し、デプロイと動作確認を行います。これにより、さらに実践的なCICD環境を構築し、開発プロセスの効率化を実現します。

https://envader.plus/article/377

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事

2020.02.25

完全未経験からエンジニアを目指す爆速勉強法

USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

  • キャリア・学習法
  • エンジニア

2024.03.18

初心者でもサクッとDockerでアプリをデプロイする方法

この記事では、初心者でもDockerを使って簡単なWebアプリケーションをデプロイし、実際に動かせるように、基本的な流れを丁寧に解説します。さらに、アプリケーションの更新や削除方法も説明するので、Dockerを使いこなせるようになるはずです。

  • Docker
  • ハンズオン

2024.04.06

[ハンズオン]AWS Backupで作成したAMIをLambdaを使用して起動テンプレートに適用

この記事では、AWS上でのリソース管理を自動化する方法を実践的に解説します。特に、開発環境やプロダクション環境におけるデプロイメントプロセスの簡素化や、ディザスタリカバリ準備の一環として、最新のAMIを定期的に起動テンプレートに適用する自動化手法を紹介します。

  • AWS
  • インフラエンジニア
  • ハンズオン

2024.03.24

JavaScriptって何?レベルの初心者がとりあえず触ってみるハンズオン

このハンズオンを通じて、プログラミング初心者やJavaScriptに苦手意識を持つ方でも、JavaScriptの使い方を基礎から簡単に学べます。特別な経験や知識は一切必要ありません。パソコンとインターネットの基本操作ができれば、準備は完了です。わからないことがあっても大丈夫。一旦はこういうものだと思って進めてみてください。

  • ハンズオン
  • JavaScript
  • フロントエンド