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

AWSで実現するモダンアプリ開発。DevOpsやCI/CDを基礎から実践方法まで解説。

NCDC
May 17, 2023

 AWSで実現するモダンアプリ開発。DevOpsやCI/CDを基礎から実践方法まで解説。

新しい技術が次々と登場し、ユーザーのニーズも移り変わりが早い近年、市場の変化に素早く対応するためにシステム内製化やアジャイル開発、DevOpsに取り組む企業が増えています。 さらに、それを支える仕組みとして、CI/CD(継続的インテグレーション/継続的デリバリー)が注目を集めています。

AWSを利用中の方も、これから導入する方も「柔軟なアプリケーション開発を実現するために、より上手くAWSを使いこなしたい」。そんな希望をお持ちではないでしょうか。 しかし、具体的にどのような体制で、どんな開発言語やツールを用いれば、クラウドのメリットを享受できるモダンなアプリ開発環境を構築できるのか? 総合的に理解するのはなかなか難しいといえます。

本セミナーでは、モダンなアプリ開発に欠かせないCI/CDツールやアーキテクチャに豊富な知見を持つNCDCのITコンサルタントが講師を担当。 初心者がAWSを上手く活用するための基礎知識から、AWSのサービスをフル活用してDevOpsやCI/CDを実現した事例まで幅広く解説します。

NCDC

May 17, 2023
Tweet

More Decks by NCDC

Other Decks in Technology

