Slide 1

Slide 1 text

第93回 雲勉【オンライン︓初⼼者向け】 CI/CDって結局何なの︖インフラエンジニアがCode3兄弟を学ぶ アイレット株式会社

Slide 2

Slide 2 text

アジェンダ 2 0. ⾃⼰紹介 1. はじめに (19:05~19:10) 2. CI/CDって何︖ (19:10~19:20) 3. AWSでのCI/CDを構成するメリットって︖ (19:20~19:25) 4. AWSで⼀連の流れを作ってみた (19:25~19:40) 5. おわりに (19:40~19:45) 6. 質疑応答 (19:45~)

Slide 3

Slide 3 text

0. 講師⾃⼰紹介 3 n 阿部 幸司 • クラウドインテグレーション事業部 プロジェクト企画推進セクション インフラ技術グループ • 経歴 オンプレミスインフラエンジニア(構築,運⽤保守) 10年 クラウドインフラエンジニア(構築,運⽤保守) 3年 • ロードバイク、マウンテンバイク、シクロクロスに乗ったり登⼭しています。 ⾝体が⾃然と⼭を求めています。

Slide 4

Slide 4 text

1. はじめに 4

Slide 5

Slide 5 text

1. はじめに 5 皆さんはCI/CDというものについてどのくらいご存知ですか︖ 私はこんなイメージです。 いい感じにアプリケーションを構築するための何か、 アプリケーション開発のリリース速度が上がり リリースまでが楽になる何か、⾃動化 とても良さそうなものではあるもののふわっとして何がいいのかイマイチですね笑 アプリケーションの領域に近いもののAWSのインフラエンジニアとしてお客様に提案するこ ともありし、何より「AWS DevOps Engineer Professional」を持っているのでプロフェッ ショナルとして正しく理解する必要があると思い、CI/CDとAWSでのCode兄弟による実装を ⼿を動かしならが理解できればと思いこちらを今回の題材としました。

Slide 6

Slide 6 text

2. CI/CDって何︖ 6

Slide 7

Slide 7 text

2. CI/CDとは︖ 7 CI/CDとは下記の略称で「アプリケーション開発のステージに⾃動化を取り⼊れて、顧客に アプリケーションを提供する頻度を⾼める⼿法」です。 ※ ※ https://www.redhat.com/ja/topics/devops/what-is-ci-cd CI︓Continuous Integration(継続的インテグレーション) CD︓Continuous Delivery(継続的デリバリー) なるほど、わからん︕ つまりどういうことだってばよ︖

Slide 8

Slide 8 text

2. CI/CDとは︖ 8 アプリケーション開発とそれを本番に反映するにはざっくり下記のような⼿順を踏みます。 ・プログラムを書く ・コンパイル(⼈間が理解できる⾔語で作られたプログラムをPCが理解できる⾔葉に変換する処理) ・テスト(動作確認) ・展開 これを⾃分のPCで実⾏しようとすると。。。 ・コンパイルでPCの処理能⼒を持っていかれてその間何も出来ない ・テストがたくさんあって時間を取られるしテスト漏れがでないか⼼配 ・展開のたびに申請を上げたりして展開までに多くの時間を費やす これらを⼀連のフローとしてテスト含め⾃動化しましょう、それによって開発者は開発に専念して品質向上、⾼頻 度のアップデートを繰り返して利⽤者のフィードバックを反映していいものを作りましょう、という感じのものに なります。

Slide 9

Slide 9 text

2. CI/CDのフェーズ 9 ⼀般的にCI/CDはSource、Build、Test、Deployの4フェーズで構成されます。 Source Build Test Deploy ソースの保管 ・ソースが先祖返りしないよう にバージョン管理を⾏う ソフトウェアのパッケージング ・ソフトウェアが実⾏可能な状 態にする テスト ・単体テスト、結合テスト、ア プリケーション正常動作を確認 するためのテストを⾏う デプロイ ・テストを⾏ったアプリケー ションをリリースする CI︓継続的インテグレーション CD︓継続的デリバリー

Slide 10

Slide 10 text

2. CI/CDメリット 10 ・ソフトウェアリリースプロセスの⾃動化 ⼿動でのビルド、社内での承認処理といったメイン開発部分以外の⼿間がかかる部分を⼀連の処理と して⾃動化することで効率的かつ迅速なリリースを可能とする。 ・開発者の⽣産性の向上 開発者がメイン開発以外の⼿動作業から開放されアプリケーション開発に注⼒できるようになる。 ・コード品質の向上 ⼀連の処理の中でテスト、デプロイが⾏われるため、品質を維持することが容易となり、問題が発⽣ した際にもロールバックといったことが容易となる。

Slide 11

Slide 11 text

