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

第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode...

Y.Sumikura
January 13, 2023

第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode3兄弟を学ぶ

Y.Sumikura

January 13, 2023
Tweet

More Decks by Y.Sumikura

Other Decks in Technology

Transcript

  1. アジェンダ 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~)
  2. 0. 講師⾃⼰紹介 3 n 阿部 幸司 • クラウドインテグレーション事業部 プロジェクト企画推進セクション インフラ技術グループ

    • 経歴 オンプレミスインフラエンジニア(構築,運⽤保守) 10年 クラウドインフラエンジニア(構築,運⽤保守) 3年 • ロードバイク、マウンテンバイク、シクロクロスに乗ったり登⼭しています。 ⾝体が⾃然と⼭を求めています。
  3. 2. CI/CDとは︖ 8 アプリケーション開発とそれを本番に反映するにはざっくり下記のような⼿順を踏みます。 ・プログラムを書く ・コンパイル(⼈間が理解できる⾔語で作られたプログラムをPCが理解できる⾔葉に変換する処理) ・テスト(動作確認) ・展開 これを⾃分のPCで実⾏しようとすると。。。 ・コンパイルでPCの処理能⼒を持っていかれてその間何も出来ない

    ・テストがたくさんあって時間を取られるしテスト漏れがでないか⼼配 ・展開のたびに申請を上げたりして展開までに多くの時間を費やす これらを⼀連のフローとしてテスト含め⾃動化しましょう、それによって開発者は開発に専念して品質向上、⾼頻 度のアップデートを繰り返して利⽤者のフィードバックを反映していいものを作りましょう、という感じのものに なります。
  4. 2. CI/CDのフェーズ 9 ⼀般的にCI/CDはSource、Build、Test、Deployの4フェーズで構成されます。 Source Build Test Deploy ソースの保管 ・ソースが先祖返りしないよう

    にバージョン管理を⾏う ソフトウェアのパッケージング ・ソフトウェアが実⾏可能な状 態にする テスト ・単体テスト、結合テスト、ア プリケーション正常動作を確認 するためのテストを⾏う デプロイ ・テストを⾏ったアプリケー ションをリリースする CI︓継続的インテグレーション CD︓継続的デリバリー
  5. 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兄弟
  6. 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
  7. 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
  8. 5. おわりに 35 今回CI/CDについての学習と実際に⼿を動かして実装までを⾏ってみました。 CodePipeline、Code3兄弟の設定はAWSマネージメントコンソールから操作するだけで簡単に設定できましたし、 ハンズオンを⾏ったので⼤きく躓くということはなく、ある程度の動きを理解することが出来ました。 最初に⼿をかけて⼀度CI/CDという流れを作ってしまえば以降はそこにソースを流すだけでいいため開発者の⼿が減る んだろうな、ということも感じました。 時代の潮流、トレンドがものすごいスピードで移ろうこの時代において、顧客のニーズを素早く取り込み、それを早急 に、品質を保ちながら実現することが求められます。

    それらを要望を実現するために可能な限り⾃動化を組み込むことでお客様の要望する品質、コスト、納期を満たす必要 があり、その⾃動化の⼿法がCI/CDというツールになります。 改めてインフラエンジニアがそんな事考えないといけないのか︖というところに⽴ち返りますが、 クラウドを利⽤するとお客様はそういった知識、知⾒を求めています。そんなときに最低限CI/CDがどんなもので、ク ラウドで実装するにはどのような⽅法があり、どんなことができるのかは把握しておく必要があります。 今回の雲勉がそんなところの⼀助となればと思っております。
  9. 参考 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
  10. 37