Slide 1

Slide 1 text

第127回 雲勉【オンライン】 今年こそCI/CDをはじめよう︕ ~CodeBuildとマブダチになる〜

Slide 2

Slide 2 text

0. 自己紹介 松田 啓佑 ● 所属 ○ クラウドインテグレーション事業部 構築第2セクション ● 業務 ○ Webアプリケーション開発における非機能領域全般を担当 ○ バックエンド、インフラ、オブザーバビリティ ● 好きなAWSサービス ○ Amazon ECS ○ AWS Step Functions ● 認定 ○ 2023 Japan AWS Top Engineers ○ iretテクニカルアンバサダー advanced ● 趣味 ○ テニス ○ 飲酒 2

Slide 3

Slide 3 text

本日のゴール 3 CodeBuildの基礎を理解することにより、AWS Codeシリーズを利用する敷居を下げる

Slide 4

Slide 4 text

本日のアジェンダ 4 1. CI/CDとは 2. CodeBuildとは 3. 実際にCodeBuildを使ってみる

Slide 5

Slide 5 text

5 1. CI/CDとは

Slide 6

Slide 6 text

6 CI/CDとは ● Continuous Integration/Continuous Delivery = 継続的インテグレーション/継続的デリバリー ● アプリケーション開発の各ステージを自動化することにより、アプリケーション開発を高速/効率化する手法

Slide 7

Slide 7 text

CI/CDがない世界 7 時間がかかる ヒューマンエラーが発生する ソースコードの変更 ビルド実施 テスト実施 デプロイ実施 リリース 人がやる範 囲

Slide 8

Slide 8 text

CI/CDがある世界 8 ソースコードの変更 ビルド実施 テスト実施 デプロイ実施 リリース 人がやる範 囲 時間はかからない ヒューマンエラーはゼロ

Slide 9

Slide 9 text

9 CI/CDの重要性 アジリティ(俊敏性)が求められる昨今のアプリ開発において CI/CDは必要不可欠な要素

Slide 10

Slide 10 text

10 アプリケーションの一般的なリリースサイクル ● ソース:ソースコードの更新 ● ビルド:コンパイル、単体テスト、コンテナイメージの作成 ● テスト:結合テスト、UIテスト、ロードテスト ● デプロイ:本番環境への適用 CI/CDではこれら各フェーズを自動化する => 自動化した一連のプロセスをCI/CDパイプラインと呼 ぶ ソース ビルド テスト デプロイ

Slide 11

Slide 11 text

11 2. CodeBuildとは

Slide 12

Slide 12 text

12 AWS Codeシリーズとは AWSにおいて、アプリケーションのリリースプロセスを担うサービス 本日の主役

Slide 13

Slide 13 text

13 AWS Codeシリーズとは 脇役たちの紹介 プライベートなGitリポジトリ AWSリソースへのアプリケーション をデプロイする 他のCodeシリーズを連携させて、 CI/CDパイプラインを構成する

Slide 14

Slide 14 text

14 CodeBuildとは CodeBuildを一言で表すと、、、 サーバレスな何でも屋さん

Slide 15

Slide 15 text

15 CodeBuildで何ができるの? ● パイプラインにおいてコマンド、プログラムを実行することができる。 ● 実行による成果物を後続処理(主にデプロイ)に利用できるようにする。

Slide 16

Slide 16 text

16 CodeシリーズによるCI/CDパイプラインの構成イメージ 1. CodeCommitレポジトリの発火対象ブランチに変更が加わる 2. CodeBuildにてソースコードのビルドを行う(場合によってはテストを実行する) 3. ビルドされた成果物をCodeDeployにて対象(EC2やECS)にデプロイする ビルド、テスト = コマンド、プログラムの実行

Slide 17

Slide 17 text

17 CodeBuildの要素 CodeBuild ビルドプロジェクト ビルド ビルド ビルド ● ビルドプロジェクト = ビルド内の処理を定義した金型 ● ビルド = ビルドプロジェクトを元に実行されるビルド処理そのもの

Slide 18

Slide 18 text

18 サーバレスなビルド環境 ● ビルドの実行ごとにコンテナが起動しビルド環境を構築する ● コンテナのオペレーティングシステムやプログラミング言語ランタイムは指定可能 ● 自前のDockerイメージも利用可能 ビルド環境となるコンピューティングリソースを管理する必要な し

Slide 19

Slide 19 text

19 アーティファクト ● パイプライン内の処理にて利用されるファイル群 ● アーティファクトはアーティファクトストア(S3バケット)にて保存される

Slide 20

Slide 20 text

20 アーティファクトストア アーティファクトストア パイプラインの各処理にてファイルを受け渡すためにアーティファクトストアが利用される

Slide 21

Slide 21 text

21 ビルドスペックファイル ● ビルドの内容を記述したyaml形式のファイル ● 各ビルドフェーズにて実行するコマンド、プログラムを定義する ● 必須ではないが、特別な理由がない限りは利用するべき

Slide 22

Slide 22 text

22 buildspec.yml version: 0.2 env: variables: ENV: "prd" phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase… build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: files: - target/messageUtil-1.0.jar [version] buildspecのバージョン。 0.2以外を選択するケースはない。 [env] ビルド環境で利用する環境変数。 パラメータストアやシークレット マネージャーとの連携も可能。 [phase] ビルド内の各フェーズごとの処理 内容などを定義。 runtime-versionsを定義することで 、ビルド環境の言語ランタイム 指定することが可能。 commandsにコマンドを定義する。 [artifacts] アーティファクトストアに出力す るファイル。後続処理にて利用す るものを指定する。

Slide 23

Slide 23 text

23 その他機能 VPC内ビルド環境 ビルド環境コンテナをVPC内にて起動することにより、ビルド環境からVPC内のリ ソースへのアクセスが可能。テストなどにてRDSなどを利用することができる。 ビルド環境へのログイン Session Managerによりビルド環境コンテナにログインすることができる。トラブル シュート時に重宝。 バッチビルド 複数のビルドの処理を並列で同時に実行させたりすることができる。 テストレポート ビルドにて実行したテスト結果をレポート形式としてグラフなどの形式で出力するこ とができる。対応しているフォーマットにしたがっていれば利用可能。 ビルドバッジ ビルドステータスを表す埋め込み可能なイメージ。ビルドバッジURLとしてreadme などに埋め込むことで利用できる。 ビルド結果の通知 SNSやChatbotにビルド結果を通知する。これによりビルドが完了したタイミングで Slackやメールを受信することができる。

Slide 24

Slide 24 text

24 3. 実際にCodeBuildを使ってみる

Slide 25

Slide 25 text

25 実際に使ってみる ステップ① : ビルド内でコマンドを実行する ステップ② : CodeCommit/CodePipelineと連携させる ステップ③ : アーティファクトを受け渡す ステップ④ : ビルド環境にログインする ステップ⑤ : Pythonプログラムを実行して、テストレポートを出力する ステップ⑥ : ビルドバッジを利用する

Slide 26

Slide 26 text

26 ステップ① ビルド内でコマンドを実行する

Slide 27

Slide 27 text

27 ステップ② CodePipeline/CodeCommitと連携させる

Slide 28

Slide 28 text

28 ステップ③ アーティファクトを受け渡す

Slide 29

Slide 29 text

29 ステップ④ ビルド環境にログインする

Slide 30

Slide 30 text

30 ステップ⑤ Pythonプログラムを実行して、テストレポートを出力する

Slide 31

Slide 31 text

31 ステップ⑥ ビルドバッジを利用する