Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode...
Search
Y.Sumikura
January 13, 2023
Technology
5.4k
13
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode3兄弟を学ぶ
Y.Sumikura
January 13, 2023
More Decks by Y.Sumikura
See All by Y.Sumikura
第103回 雲勉【オンライン】インフラエンジニアにおける ChatGPT の便利な使い方と注意点
sumikurayurie1125
1
330
第101回 雲勉【オンライン】VPC から始めるネットワーク入門
sumikurayurie1125
0
200
第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC) 入門 〜TerraformとAnsibleを使ってみよう〜
sumikurayurie1125
0
270
第96回 雲勉【オンライン:初心者向け】インフラエンジニアのKubernetes入門
sumikurayurie1125
0
270
第8回 雲勉LT【オンライン:中級者向け】AthenaでS3上のデータとDynamoDBのデータを結合する
sumikurayurie1125
0
390
第7回 雲勉LT【オンライン:初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説
sumikurayurie1125
3
700
第6回 雲勉LT【オンライン:初心者向け】2022年 気になったアップデート情報:「RDSコンソールの、EC2ワンクリック接続オプション」について
sumikurayurie1125
0
200
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
sumikurayurie1125
0
86
第90回 雲勉【オンライン:初心者向け】AWS App RunnerにLaravelをデプロイしてLINEBotを作ってみよう
sumikurayurie1125
0
930
Other Decks in Technology
See All in Technology
Genie Codeハンズオン応用編
taka_aki
0
130
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
0
1k
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.5k
AI for Science時代を切り開く、政府の次世代HPC戦略の展望
gpuunite_official
0
130
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
140
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
290
AIに狂うスタートアップが、あえて「人との協働」に全振りした新卒エンジニア研修 / New Graduate Engineer Training at a Startup Accelerating AI Adoption
ohnoeight
0
170
Model Studio CLI × Token Plan
maigo999
0
200
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
160
35分でわかるEffective Platform Engineering
nwiizo
5
570
Digitization部 紹介資料
sansan33
PRO
2
7.7k
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
3
480
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
Producing Creativity
orderedlist
PRO
348
40k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Paper Plane
katiecoart
PRO
2
53k
Code Reviewing Like a Champion
maltzj
528
40k
The Cult of Friendly URLs
andyhume
79
7k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Bash Introduction
62gerente
615
220k
We Have a Design System, Now What?
morganepeng
55
8.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Visualization
eitanlees
152
17k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Transcript
第93回 雲勉【オンライン︓初⼼者向け】 CI/CDって結局何なの︖インフラエンジニアがCode3兄弟を学ぶ アイレット株式会社
アジェンダ 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~)
0. 講師⾃⼰紹介 3 n 阿部 幸司 • クラウドインテグレーション事業部 プロジェクト企画推進セクション インフラ技術グループ
• 経歴 オンプレミスインフラエンジニア(構築,運⽤保守) 10年 クラウドインフラエンジニア(構築,運⽤保守) 3年 • ロードバイク、マウンテンバイク、シクロクロスに乗ったり登⼭しています。 ⾝体が⾃然と⼭を求めています。
1. はじめに 4
1. はじめに 5 皆さんはCI/CDというものについてどのくらいご存知ですか︖ 私はこんなイメージです。 いい感じにアプリケーションを構築するための何か、 アプリケーション開発のリリース速度が上がり リリースまでが楽になる何か、⾃動化 とても良さそうなものではあるもののふわっとして何がいいのかイマイチですね笑 アプリケーションの領域に近いもののAWSのインフラエンジニアとしてお客様に提案するこ
ともありし、何より「AWS DevOps Engineer Professional」を持っているのでプロフェッ ショナルとして正しく理解する必要があると思い、CI/CDとAWSでのCode兄弟による実装を ⼿を動かしならが理解できればと思いこちらを今回の題材としました。
2. CI/CDって何︖ 6
2. CI/CDとは︖ 7 CI/CDとは下記の略称で「アプリケーション開発のステージに⾃動化を取り⼊れて、顧客に アプリケーションを提供する頻度を⾼める⼿法」です。 ※ ※ https://www.redhat.com/ja/topics/devops/what-is-ci-cd CI︓Continuous Integration(継続的インテグレーション)
CD︓Continuous Delivery(継続的デリバリー) なるほど、わからん︕ つまりどういうことだってばよ︖
2. CI/CDとは︖ 8 アプリケーション開発とそれを本番に反映するにはざっくり下記のような⼿順を踏みます。 ・プログラムを書く ・コンパイル(⼈間が理解できる⾔語で作られたプログラムをPCが理解できる⾔葉に変換する処理) ・テスト(動作確認) ・展開 これを⾃分のPCで実⾏しようとすると。。。 ・コンパイルでPCの処理能⼒を持っていかれてその間何も出来ない
・テストがたくさんあって時間を取られるしテスト漏れがでないか⼼配 ・展開のたびに申請を上げたりして展開までに多くの時間を費やす これらを⼀連のフローとしてテスト含め⾃動化しましょう、それによって開発者は開発に専念して品質向上、⾼頻 度のアップデートを繰り返して利⽤者のフィードバックを反映していいものを作りましょう、という感じのものに なります。
2. CI/CDのフェーズ 9 ⼀般的にCI/CDはSource、Build、Test、Deployの4フェーズで構成されます。 Source Build Test Deploy ソースの保管 ・ソースが先祖返りしないよう
にバージョン管理を⾏う ソフトウェアのパッケージング ・ソフトウェアが実⾏可能な状 態にする テスト ・単体テスト、結合テスト、ア プリケーション正常動作を確認 するためのテストを⾏う デプロイ ・テストを⾏ったアプリケー ションをリリースする CI︓継続的インテグレーション CD︓継続的デリバリー
2. CI/CDメリット 10 ・ソフトウェアリリースプロセスの⾃動化 ⼿動でのビルド、社内での承認処理といったメイン開発部分以外の⼿間がかかる部分を⼀連の処理と して⾃動化することで効率的かつ迅速なリリースを可能とする。 ・開発者の⽣産性の向上 開発者がメイン開発以外の⼿動作業から開放されアプリケーション開発に注⼒できるようになる。 ・コード品質の向上 ⼀連の処理の中でテスト、デプロイが⾏われるため、品質を維持することが容易となり、問題が発⽣
した際にもロールバックといったことが容易となる。
2. インフラエンジニアって関係なくない︖ 11 ここまでの話の中にインフラエンジニアがどこに関係してくるんだ︖となったかもしれません。 前のページに記載した領域は開発者が主に触る部分で、インフラエンジニアが考える領域では無いと 思われるかもしれません。 確かにそう捉えられるかもしれませんが、クラウドという現場ではインフラ、開発の垣根が低くなっ て来ています。また前にも記載した通り開発者が開発に専念するためにも環境の整備という点では全 く関係ないとは⾔えず、積極的に取り組んでいく領域と考えています。
3. AWSでのCI/CDを構成するメリットって︖ 12
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兄弟
3. AWSサービスのいいところって何︖ 14 • AWSサービスへの親和性の⾼さ • AWS内部で処理が完結できるため安全性が⾼い • マネージドサービスなのでサーバ管理が不要で容量、実⾏環境のリソースを気にする必要が無い •
利⽤に応じた従量課⾦ • AWSサービス、3rdパーティツールとの連携が可能
4. AWSで⼀連の流れを作ってみる 15
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
4. AWSサービスを使って実装してみる(構成概要図) 17 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。
4. AWSサービスを使って実装してみる(構成図) 18 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。
4. AWSサービスを使って実装してみる(構成図) 19 AWS CodeCommitへのpushをトリガーにしてコンテナイメージをECSで動かす。
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
4. AWS CodeCommit 21 CodeCommitよりリポジトリの作成をクリックする 任意のリポジトリ名を ⼊⼒して作成をクリックする git cloneコマンドを控える
4. AWS CodeCommit 22 控えたgit cloneコマンドを実⾏してローカルにリポジトリをクローンする リポジトリにソースをプッシュする
4. AWS CodePipeline 23 CodePipelineよりパイプラインを作成するをクリックする 任意のパイプライン名を⼊⼒して次へをクリックする 先に作成したCodeCommitを指定して次へをクリックする
4. AWS CodePipeline 24 ビルドステージでCodeBuildを選択して、 プロジェクトを作成するをクリックする ビルド環境情報をを⼊⼒して作成をクリックする
4. AWS CodePipeline 25 デプロイ先となる事前に作成したECSの情報を⼊⼒する
4. AWS CodePipeline 26 AWS CodeBuild AWS CodeCommit AWS CodeDeploy
4. AWS CodePipeline 27 AWS CodeBuild AWS CodeCommit AWS CodeDeploy
AWS CodePipeline
4. ハンズオンに追加設定︓Testを追加 28 CoedePipelineの中に Testフェーズを追加
4. ハンズオンに追加設定︓Testを追加 29 パイプラインのBuildのあとにTestを追加して、ECRにアップし たdockerイメージ:latestを指定してテストを⾏う buildspec.yml例 (このファイルはプログラム、テスト内容によって記載が変わります)
4. ハンズオンに追加設定︓Testを追加 30
4. ハンズオンに追加設定︓Testを追加(レポート出⼒) 31
4. ハンズオンに追加設定︓承認プロセスを追加 32 ここに承認プロセスを追加 CodeCommitにpushが⾏われたらSNS で承認 or 拒否の通知を送信する
4. ハンズオンに追加設定︓承認プロセス 33 メールが届くので記載のURLをクリッ クして承認 or 拒否を⾏い処理を進める
5. おわりに 34
5. おわりに 35 今回CI/CDについての学習と実際に⼿を動かして実装までを⾏ってみました。 CodePipeline、Code3兄弟の設定はAWSマネージメントコンソールから操作するだけで簡単に設定できましたし、 ハンズオンを⾏ったので⼤きく躓くということはなく、ある程度の動きを理解することが出来ました。 最初に⼿をかけて⼀度CI/CDという流れを作ってしまえば以降はそこにソースを流すだけでいいため開発者の⼿が減る んだろうな、ということも感じました。 時代の潮流、トレンドがものすごいスピードで移ろうこの時代において、顧客のニーズを素早く取り込み、それを早急 に、品質を保ちながら実現することが求められます。
それらを要望を実現するために可能な限り⾃動化を組み込むことでお客様の要望する品質、コスト、納期を満たす必要 があり、その⾃動化の⼿法がCI/CDというツールになります。 改めてインフラエンジニアがそんな事考えないといけないのか︖というところに⽴ち返りますが、 クラウドを利⽤するとお客様はそういった知識、知⾒を求めています。そんなときに最低限CI/CDがどんなもので、ク ラウドで実装するにはどのような⽅法があり、どんなことができるのかは把握しておく必要があります。 今回の雲勉がそんなところの⼀助となればと思っております。
参考 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
37