2. インフラエンジニアって関係なくない︖ 11 ここまでの話の中にインフラエンジニアがどこに関係してくるんだ︖となったかもしれません。 前のページに記載した領域は開発者が主に触る部分で、インフラエンジニアが考える領域では無いと 思われるかもしれません。 確かにそう捉えられるかもしれませんが、クラウドという現場ではインフラ、開発の垣根が低くなっ て来ています。また前にも記載した通り開発者が開発に専念するためにも環境の整備という点では全 く関係ないとは⾔えず、積極的に取り組んでいく領域と考えています。

Slide 12

Slide 12 text

3. AWSでのCI/CDを構成するメリットって︖ 12

Slide 13

Slide 13 text

3. CI/CDを実装できるAWSサービス 13 AWSからCI/CDを実装するための機能がサービスとして展開されており、 今回使⽤するサービスを下記に記載します。 • CodeCommit • CodeBuild • CodeDeploy • CodePipeline AWS CodeBuild AWS CodeCommit AWS CodeDeploy AWS CodePipeline AWSサービス 説明 AWS以外の同様のサービス CodeCommit AWSが提供するマネージド型のソース管理サービス。 Gitの標準機能がサポートされており、Gitコマンドが利⽤できる。 PushなどのイベントをトリガーにSNS/Lambdaの呼び出しが可能でAWSサービスとの親和性が⾼い。 GitHub,GitLab, GitBucket等 CodeBuild スケーラビリティに優れたAWSが提供するマネージド型のビルドサービス。 ソースコードのコンパイル、テストを実⾏し、デプロイ可能なソフトウェアパッケージを作成するサービス。 Dockerイメージの作成も可能。 Jenkins, CircleCI等 CodeDeploy AWSが提供するマネージド型のデプロイサービス。 EC2、ECS、Lambda、オンプレサーバといった様々なものにソフトウェアのデプロイを⾏えるサービス。 Azure Pipelines, Cloud Build/Google Cloud Deploy等 CodePipeline AWSが提供するマネージド型のデリバリーサービス。 パイプラインと呼ばれるCode3兄弟や様々なAWSサービス、3rdパーティ製品との統合をサポートできるサー ビス。 Azure Pipelines, Cloud Build/Google Cloud Deploy等 Code3兄弟

Slide 14

Slide 14 text

3. AWSサービスのいいところって何︖ 14 • AWSサービスへの親和性の⾼さ • AWS内部で処理が完結できるため安全性が⾼い • マネージドサービスなのでサーバ管理が不要で容量、実⾏環境のリソースを気にする必要が無い • 利⽤に応じた従量課⾦ • AWSサービス、3rdパーティツールとの連携が可能

Slide 15

Slide 15 text

4. AWSで⼀連の流れを作ってみる 15

Slide 16

Slide 16 text

4. AWSサービスを使って実装してみる 16 今回構築した環境はAWSから出ているハンズオンを元に構築した環境になります。 実際に⼿を動かして動作を確認されたい場合はこちらの資料をご確認いただければと思います。 ■AWS CI/CD for Amazon ECSハンズオン ~ Cloud9, Docker, Code Services を⽤いた開発効率向上 ~ https://pages.awscloud.com/rs/112-TZM-766/images/AWS_CICD_ECS_Handson.pdf # 補⾜ CI/CD部分にフォーカスをしているためFargateの説明は省かせていただきます。 Fargateについては過去の雲勉にて題材として取り上げられたものがありますので、そちらをご確認いただければと思います。 ■ECS⼊⾨ ~ CloudFront + ELB + ECS FargateでWebサイトを公開 ~ https://www.youtube.com/watch?v=0NR8SiYvNCI

Slide 17

Slide 17 text

4. AWSサービスを使って実装してみる(構成概要図) 17 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。

Slide 18

Slide 18 text

4. AWSサービスを使って実装してみる(構成図) 18 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。

Slide 19

Slide 19 text

4. AWSサービスを使って実装してみる(構成図) 19 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。

Slide 20

Slide 20 text

4. リポジトリの中⾝ 20 ・Dockerfile 使⽤するdockerイメージとsrcフォルダをdockerイメージに取り込む記載をした ファイル ・buildspec.yml ビルドで処理される内容を記載した定義ファイル(作成したdockerイメージをECR へプッシュする記載をしたファイル) ・appspec.yml コンテナイメージをデプロイするECSに関する記述 ・taskdef.json ECSで設定したタスク定義を記載しているファイル ・src/index.php コンテナイメージ内に設置するファイル # リポジトリ php-sample/ ├── Dockerfile ├── buildspec.yml ├── appspec.yml ├── taskdef.json └── src └── index.php

Slide 21

Slide 21 text

