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

Season2第2回 DSPに載せられるアプリを作ろう

ta28masa
November 19, 2021

Season2第2回 DSPに載せられるアプリを作ろう

2021年11月19日開催の「Developer Dojo DSP Sandbox Series Season2 第2回 DSPに載せられるアプリを作ろう」の資料です。

ta28masa

November 19, 2021
Tweet

More Decks by ta28masa

Other Decks in Technology

Transcript

  1. 2 © 2021 IBM Corporation 講義の進め⽅ • 講義中の質問 : WebExのQ&Aまたはチャットにて受け付けます。

    • 講義後の質問︓ Connpass申込ページのFeed機能にて 頂戴した質問についても確認します。 (確実な回答を保証するものではありません。) • 講義+ハンズオンの形式で実施します。 ⼿順書をお⼿元にご⽤意いただくことを推奨します。 本講申込ページの[Media]または下記URLよりアクセス可能です。 https://speakerdeck.com/ta28masa/season2di-2hui-dspnizai-serareruahuriwozuo-rou • 講義後アンケート︓ 下記URLから回答をいただけますと幸いです。 https://app.sli.do/event/qsen2fgb
  2. 5 © 2021 IBM Corporation 1-2.DSPとその価値 IBMの提唱する「次世代アーキテクチャ」では、デジタルサービス層がフロントサービスの柔軟・迅速な開発を可能にします。 デジタルサービスプラットフォーム(DSP)は、このデジタルサービス層をクラウド上に構築、共同利⽤するソリューションです。 DSP基盤 ソフトウェア

    / コンテナ層 アプリケーション層 CICD 資⾦移動 ⼝座管理 諸届 共通機能 ⽣体認証 多要素認証 認証 AI 分析 既存業務 新業務 ユーティリティ部品 API API API API API API フロントサービス (特定銀⾏) ホワイトラベル (銀⾏間) 外部サービス (FinTech 等) IBM⾦融業界 ソリューション 基 幹 系 連 携 バ ック エ ン ド ア ダ プ タ ー 銀⾏ 勘定系システム 共同化 基幹系システム フロントサービス層 デジタルサービス層 ビジネスサービス層 ⾦融サービス向 けDSPの特⻑ • フロントサービスとの容易な接続性 • 事前準備された機能・サービス • デジタル開発の効率化 • 共通サービスの共同利⽤ • 安全・安⼼のクラウド利⽤ 業務マイクロサービス DSP基盤 マネージドサービス
  3. 6 © 2021 IBM Corporation カイゼンを始めよう︕ ⾏内・社内ワークフローを効率化したい︕ こんなAPIがあればもっと便利︕ デジタルサービス層を⾃分たちで発展させたい︕ DSPで接続の悩みが減った今こそ、後回しになっていた

    最⾼の顧客体験を追求したい︕ 1-3.シーズン2の狙い シーズン2は、シーズン1からさらに視点を広げていただくための応⽤編です。 DX推進に役⽴つ知識・スキルを獲得していただけるように準備していますので、気になるテーマを選んでご参加ください。 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 引っ張りだこの「⼈財」に︕
  4. 8 © 2021 IBM Corporation (はじめに) ここまで⼀気にいきますか︖ ふむふむ、ROKS環境で 稼働するアプリですか。 ワタクシならRubyかPythonか

    Node.jsのStatelessな Microserviceが稼働する Containerを用意してAgileに CI/CDでうんたらかんたら... 新しいチームで完全な新規構築、かつ継続的に保守できるなら新しい技術を⽚っ端から採⽤する⽅法も採り得ますが、 そうもいかない現実があるのではないでしょうか︖ ※全てが必須では ありません︕ (でも、いくつかは重要だったり、 便利だったり) 必要に応じて取捨選択できるようになりましょう
  5. 9 © 2021 IBM Corporation 2-1.コンテナ,Docker,k8s,OpenShift,ROKS DSP基盤はROKS(Red Hat OpenShift Kubernetes

    Service)環境でアプリケーションを稼働させる関係上、 対象のアプリケーションは原則*、コンテナ化されている必要があります。 コンテナ技術 • ⾼い可搬性 • 軽量 • 必要⼗分な分離 • バージョン管理と不変性 コンテナ・オーケストレーター + コンテナの稼働運⽤ • ⾃動復旧 • オートスケール • 負荷分散・可⽤性 • ロールアップデート • スケジューリング • ネットワーク管理 • 永続ストレージ管理 • リソース(CPU/Mem) 管理 etc. コンテナ・ アプリケーション・ プラットフォーム + アプリケーション ライフサイクル管理 • ⾃動ビルド • ⾃動デプロイ • CI/CD + 商⽤利⽤サポート コンテナ ハードウェア OS コンテナー・ランタイム M/W, Lib アプリ コンテナ M/W, Lib アプリ コンテナ M/W, Lib アプリ コンテナ M/W, Lib アプリ コンテナ M/W, Lib アプリ コンテナ M/W, Lib アプリ ROKS (Red Hat OpenShift on IBM Cloud) + マネージドサービス + 従量課⾦ DSP + 共同利⽤ + 実績のある構成 + 各種アセット + 運⽤監視 * IBM Cloud Virtual Server Instance (VSI, IaaS)を使うことで、そのままCloud Liftも可能です。 依存関係 付加価値
  6. 10 © 2021 IBM Corporation 2-2. ⾔語のサポート OpenShiftのガイド https://developers.redhat.com/products/rhoar/overview 開発⾔語とランタイム環境、ミドルウェアは「コンテナで稼働させられるなら何でもOK

    」です。 DockerHubでの検索結果 開発⾔語︓ https://hub.docker.com/search?type=image&image_fi lter=store%2Cofficial&category=languages ミドルウェア︓ https://hub.docker.com/search?type=image&image_fi lter=store%2Cofficial&category=application_infrastruc ture IBM公式︓ https://hub.docker.com/search?q=ibmcom&type=ima ge&image_filter=store%2Cofficial
  7. 11 © 2021 IBM Corporation 2-3.“クラウドネイティブ” クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプ リケーションを構築および実⾏するための能⼒を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イ ミュータブルインフラストラクチャ、および宣⾔型APIがあります。

    これらの⼿法により、回復性、管理⼒、および可観測性のある疎結合システムが実現します。 これらを堅牢な⾃動化と組み合わせることで、エン ジニアはインパクトのある変更を最⼩限の労⼒で頻繁かつ予測どおりに⾏うことができます。 「クラウドネイティブなアプリケーション」という表現も⽿にするようになりました。定義を⾒てみましょう。 Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil. https://github.com/cncf/toc/blob/main/DEFINITION.md 環境が動的に変わっても動くようにする。具体的にどうすれば︖
  8. 12 © 2021 IBM Corporation 2-4.The Twelve-Factor App (+beyond) 開発⾔語やバックエンドサービス、クラウドプロバイダに関係なく適⽤可能です。

    The 12 factors *1 Beyond the 12 factors *2 定義 1. コードベース 1. One codebase, one application バージョン管理されている1つのコードベースと複数のデプロイ 2. API first API仕様を優先的に決めて合意し、開発を⾏う 2. 依存関係 3. Dependency management 依存関係を明⽰的に宣⾔し分離する 3. 設定 5. Configuration, credentials, and code 設定を環境変数に格納する(設定, ID, コードを分けて管理) 4. バックエンドサービス 8. Backing services バックエンドサービスをアタッチされたリソースとして扱う 5. ビルド、リリース、実⾏ 4. Design, build, release, and run ビルド、リリース、実⾏の3つのステージを厳密に分離する 6. プロセス 12. Stateless processes アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する 7. ポートバインディング 11. Port binding ポートバインディングを通してサービスを公開する 8. 並⾏性 13. Concurrency プロセスモデルによってスケールアウトする 9. 廃棄容易性 7. Disposability ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する 10. 開発/本番⼀致 9. Environment parity 開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ 11. ログ 6. Logs ログをイベントストリームとして扱う 12. 管理プロセス 10. Administrative processes 管理タスクを1回限りのプロセスとして実⾏する 14. Telemetry 外形監視、ヘルスチェック 15. Authentication and authorization 役割(Role)に基づいたアクセス管理 *1 https://12factor.net/ja/ *2 https://tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app 無理なく取り込んでいきましょう
  9. 13 © 2021 IBM Corporation 2-5.永続化には要注意 コンテナ上の情報は揮発性(=コンテナが停⽌したら削除)です。 永続化する必要がある「データベース」「ファイル授受」「ログファイル」などは対応が必要となります。 データベース ファイル授受

    ログファイル a) 外部ボリュームをマウント b) DBaaSを利⽤ c) ⾃前で⽤意 a) 外部ボリュームをマウント b) ストレージサービスを利⽤ IBM Cloud Object Storage など(I/O注意) c) (DBにファイルを格納) The 12-Factor App #11 「ログをイベントストリームとして扱う」 a) 標準出⼒から還元 b) ファイルをtailして還元 STORAGE STORAGE /data /backup 標準出⼒ tail
  10. 15 © 2021 IBM Corporation 3-0.これから実施する内容 皆さんのPC上のDockerを使⽤して、簡単なAPIアプリケーションを稼働させてもらいます。 その環境で、”The Twelve-Factor App”としての作りについて⾒ていきます。

    ファイルのダウンロード〜コンテナのビルド、起動 3-1 Factor #11 ログ 3-2 3-3 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス, #10開発/本番⼀致 Factor #7 ポートバインディング, #8 並⾏性 Factor #9 廃棄容易性, #14(beyond) テレメトリ ハンズオンの流れ
  11. 16 © 2021 IBM Corporation ファイルのダウンロード 〜コンテナのビルド、起動 3-1 Factor #11

    ログ 3-2 3-3 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス #10開発/本番⼀致 まずは、ファイルのダウンロード、コンテナのビルド、起動です。 3-1.ファイルのダウンロード〜コンテナのビルド、起動 1) 下記URLより、ファイルをダウンロードしてください。 https://ibm.box.com/s/hqhvvhto383zuh13tm4adzz58fx4tzg4 パスワード︓dojo1119 2) ダウンロードしたZipファイル を解凍してください。 3)コマンドラインで、以下のコマンドを実⾏してください。 $ cd (解凍先ディレクトリ) $ docker build -t dojo:1.0.0 . $ docker run -p 80:9080 dojo:1.0.0 Factor #7 ポートバインディング #8 並⾏性 Factor #9 廃棄容易性 #14(beyond) テレメトリ ハンズオンの流れ
  12. 17 © 2021 IBM Corporation ハンズオンの流れ ファイルのダウンロード 〜コンテナのビルド、起動 3-1 Factor

    #11 ログ 3-2 3-3 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス #10開発/本番⼀致 3-2.Factor #11 ログ こちらもご参照ください︕ iMagazine DSP冒険の書 〜1章|ログ管理システムの構築 https://www.imagazine.co.jp/dsp-part1/ まずは、「ログをイベントストリームとして扱う」という部分についてです。 有事の際にしっかりトレースできるよう、ログがコンテナの外に流れていくようにします。 1) 起動したら、ログが標準出⼒に流れていることを確認してく ださい。 2) ブラウザ(またはCurlコマンド)からアクセスし、 ログが追記されることを確認してください。 http://localhost/v1/hello 3) (おまけ) 別のコマンドラインからコンテナのShellにアクセ スし、他のログファイルを⾒てみましょう。 $ docker ps (CONTAINER IDをコピー) $ docker exec -it {CONTAINER ID} sh $ ls /logs Factor #7 ポートバインディング #8 並⾏性 Factor #9 廃棄容易性 #14(beyond) テレメトリ
  13. 18 © 2021 IBM Corporation ファイルのダウンロード 〜コンテナのビルド、起動 3-1 Factor #11

    ログ 3-2 3-3 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス #10開発/本番⼀致 3-3.Factor #3 依存関係 (+#4 #10) 次に、環境依存の設定をコンテナの外側から渡してあげる仕組みです。「環境変数」を使います。 これで、開発でテストしたコンテナをそのまま本番に持っていくことができるようになります。 1) ブラウザ(またはCurlコマンド)から下記URLにアクセスし、 “env”がnullとなっていることを確認してください。 http://localhost/v1/hello 2) コンテナをCtrl+cで停⽌し、 下記コマンドで起動してください。 $ docker run -p 80:9080 -e myenv=Production dojo:1.0.0 3) ブラウザ(またはCurlコマンド)から先述のURLにアクセスし、 “env”が”Production”となっていることを確認してください。 環境毎に異なるもの︓ DBの接続先、ファイルパス、IDとパスワードなど(Factor#3) 後段サービスのURL(Factor#4) ↓ コンテナ⾃体を開発⽤・本番⽤でそれぞれビルドする必要なし(Factor#10) Factor #7 ポートバインディング #8 並⾏性 Factor #9 廃棄容易性 #14(beyond) テレメトリ ハンズオンの流れ prod dev
  14. 19 © 2021 IBM Corporation ファイルのダウンロード 〜コンテナのビルド、起動 3-1 Factor #11

    ログ 3-2 3-3 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス #10開発/本番⼀致 3-4.Factor #7 ポートバインディング, #8 並⾏性 次は、⾃動で並列度をあげるための準備として、どのポートで要求を受け付けるをコンテナ外に設定します。 1) 現在コンテナが稼働中のコマンドウィンドウはそのままに、 もう1つのウィンドウを⽴ち上げてください。 2) 下記コマンドでコンテナをもう1つ起動してください。 $ docker run -p 81:9080 dojo:1.0.0 -pは「コンテナの外で受けるポート : 中に渡すポート」 コンテナの中のポートは9080のまま、 外のポート(OSの制約で重複不可)は柔軟に使える ↓ 1個1個ミドルウェア(今回はWebSphere Liberty)の 設定を変えなくてもスケールアウトできますね。 3) ブラウザ(またはCurlコマンド)から下記URLにアクセスし、 稼働確認してください。 http://localhost:80/v1/hello http://localhost:81/v1/hello Factor #7 ポートバインディング #8 並⾏性 Factor #9 廃棄容易性 Factor #9 廃棄容易性 #14(beyond) テレメトリ ハンズオンの流れ 注)厳密にはここでの「ポートバインディング」はBeyond Twelve-Factor Appの #11に即しています。原典は「組み込みサーバを使う」といった旨の記述になって おり、エンタープライズ・アプリケーションでは実現が難しいものです...。
  15. 20 © 2021 IBM Corporation ファイルのダウンロード 〜コンテナのビルド、起動 3-1 Factor #11

    ログ 3-2 3-3 Factor #7 ポートバインディング #8 並⾏性 3-4 3-5 Factor #3 依存関係, #4バックエンドサービス #10開発/本番⼀致 Factor #9 廃棄容易性 #14(beyond) テレメトリ 3-5.Factor #9 廃棄容易性, #14(beyond) テレメトリ 異常を⾃動的に検知し、⾃動停⽌するための準備です。 外形監視、ヘルスチェック(Readiness/Liveness prove)に応答し、停⽌要求でグレースフルシャットダウンします。 ハンズオンの流れ 1) ブラウザ(またはCurlコマンド)から下記URLにアクセスし、 稼働確認してください。 http://localhost/health 起動していれば”UP”が応答されます。 このURLにヘルスチェック要求を定期的に送ることで、異常を検知し、 即時切り離しを⾏います。 k8sのヘルスチェック(Prove)は2種類あります。 Liveness Prove : 設定したチェック内容でNGの場合、コンテナを再作成 Readiness Prove : 設定したチェック内容でNGの場合、割振停⽌ 2) コマンドラインでCtrl+c(SIGTERM)を送ってください。 コンテナが必要な後処理のあと、停⽌します。 「⾼速な起動」はアプリケーションのサイズや使⽤するライブラリにも 影響されます。Readiness Proveで「準備ができたら割振られる」仕組みが あれば、致命的ではありません。 今回はWebSphere Application Serverの機能を使ったけど、 後段サーバまでチェックしたい場合は⾃分でHealthCheckに応答する プログラムを⽤意するよ。
  16. 21 © 2021 IBM Corporation 3-7.残ったFactors The 12 factors *1

    Beyond the 12 factors *2 定義 対応 1. コードベース 1. One codebase, one application バージョン管理されている1つのコードベースと複 数のデプロイ Factor#3で環境依存設定がコンテナやアプリケーションから切り 離されていれば、⾃然と達成できます。 2. API first Season1 第5回の題材。API仕様を先に決めて合意すること で、並⾏開発を可能とします。 2. 依存関係 3. Dependency management 依存関係を明⽰的に宣⾔し分離する 開発⾔語それぞれでビルド/パッケージ管理ツールを適切に使う ことで、達成できます。最近では使わない⽅が珍しいかも。 Java : Maven, Gradle, Ant Python : pip Node.js : npm 5. ビルド、リリース、実⾏ 4. Design, build, release, and run ビルド、リリース、実⾏の3つのステージを厳密に 分離する CI/CDの⾃動化まで考える場合、リリース稟議など、現⾏の仕 組みとの整合性についても要検討です。 OpenShiftでは”Source to Image(S2I)”などのツールも充 実しています。 6. プロセス 12. Stateless processes アプリケーションを1つもしくは複数のステートレス なプロセスとして実⾏する REST APIのアプリケーションの場合は基本的にステートレスの はずです。Webアプリケーションの場合は、セッション情報をDBに 持たせるなどの⼯夫が必要です。 12. 管理プロセス 10. Administrative processes 管理タスクを1回限りのプロセスとして実⾏する 管理タスク(DBのセットアップやマイグレーション)はアプリケーション の初期化処理として、スクリプトで⾃動化しておくことで、オペミス を避ける。 「リリース⼿順書」「環境設定⼿順書」を減らしていきましょう。 15. Authentication and authorization 役割(Role)に基づいたアクセス管理 Season1 第2回で若⼲触れた内容です。 OAuth2.0, OIDCなどを実装しましょう。(アプリ本体である必 要はなく、前段のAPIゲートウェイで実装することもできます。) どこまで使いこなすかは、状況次第です。
  17. 22 © 2021 IBM Corporation (余談) OpenShiftに無料で触ってみたい 学習⽬的でOpenShiftを無料で使⽤したい場合、以下のような選択肢があります。 1. Developer

    Dojoで公開されている環境を使⽤する 2. IBM Open Labsにてチュートリアル⽤の環境を払い出し 3. Minishiftを導⼊する ご⾃⾝の端末の仮想マシン上でOKD(OpenShiftのアップストリームk8s)を稼働させることができます。 厳密にはバージョン差異(minishiftは3.x)などが⽣じます。 https://docs.okd.io/3.11/minishift/index.html 使⽤可能期間が4時間に限られますが、ご⾃⾝で操作可能な環境が払い出されます。 ハンズオンのチュートリアルも充実しています。 https://developer.ibm.com/openlabs/openshift https://nikami.org/red-hat-openshiftの-コンテナを無料で体験学習する⽅法/ Tech Dojo OpenShift -Self Studyでは、⽤意されたOpenShift環境を操作可能です。(⼈数、時間制限あり) https://ibm-developer.connpass.com/ オススメ︕
  18. 25 © 2021 IBM Corporation DSPで接続の悩みが減った今こそ、後回しになっていた 最⾼の顧客体験を追求したい︕ 4-2.次回の予告 次回は、「UI/UX Design⼊⾨」です︕

    〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 【実施⽇】 12⽉3⽇(⾦) 15:00-16:00 【タイトル】 UI/UX Design⼊⾨ 【申込先】 https://ibm-developer.connpass.com/event/227195/ 【実施⽇】 11⽉26⽇(⾦) 15:00-16:00 【形式】 セルフハンズオン 【申込先】 https://ibm-developer.connpass.com/event/227202/ • つまづきを解消しておこう • もっと発展させてみよう もくもく会(Web⾃習室)もあります。 ぜひご活⽤ください︕
  19. 27 © 2021 IBM Corporation ご参考リンク集 Webサイト URL DockerHub https://hub.docker.com/

    Dockerコマンドリファレンス https://docs.docker.jp/engine/reference/commandline/ Kubernetesドキュメンテーション https://kubernetes.io/ja/docs/home/ Red Hat OpenShift Solution Design Guidance https://pages.github.ibm.com/IBMAoT/i-openshift-guides/02-solutions- guide/openshift-solutioning-guide-101/ CNCF Cloud Native Interactive Landscape https://landscape.cncf.io/ IBM Open Labs https://developer.ibm.com/openlabs/openshift The Twelve-factor App https://12factor.net/ja/ Beyond the Twelve-factor App https://tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app OpenShiftとKubernetesの違いと 価値 https://www.ibm.com/blogs/think/jp-ja/differences-values-openshift-and- kubernetes/ Red Hat OpenShiftのコンテナを 無料で体験学習する⽅法 https://nikami.org/red-hat-openshiftの-コンテナを無料で体験学習する⽅法/
  20. 28 © 2021 IBM Corporation 免責事項 公開している資料は個⼈の⾒解であり、必ずしも所属法⼈の⽅針や意向を表すものではありません。 IBM Developer Dojoは開発者の⽅を対象に、IBM

    Cloudを主とした技術情報をお伝えする⽬的で開催し ております。講師や運営スタッフにより、開催毎に最適と判断した内容でお届けしています。 ハンズオンを伴う講義はお客様の費⽤負担が発⽣しない環境と⼿順にてご案内しております。 クラウド上に構築した製作物は、お客様ご⾃⾝で適切に削除をお願い致します。 クレジットカード情報の登録を伴わない場合は費⽤は⼀切発⽣しませんが、ご登録いただいているお客様 はご注意下さい。 講師陣は皆様のご利⽤状況を個別に確認することはできません。ご理解とご協⼒をお願い致します。 当シリーズではサードパーティのサービスやソフトウェア(Docker Desktop, ServiceNowなど)を使⽤し ますが、本番環境での使⽤をこれに限定するものではありません。 ご⾃⾝の状況等を鑑み、適切にご判断いただきますよう、お願い申し上げます。 当シリーズで提供するソースコードは講義⽤のものです。実際の⾦融機関で使⽤するにはセキュリティや エラーハンドリングなど数々の考慮、設計、実装が必要です。このハンズオンでは『動くものを作ってみ る』ことに主眼を置いていますので、そういった点は含まれないことをご了承ください。 本⽇はご参加いただき、誠にありがとうございました。