[レポート]DevOps essentials: CI/CDの入門ワークショップ #DOP201 #reinvent

本ブログはAWS re:Invent 2019のワークショップ『DevOps essentials: Introductory workshop on CI/CD practices』のレポートです。 現地でワークショップに参加はできていませんでしたが、ワークショップの資料が公開されていたので実際にやってみました。
2020.01.25

本ブログはAWS re:Invent 2019のワークショップ『DevOps essentials: Introductory workshop on CI/CD practices』のレポートです。

現地でワークショップに参加はできていませんでしたが、ワークショップの資料が公開されていたので実際にやってみました。

セッション概要

In this session, learn how to effectively leverage various AWS services to improve developer productivity and reduce the overall time to market for new product capabilities. We demonstrate a prescriptive approach to incrementally adopt and embrace some of the best practices around continuous integration and delivery using AWS developer tools and third-party solutions, including, AWS CodeCommit, AWS CodeBuild, Jenkins, AWS CodePipeline, AWS CodeDeploy, AWS X-Ray and AWS Cloud9. We also highlight some best practices and productivity tips that can help make your software release process fast, automated, and reliable.

このセッションでは、さまざまなAWSサービスを効果的に活用して、開発者の生産性を向上させ、新製品機能の市場投入までの時間を全体的に短縮する方法を学びます。 AWS CodeCommit、AWS CodeBuild、Jenkins、AWS CodePipeline、AWS CodeDeploy、AWS X-Ray、AWS Cloud9など、AWS開発者ツールとサードパーティソリューションを使用して、継続的な統合と配信に関するベストプラクティスを段階的に採用および採用する規範的なアプローチを紹介します。また、ソフトウェアリリースプロセスを迅速、自動化、および信頼性のあるものにするのに役立ついくつかのベストプラクティスと生産性のヒントも紹介しています。

ワークショップ資料

スライド

ワークショップ

レポート

ワークショップのゴール

  • DevOps変革の旅を開始する機会を得ることができる
  • AWSでCI/CDを取り入れることができる
  • Infrastructure as Code と DevOpsのパイプラインを取り入れることができる
  • 開発生産性を向上させる

ワークショップ概要

このワークショップでは、開発環境としてCloud9を構築し、AWS CodeCommit(マネージド型のソース管理サービス)、AWS CodeBuild(マネージド型のビルドサービス)、CodePipeline(マネージド型の継続的デリバリーサービス)、CodeDeploy(マネージド型のアプリケーションデプロイサービス)を利用して、ソフトウェアリリースプロセスを迅速かつ自動で実行できるような環境を作ります。

今回構築するアーキテクチャについては、次の図を参照してください。

※画像引用:https://github.com/awslabs/aws-devops-essential/

Lab 1. AWSクラウド上にプロジェクトを構築する

ワークショップの最初に、開発環境としてCloud9を構築していきます。

Cloud9は、クラウドベースの統合開発環境(IDE)であり、ブラウザだけでコードを記述、実行、デバッグができ、コードエディター、デバッガー、ターミナルが含まれています。 Cloud9には、一般的なプログラミング言語に不可欠なツールとAWS Command Line Interface(CLI)があらかじめインストールされており、すぐに開発を始めることができます。また、Cloud9環境は、AWSマネジメントコンソールにログインしたユーザーと同じ権限でAWSリソースにアクセスできます。Cloud9を利用すればAWSリソースにアクセスするにあたって、アクセスキーを発行する必要はありません。

Cloud9構築後、次の通りプロジェクトに必要な環境を構築していきます。

  • Stage 1: Git(CodeCommit)リポジトリの作成
  • Stage 2: Gitリポジトリのクローン
  • Stage 3: 変更をGitリポジトリにコミットする
  • Stage 4: Code Build実行のための準備
  • Stage 5: Code Buildでビルドしてみる

Lab 1を実施することで、CodeCommitを使用してバージョン管理付きのGitリポジトリを作成し、CodeBuildを使用してビルド後の成果物をS3へ保存する環境を構築できました。

Lab 2. テスト環境を自動でデプロイする

Lab 2では、実際にテスト環境をデプロイしていきます。

次の手順で環境を構築していきます。

  • Stage 1: テスト環境構築のための準備
  • Stage 2: CodeDeployアプリケーションとデプロイメントグループの構築
  • Stage 3: アプリケーションデプロイのための準備
  • Stage 4: アプリケーションをデプロイする

デプロイコンソールのステータスを確認すると、デプロイが失敗している場合があります。そういう時は、エラーメッセージをよく読みましょう

私はこういったエラーを発生させて、デプロイが失敗していました。

CodeDeploy実行時のS3のEtag指定が誤っていたため、修正して再デプロイしたところ、問題なくテスト環境のデプロイができました。

Lab 2を実施することで、CodeDeployアプリケーションとデプロイメントグループを作成しました。また、buildspec.ymlを変更して、デプロイに必要なコンポーネントを追加しました。そして、テストサーバーへのアプリケーションデプロイをすることができました。

Lab 3. CodePipelineを利用してCI/CDを構築する

Lab 3ではCodePipelineを利用したCI/CDができるようにしていきます。

次の手順でCodePipelineを構築していきます。

  • Stage 1: CodePipelineの構築(マネジメントコンソール)
  • Stage 2: プロダクション環境のためのCodeDeployのデプロイメントグループの構築
  • Stage 3: CodePipelineの修正(マネジメントコンソール)
  • Stage 4: 手動承認アクションの追加
  • Stage 5: CodePipelineで手動承認アクションの実行

Lab 3を実施することで、継続的なコードのビルドとデプロイのためのCodePipelineが構築できました。また、CodePipelineを変更して、運用環境にコードをデプロイする前に手動承認アクションを追加しました。

次の画像のように、テスト環境の動作を確認したうえで、CodePipeline上で手動承認してプロダクション環境へのデプロイを自動化したPipelineが構築できでいます。

Lab 4(オプション). CodePipelineの中でテストとしてLambdaを利用する

Lab 4ではプロダクションのデプロイ前に自動でテストできるようにしていきます。

次の手順でテスト用のLambdaを構築していきます。
ワークショップの手順では、LambdaのランタイムにNode.js 8.10を使用していましたが、Node.js 12.xでも問題なく実行できました。

  • Stage 1: Lambdaの構築
  • Stage 2: CodePipelineのアクションにLambdaを追加する
  • Stage 3: CodePipelineでテスト用のLambdaを実行する

Lab 4を実施することで、Lambda関数を利用してアプリケーションのデプロイ前に自動でテストができました。

クリーンアップ

これでワークショップは終了です。
ワークショップが終わった後は無駄にお金がかからないよう、次のAWSリソースを削除しておきましょう。

  1. CodePipelineの削除
  2. CodeDeployの削除
  3. CodeBuildの削除
  4. CodeCommitの削除
  5. Lambdaの削除
  6. CloudFormationの削除
  7. Cloud9の削除
  8. Simple Notification Service(トピック、サブスクリプション)の削除

感想

AWSのCodeシリーズ(CodePipeline, CodeCommit, CodeBuild, CodeDeploy)を利用することで、さくっとCI/CD環境の構築を体験することができるワークショップでした。

オプション扱いでさらっと流されていますが、Cloud9で簡単にLambdaを構築してデプロイが体験できるのもよいです。

AWSでCI/CD環境の構築を試してみたい方にオススメのワークショップです。