4. AWS CodeCommit 21 CodeCommitよりリポジトリの作成をクリックする 任意のリポジトリ名を ⼊⼒して作成をクリックする git cloneコマンドを控える

Slide 22

Slide 22 text

4. AWS CodeCommit 22 控えたgit cloneコマンドを実⾏してローカルにリポジトリをクローンする リポジトリにソースをプッシュする

Slide 23

Slide 23 text

4. AWS CodePipeline 23 CodePipelineよりパイプラインを作成するをクリックする 任意のパイプライン名を⼊⼒して次へをクリックする 先に作成したCodeCommitを指定して次へをクリックする

Slide 24

Slide 24 text

4. AWS CodePipeline 24 ビルドステージでCodeBuildを選択して、 プロジェクトを作成するをクリックする ビルド環境情報をを⼊⼒して作成をクリックする

Slide 25

Slide 25 text

4. AWS CodePipeline 25 デプロイ先となる事前に作成したECSの情報を⼊⼒する

Slide 26

Slide 26 text

4. AWS CodePipeline 26 AWS CodeBuild AWS CodeCommit AWS CodeDeploy

Slide 27

Slide 27 text

4. AWS CodePipeline 27 AWS CodeBuild AWS CodeCommit AWS CodeDeploy AWS CodePipeline

Slide 28

Slide 28 text

4. ハンズオンに追加設定︓Testを追加 28 CoedePipelineの中に Testフェーズを追加

Slide 29

Slide 29 text

4. ハンズオンに追加設定︓Testを追加 29 パイプラインのBuildのあとにTestを追加して、ECRにアップし たdockerイメージ:latestを指定してテストを⾏う buildspec.yml例 (このファイルはプログラム、テスト内容によって記載が変わります)

Slide 30

Slide 30 text

4. ハンズオンに追加設定︓Testを追加 30

Slide 31

Slide 31 text

4. ハンズオンに追加設定︓Testを追加(レポート出⼒) 31

Slide 32

Slide 32 text

4. ハンズオンに追加設定︓承認プロセスを追加 32 ここに承認プロセスを追加 CodeCommitにpushが⾏われたらSNS で承認 or 拒否の通知を送信する

Slide 33

Slide 33 text

4. ハンズオンに追加設定︓承認プロセス 33 メールが届くので記載のURLをクリッ クして承認 or 拒否を⾏い処理を進める

Slide 34

Slide 34 text

5. おわりに 34

Slide 35

Slide 35 text

5. おわりに 35 今回CI/CDについての学習と実際に⼿を動かして実装までを⾏ってみました。 CodePipeline、Code3兄弟の設定はAWSマネージメントコンソールから操作するだけで簡単に設定できましたし、 ハンズオンを⾏ったので⼤きく躓くということはなく、ある程度の動きを理解することが出来ました。 最初に⼿をかけて⼀度CI/CDという流れを作ってしまえば以降はそこにソースを流すだけでいいため開発者の⼿が減る んだろうな、ということも感じました。 時代の潮流、トレンドがものすごいスピードで移ろうこの時代において、顧客のニーズを素早く取り込み、それを早急 に、品質を保ちながら実現することが求められます。 それらを要望を実現するために可能な限り⾃動化を組み込むことでお客様の要望する品質、コスト、納期を満たす必要 があり、その⾃動化の⼿法がCI/CDというツールになります。 改めてインフラエンジニアがそんな事考えないといけないのか︖というところに⽴ち返りますが、 クラウドを利⽤するとお客様はそういった知識、知⾒を求めています。そんなときに最低限CI/CDがどんなもので、ク ラウドで実装するにはどのような⽅法があり、どんなことができるのかは把握しておく必要があります。 今回の雲勉がそんなところの⼀助となればと思っております。

Slide 36

Slide 36 text

参考 36 ■第84回 雲勉【オンライン︓初⼼者向け】ECS⼊⾨ ~ CloudFront + ELB + ECS FargateでWebサイトを公開 ~ https://www.youtube.com/watch?v=0NR8SiYvNCI ■CodeBuild で PHPUnit を実⾏したかったので PHP のコンテナイメージを作って公開した https://iret.media/36779 ■AWS CI/CD for Amazon ECSハンズオン ~ Cloud9, Docker, Code Services を⽤いた開発効率向上 ~ https://pages.awscloud.com/rs/112-TZM-766/images/AWS_CICD_ECS_Handson.pdf ■AWS における継続的インテグレーションと継続的デリバリーの実践 https://d1.awsstatic.com/International/ja_JP/Whitepapers/practicing-continuous-integration-continuous- delivery-on-AWS_JA_final.pdf ■CI/CDとは https://www.redhat.com/ja/topics/devops/what-is-ci-cd

Slide 37

Slide 37 text

37