AWSでCI・CD環境を構築したはなし

AWSでCI・CD環境を構築したはなし

今回はAWSのサービスを利用して、CI・CD環境を整えることについて書きたいと思います。

というのも、最近CI・CD環境をAWSのサービスのみで構築したので、備忘録もかねてとなります。

今回利用していくサービスは

となります。

CodeCommitも利用したら完璧でしたが、今回はGitHubでやりましたので、その手順で書きたいと思います。

手順

今回は、GitHubで管理されている、ソースを、テスト、ビルドして、EC2上にデプロイするというものをサクッと環境構築したいと思います。

先ずは、GitHubのリポジトリに適当にデプロイするソースをコミットします。(省略します。)

今回はmasterブランチでやろうと思いますが、GitHubの特定のブランチを選択することができますので、選択の幅はかなり広いかなと思いました。

続いて、CodePipelineの準備をしていきます。

パイプラインの作成を選択することで、GUIのコンソールから作成することができました。

SourceのステージでGitHub WebHookとの連携をします。(これも簡単にできます。)

次にBuildステージの設定ですが、今回はCodeBuildを利用しますので、デプロイするリポジトリのルートディレクトリにbuildspac.ymlをコミットする必要があります。

下記はサンプルです。

version: 0.2

run-as: root

phases:
  build:
    commands:
      - ここでテストやビルドのコマンドを記述してください
artifacts:
  files:
    - '**/*'

ビルドグループは適宜作成。

コンソールのアーティファクト(artifact)の部分でSourceステージで同期したものを選択します。

私の場合は、CodeBuildで提供されているDockerのイメージを利用しましたが、自分で作成したDockerイメージでも動かすことができます。(ECRでイメージの保存をする感じになります。)

このとき出力アーティファクトはS3に保存しておくと良いかと思います。

最後にデプロイですが、今回はCodeDeployを利用するため、デプロイするリポジトリのルートディレクトリにappspac.ymlをコミットする必要があります。

下記はサンプルです。

version: 0.0
os: linux
files:
  - source: /
    destination: /var/src
hooks:
  BeforeInstall:
    - location: code_deploy/before_install.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: code_deploy/after_install.sh
      timeout: 300
      runas: root

上記の場合、対象のソースを/var/src配下に展開します。

また、デプロイ前とデプロイ語にshellを実行することが可能なため、配置後の権限だったりを変更することが可能となっています。

デプロイグループは適宜作成

今回はCodePipelineからのキックとなるため、対象のソースはCodeBuildで作成した、出力アーティファクトのものを選択します。

こんな感じで、AWSのサービスだけでもCI・CD環境を構築することができました。

最後に

今回はJenkinsやCircleCIを利用した方法ではなく、AWSのサービスのみでの構築について簡単に書いてみました。

AWSだけで行うメリットは、コスト管理だと思います。

他のサービスを利用すると、コスト管理が煩雑になったり、思わぬところでコストがかかったりします。

また、AWSのサービスですので、連携性はかなり良いし簡単に構築できるのもメリットかなと思いました。

また、CodeBuildは従量課金制なので、これも使いやすいかなと思いました。

余談ですが、先日Japan IT Weekに参加してきまして、とある方が、CI・CD環境の重要性について語っていました。

現在の開発はスピーディーに開発し、サイクルを早く回すことが重要となってくると思うので、CI・CDを自動化することは大切だと痛感しました。