Transcript

  1. 茨木 啓太 エンジニアリングマネージャー ( EM ) AWS Certified Solutions Architect

    – Professional Google Certified Professional - Cloud Architect 2 NCDCにて、システムのインフラ構築からWebサー ビスのバックエンド開発・モバイルアプリ開発ま で、幅広い領域での開発を担当 複数のプロジェクトで、AWSをはじめとしたクラウド を活用したモダンなアプリの設計・開発や、 DevOpsやCI/CDの構築・運用の実績を持つ
  2. 私たちにできること① l デジタルビジネスに必要な要素にフォーカスし、⼀元的に提供しています。 l スモールスタートでの検証から、本開発・継続的な改善までサポートします。 4 ワークショップを中⼼とし た合理的なプロセスで、ビ ジネスモデルの検討からUX デザインまで、迅速に⾏い

    ます。 関係者が多数いる場合の組 織横断、会社横断のファシ リテーションも得意です。 新規性の⾼いプロジェクト ではMVP(Minimum Viable Product)を⽤いた検証を⾏ うなど、⽬的に応じて段階 的な開発を企画します。 早い段階でモックやプロト タイプを⽤意してユーザの 評価を確認します。 ユーザとのタッチポイントとなる各種デバ イスのフロントエンドデザインから、クラ ウドサービスを駆使したバックエンドの開 発まで。多様なテクノロジーをインテグ レーションします。 l AI / IoT / AR l モバイル・ウェブ アプリ開発 l クラウドインテグレーション l システムアーキテクチャコンサルティング など ビジネスモデルのデザイン スモールスタート・PoC システム・インテグレーション ユーザ視点を⼤切にした 課題抽出・企画 モックやプロトタイプ の開発・検証 開発 継続的な改善
  3. 私たちにできること② l 社内に最適な組織がない場合の組織づくりや⼈材育成から、⾼度な技術をもったエンジニ アによる技術移管まで、幅広くお客様をサポートします。 5 ビジネスモデルのデザイン スモールスタート・PoC システム・インテグレーション ユーザ視点を⼤切にした 課題抽出・企画

    モックやプロトタイプ の開発・検証 開発 継続的な改善 企業のDXやデジタルビジネスの創出に必要なこうしたプロセスを多⾯的にサポート DX戦略⽴案 ⼈材育成 技術移管 リファレンス実装 DX組織構築⽀援 アジャイル導⼊⽀援 ⼿法や技術の選定 ブランディング
  4. Business 事業領域の推進 Design ユーザ視点での設計 Technology 技術による課題解決 Innovation • コンサルティング •

    新規サービス企画 • PoC⽀援 • デザイン思考 • UX/UIデザイン • モバイル・Web先端技術 • IoT / AI / AR • クラウドインテグレーション 6 NCDCのサービス体系
  5. AWSなどのクラウドを活用するメリット l コスト最適化 l 必要なリソースを必要な時間だけ、従量課金で使用できる l サーバーの物理的な購入、設置、メンテナンスのコストが不要 l スケーラビリティ l

    アプリケーションの需要に併せてスケールアップやスケールダウン l セキュリティ l データやアプリケーションを保護する機能が提供される l 信頼性 l 高可用性なインフラが提供される 11
  6. (参考) なぜ他のクラウドでなくAWSか? l 世の中の情報が多い l AWSはオープンにされている情報が多い l 特に利用している開発者のアウトプットが多いので、 実際の使い勝手を調べやすい l

    モダンな開発に適したサービスが揃っている l 例えばAWS Lambdaによるサーバレス開発など l 他のクラウドも似たサービスはあるが、コスト面や使い勝手で優れている l スモールスタートがしやすい従量課金 l インフラ使用量が使用した分だけに発生 l 初期開発時の費用が少ない 12
  7. DevOpsとは? l Dev(開発)とOps(運用)をうまく連携するための手法の総称 14 • 計画をたてる • コードを書く • ビルドする

    • テストする Dev • リリースする(デプロイする) • オペレーションする • モニタリングする Ops
  8. 従来の開発とDevOpsの違い l 従来の開発 l 複数の機能を開発後に、まとめてリリース l リリース後は、同じ機能でしばらく運用を続ける 15 Dev(機能1) Dev(機能2)

    Dev(機能3) Ops リリース l DevOps l 短期間でのリリースを繰り返す l リリース後も、次の機能開発を素早く実施する Dev(機能1) Dev(機能2) Dev(機能3) リリース Ops リリース Ops Ops リリース 数ヶ月に1回しか リリースできない! 毎週リリースしても 運用が周る!
  9. 開発(Dev) から 運用 (Ops) への受け渡しが軽量化・自動化が必要 l DevとOpsの境界には、リリースの作業がある l リリース作業がこの作業が大変なので l

    リリース頻度が下がる l DevとOpsの連携しづらい 16 Dev(機能1) Dev(機能2) Dev(機能3) Ops リリース作業 これが大変!! CI/CDにより、リリースの作業を簡略化・自動化できる
  10. CI/CDとは何か 17 l DevOpsを実現するために、ビルド、テスト、デプロイ、リリースを自動で行う仕組み l CI : Continuous Integration →

    継続的インテグレーション l 自動でビルドやテストを実施する l CD : Continuous Delivery → 継続的デリバリー l 自動でアプリをデプロイ / リリースする 既存のよくあるデプロイプロセス 開発 ビルド デプロイ/ リリース 運用 • 手動 テスト • 手順書ベー スで手動 CI、CDのプロセス 開発 ビルド デプロイ/ リリース 開発者 • マージを 切っ掛け に自動で 実行 テスト • マージを 切っ掛けに 自動で実行 • スクリプト 化されてい るがビルド の実行は手 動 • マージを 切っ掛け に自動で 実行 • ソース コードの 変更をリ リースブ ランチに マージ リリース作業がとても大変 →複数の変更をまとめて実施 →変更点が多いので、確認作業も大変 →リリースの頻度が落ちる 自動化により、リリース作業が楽になる →変更単位での実施しても問題ない →テストも自動化されているので確認も楽 →リリース頻度を上げることができる 開発者
  11. CIにおけるテスト l CIで実行するテストには下記のようなものが挙げられる l 全て自動化できるのが理想ではあるが、現実的に難易度が高い l 静的解析や単体テストなど、難易度に対して効果の大きいところから導入がお勧め 18 導入の難易度が高い l静的解析

    lコードを実行せずに、コーディングルールに違反している箇所や脆 弱性のある箇所を洗い出す lバグや脆弱性の検出の他に、コードの可読性や保守性の向上が可能 l動的テスト(単体テスト・結合テスト) lソースコードを実際に実行して、コードが想定通り動くかを、確認 する lテスト用のコードを書いて動かすことで実行 lUIテスト l画面を実際に操作して、画面の表示や画面崩れがないかを確認する l自動化するには専用のツールの導入や設定が必要
  12. クラウドの活用とCI/CD l こう思われた方がいるかも知れません l 正直、従来型のシステムでは大変ですが、、、 19 • ハードウェアやVMの設定をする • OSの設定する

    • Webサーバを構築・設定する • ビルド環境を構築・設定する • アプリのソースコードを用意する • ビルドする • 稼働中のシステムを止める • アプリを置き換える • 再稼働する • 動作確認する 従来のwebアプリのリリース手順の例 • ブラウザで、AWSの画面からGitHub のリポジトリを連携する • GitHubに最新のソースコードを置く • AWSが自動でリリースしてくれる AWS Amplifyにリリースする場合 AWS上にアプリを高速に構築できるサービス テストやリリース作業を自動化はすればよいのは分かったが、 そもそもリリース手順が複雑すぎて自動化なんて無理 AWS などのクラウドを活用することで自動化が容易になる
  13. DevOpsにおける主な手法 l マイクロサービス l システムを細かい「サービス」に分割して、連携させることで動かすという考え方。 拡張性・柔軟性に優れている。 l CI/CD : 継続的インテグレーション/継続的デリバリー

    l 開発したコードのビルド・テスト・デプロイを自動化すること。 早期のバグの発見やリリースの高速化が可能になる。 l IaC : Infrastructure as Code l インフラをコードとして管理すること。 インフラ構築の自動化やバージョン管理が可能になり、環境の再現が容易になる。 l モニタリングとロギングの自動化 l システムのパフォーマンスやログを監視すること。 自動で監視してアラートを通知することで、運用効率化や問題の早期発見が可能になる。 l コミュニケーションと共同作業 l DevOpsはチーム全体でスピード感のあるコミュニケーションが重要。 l 従来のメールとファイルのやり取りではなく、チャットツールやwebベースのプロジェ クト管理ツールを活用により、無駄のない開発や運用が可能になる。 20
  14. 実例1 : AWS上に構築したアプリ(ソースコード管理にGitHubを利用) l ソースコード管理 l GitHub l CI/CD l

    AWS Amplify (ビルドやデプロイ) l GitHub Actions (テスト) l その他 l Amazon CloudWatch で運用・監視 l エラーやアラートを slackへの自動通知 22 バックエンドの 自動デプロイ フロントエンドの 自動デプロイ このプロジェクトの本番リリース作業は、 毎回30分程度です! (作業10分、待機20分) CI/CD
  15. 実例2: AWS上に構築したアプリ(GitHubが使えない環境で、AWSのみを使って構築) 23 l ソースコード管理 l AWS CodeCommit l CI/CD

    l AWS CodePileline l AWS CodeBuild AWS Codeシリーズを使用して、 テストコードの実行、静的コード解析、 ビ ルド、リリースを自動化 CI/CD
  16. よく使われるCI/CDツール l AWS l AWS Codeシリーズ ( CodePipeline, CodeBuild, CodeDeploy

    等 ) l AWSが提供するCI/CDツール l AWS 以外 l GitHub Actions l 開発プラットフォームGitHubに付属するCI/CDツール l 世界中で使われている為、世の中の知見も多い l GitLab CI/CD, GitLab Runner l オープンソースの開発プラットフォームGitLabのCI/CDツール l CircleCI l CircleCIが提供するCI/CDツール。複数のプラットフォームに対応 l ArgoCD l KubernetesやEKSへのデプロイを自動化するCI/CDツール 25
  17. CI/CDを便利にするサービスやツール l AWS上で動くサービス l AWS Amplify l ウェブアプリやモバイルアプリを簡単に構築 l AWS

    Lambda l インフラを管理することなくコードを実行 l AWS App Runner l コンテナ化されたアプリを簡単に実行 l AWSへデプロイする為のツール l Serverless Framework l サーバレスなアプリケーションを管理・デプロイできるツール l AWS SAM l AWS サーバレス アプリケーションを簡単に構築 l AWS CDK l 一般的なプログラミング言語(PythonやJavascript)でAWSリソースを構築 26
  18. 個人的な苦労話と注意点 l 基本はクラウドやCI/CDを使って開発効率化を進めるべきですが、 リスクやデメリットがないわけではないです。 l 楽なツールほど、制約が多い l 例えば、 l CI/CDを動かす環境の処理時間や通信量、同時実行回数に対する制約(または課金)

    l ハードウェアに依存する機能を動かすのが大変(例えば画像処理とか) l クラウドに依存しすぎると、ローカル環境でのテストがしづらい l ちょっとしたテストでもクラウドに繋ぐ必要が出ることも l 適切に管理しないと、必要以上の費用が発生する l 例えば「コードを修正する度にiPhoneのアプリをビルドする」CI/CDを作る → クラウド上のMacが動き続ける → 高額な請求が来る 28 プロジェクト規模や社会的影響度に応じた、最低限の慎重さは必要
  19. ノーコード化でクラウドインフラの構築が更に簡単になる l AWS ApplicaDon Composer l AWS上のサーバレスアプリケーションを ビジュアルエディタで構築できる l Amazon

    CodeCatalyst l AWSにおけるソフトウェア構築を迅速にする ための統合開発サービス l CI / CD をビジュアルエディタで構築できる 30 どちらも昨年12月にプレビュー版が公開された最新のAWS サービス
  20. 内製化支援サービス l 「DevOpsをやってみたい。でもハードルが、高そう」と思われた方へ l NCDCでは「内製化支援サービス」を提供しています l 少しでも興味がありましたら、ぜひお問い合わせください l URL :

    hIps://ncdc.co.jp/service/insourcing/ l NCDCは、AWSの「内製化支援推進AWSパートナー」に参加しており、豊富な 実績と知識で内製化をサポートすることが可能です l hIps://aws.amazon.com/jp/blogs/psa/202203-inhouseit-with-aws-partners/ 33
  21. [参考]NCDCの内製化支援サービスの紹介 34 ⽇本企業のIT部⾨は従来「システムの安定稼働」を重視してきましたが、 近年は「ビジネス要求に応じてスピーディーにシステムを変化させるこ と」が求められ始めています。 こうした要求に応えるために、システムの内製化やアジャイル・ DevOpsの導⼊に取り組む企業が増えていますが、アウトソーシングか ら内製主体の体制に移⾏するには、社内に新たな知識・スキルを貯える ことが⽋かせません。 このサービスでは、NCDCが持つ技術⽀援やDX⽀援の豊富な経験を活か

    し、内製化に取り組む企業の⽀援を⾏います。柔軟なシステム運⽤を可 能にする先進的な開発⼿法や、クラウド活⽤術などの知⾒・技術をお客 さまの社内に蓄積していただくことで、外部ベンダーに依存せず⾃⾛で きる開発チームづくりをサポートします。 具体的には、内製化を検討しているお客さまの状況を伺い、NCDC側で 最適な計画を⽴案。⽀援が必要な領域に合わせてコンサルタント、エン ジニア、UXデザイナーなどの専⾨家をアサインします。 クラウドなどをうまく使って 柔軟なシステムを内製化したい 豊富なDX⽀援経験により 蓄積されたノウハウ システムのモダナイゼーション、 アジャイル開発、DevOps、 AI,IoTの活⽤、開発技術選定、 UX/UIデザイン... お客様 コンサルティング などを通じて 実践的な知識や スキルを移管 概要|ビジネス要求に柔軟に対応できる開発体制づくりを支援
  22. 事例|UXデザイン+アジャイルによる社内ツール作成 35 Client|本田技研工業株式会社様 Keyword| アジャイル , 技術支援 , UX/UIデザイン UXを重視した社内ツール開発の

    内製化・⾼速化⽀援。 お客さまの課題 | 製造部⾨専属のITチームを⽴ち 上げ、製造現場のスタッフにとって本当に使える サービスを、内製で、⾼速に作っていくアジャイ ル開発体制を構築したい。そのための技術⽀援も できるパートナーを求めていた。 ソリューション | UX/UIデザインや開発を内製化 するための技術⽀援を通じて、お客さまのITチー ムを継続的に⽀援。製造ラインの業務進捗情報を 集約して表⽰するダッシュボードや、製造⼯程で のトラブル情報管理ツールなどの開発にともに取 り組んだ。 NCDCの役割 | コンサルタント、デザイナー、エ ンジニアを派遣し、UX/UIデザインからフロント エンド、バックエンドの実装まで、幅広いコンサ ルティングを実施。技術移管も並⾏し、アジャイ ル開発の体制構築を多⽅⾯から⽀援しました。
  23. 事例|業務基盤となる大規模システム刷新プロジェクト 36 Client|ライフネット生命保険株式会社様 Keyword| AWS ,システムアーキテクチャ 保守まで⾒据えた⼤規模かつ 先進的なシステムを構築。 お客さまの課題 |

    ⼗数年前に構築したシステムが、 保守や改修にコスト(時間・お⾦)が嵩む状態に なっていた。同システムは増加傾向にあるWEB直 販に関して最重要な基盤になるため、ビジネス⾯ のニーズに迅速に対応できる先進的なシステムを 必要としており、⼤規模な刷新プロジェクトに取 り組んでいた。 ソリューション | 保守・運⽤の⼤幅な改善を実現 するクラウドネイティブなアーキテクチャを提案。 また、バックエンドだけでなく、フロントエンド でもUIデザインの改修に参画し、デザインガイド ラインの整備まで担当。 NCDCの役割 | 開発はパートナーの⼤⼿開発ベン ダーに任せ、NCDCでは主にマイクロサービスや DevOpsなどを取り⼊れた標準策定コンサルティ ングを担当。APIの設計標準化、ソースコード管 理等を担い、プロジェクト全体を指揮。
  24. 本日のまとめ l 現代のビジネスのニーズに応える為にはモダンなアプリ開発が必要 l 実現の為にAWSなどのクラウド活用やDevOpsの手法が重要 l DevOpsは 開発と運用をうまく連携するための手法の総称 l AWSなどのクラウドベンダーは、DevOps実現の為の様々なサービスを提供

    l CI/CDはDevOpsの手法の1つで、テストやリリースを自動化 l リリース作業が楽になる l 開発も楽になる l リリース頻度を上げることができる l 「クラウド活用やDevOpsをやってみたいけど、導入が大変そう」 と感じたら、NCDCに連絡する 38
  25. FAQ

  26. DevOpsやCI/CDに関するトピック(FAQ) l CD/CDで、リリースが早くなること・テストを自動化できる以外のメリットはあるのか? l 開発も楽になります。本番環境が簡単に作れるということは、本番同等の開発環境も簡単に作れます。 開発中の動作確認も容易になるので、開発速度が早くなります。 l 本番に自動で適用されるのは怖いのですが、大丈夫? l 誤った操作を防ぐ設定が可能です。例えば「管理者が承認したときのみ本番適用が実行される」など

    l 開発者が本番のソースコードを直接触れないようにアクセス権を設定することも可能です l 承認や権限を含めて事前の設定ができていれば、人が手作業でリリースするよりもミスが少ないです l クラウドを使っていない既存プロジェクトに適用するのは、難易度が高そう。 l 最初から本番に適用をするのは、大変ですしリスクも大きい思います。 まずは開発環境だけを自動化するといったこともプロジェクトの改善に有効です。 l 実際に、本番環境がクラウドNG・オンプレ必須の案件で、 開発環境だけはクラウドを使って自動でデプロイすることで、開発効率化できている事例もあります。 l クラウドでOpsのハードルが下がると言っても、クラウドの知識の習得は必要ですよね? l 必要です。ただし、クラウドの全てを知っている必要はないです l 社内でのみ使うような簡単なツールであれば、アプリのデプロイ方法さえ知っていれば大丈夫 l 実際に何をすればいいかは、 l AWSなどのクラウドベンダーが公開している、チュートリアルやドキュメントを確認 l AWSなどのクラウドベンダーにサポートして貰う l NCDCに問い合わせる 40
  27. 事例|クラウドアーキテクチャコンサルティング 43 Client|メーカー(機械) Keyword|システムアーキテクチャ , AWS , IoT AWS上に国内最⼤級規模の IoTプラットフォームを構築。

    お客さまの課題 | 世界中で販売している農機から IoTでデータを取得しているため、オンプレミスの 既存データセンターではDB負荷が許容できない規 模になってきた。AWSに移⾏するため、技術⽀援 が必要だった。 ソリューション | Amazon Kinesis、Amazon ECS(Fargate)、Amazon RDS(Aurora)、Amazon Redshift、 Amazon S3など、AWSのクラウドベー ス製品をうまく活⽤したアーキテクチャを提案す ることにより、迅速かつ低コストでのスケールを 可能に。 NCDCの役割 | お客さまは「誰もやったことがな い未知の技術でも対応できる技術⼒が⾼く⼩回り のきくパートナー」を求めていた。当社の持つ PaaS領域での豊富な開発実績が評価され、⼤規模 かつ先進的なAWS移⾏プロジェクトを担当。
  28. l ⼀⽇数億メッセージを受信し、各システムに情報が配信されていく仕組みです 事例|クラウドアーキテクチャコンサルティング 44 AWS Batch リモート端末 Amazon Kinesis Streams

    メッセージレイヤ Amazon Kinesis Firehose Amazon ECS container Container (発報処理) データレイクレイヤ Amazon Kinesis Amazon S3 発報 バイナリ 発報 分解後 Amazon Athena (検索エンジン) 発報 ⼀時 DWH ロード⽤ AWS Batch DWHレイヤ Amazon Redshift* 集計⽤DB 集計処理 集計処理 データキャッシュレイヤ セントラルDBレイヤ メインDB Amazon RDS (Aurora) AWS Batch データマートレイヤ Amazon Redshift (仮) 公開⽤DB 集計処理 集計処理 Amazon RDS (Aurora) アプリケーションレイヤ APIレイヤ Amazon ECS Webアプリ郡 Amazon ECS Web-API郡 開発運⽤ CodeCommit CodePipeline CodeBuild CloudWatch CloudFandtion 整形 集計⽤ AWS Batch AWS Batch
  29. 事例|クラウドネイティブなデータ収集・分析基盤の設計 45 Client|大学、空調機器メーカー Keyword| IoT , AWS ,システムアーキテクチャ センシングで最適な環境を。 IoTプラットフォームの設計。

    お客さまの課題 | IoTセンサーで取得した環境情報 をもとに空調・照明の⾃動制御を⾏い、最適な空 間を作る実証実験を⾏う。同時に空気や光、⼈の 流れといった環境情報のデータを収集、分析して 研究者に提供するためのIoTプラットフォームをク ラウド環境で構築したい。 ソリューション | AWSのクラウドサービスをうま く活⽤することで迅速かつ低コストでのスケール が可能なIoT基盤を設計。各種センサーや機器との 接続やユーザ認証などのユーティリティサービス も策定した。また、セキュリティ対策についても コンサルティングを実施。 NCDCの役割 | 豊富な知⾒を活かしクラウドに最 適化したシステム(クラウドネイティブアーキテ クチャ)を提案し、難しいと考えられていたお客 さま要望を満たす基盤の構築を実現。