Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

iret.kumoben

February 08, 2024
Tweet

More Decks by iret.kumoben

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 5
    1. CI/CDとは

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. CI/CDがある世界
    8
    ソースコードの変更 ビルド実施 テスト実施 デプロイ実施 リリース
    人がやる範

    時間はかからない
    ヒューマンエラーはゼロ

    View full-size slide

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

    View full-size slide

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

    ソース ビルド テスト デプロイ

    View full-size slide

  11. 11
    2. CodeBuildとは

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. 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]
    アーティファクトストアに出力す
    るファイル。後続処理にて利用す
    るものを指定する。

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide