狠狠撸
Submit Search
惭耻濒别アプリケーションの颁滨/颁顿
?
1 like
?
1,824 views
MuleSoft Meetup Tokyo
Follow
2019/6/21のMuleSoftMeetup Tokyo #3で発表頂いた資料です。
Read less
Read more
1 of 26
Download now
Downloaded 15 times
More Related Content
惭耻濒别アプリケーションの颁滨/颁顿
1.
Mule Meetup Tokyo
#3 2019/6/21 株式会社オージス総研 齋藤伸也( OGIS-RI Co.,Ltd. Shinya Saito) 惭耻濒别アプリケーションの颁滨/颁顿
2.
Copyright (C) 2019
OGIS-RI All rights reserved. 自己紹介 ? 齋藤伸也 (Saito_Shinya@ogis-ri.co.jp) ? 株式会社オージス総研 – アライアンスソリューション部所属 ? インテグレーションアーキテクト / APIテクニカルコンサルタント – Muleを利用したシステム連携やAPI構築プロジェクトに参画 2
3.
Copyright (C) 2019
OGIS-RI All rights reserved. 本日の話 ? 惭耻濒别アプリケーション(础笔滨)の开発プロセス ? Muleアプリケーション CI/CDを構築した時のポイント ? Muleアプリケーションの開発プロセスで悩んでいること 3
4.
惭耻濒别アプリケーション(础笔滨)の开発プロセス
5.
Copyright (C) 2019
OGIS-RI All rights reserved. API設計:デザインファースト ? 「よい」APIを構築するために、API仕様を最初に設計し、関係者からフィードバックを得る RAML/OAS パブリッシュ フィードバック API開発者 API利用者(アプ リ開発者など) API Designer Exchange APIの 設計 API仕様 の確認 5
6.
Copyright (C) 2019
OGIS-RI All rights reserved. API実装:Muleアプリケーションの実装 6 ? API仕様を元にAPIの実装を行う – Anypoint Studio を使って Design Center のRAML/OAS をインポートする – APIKit がインタフェースを自動生成する – APIの内部処理をAnypoint Studioで実装する フィードバック API開発者 API Designer APIの 設計 RAML/OAS パブリッシュ API仕様 の確認 Exchange RAML/OAS インポート Anypoint Studio APIの 実装
7.
Copyright (C) 2019
OGIS-RI All rights reserved. Muleアプリケーションのビルドツール:Maven 7 ? Mule アプリケーションは Java アプリケーションでよく使われる Maven というビルドツールを利 用している。Mavenの設定ファイルは pom.xml と呼ばれるXMLファイルに記述される。 ? MuleアプリケーションのMavenの各フェーズで行われること – compile:依存関係を解決し、コンパイルを行う – test:単体テスト(MUnit)を実行する – package: デプロイ可能な jar フォーマットにパッケージングする
8.
Copyright (C) 2019
OGIS-RI All rights reserved. Muleアプリケーションにおけるテストの種類と役割 8 単体テスト – APIのフロー単位のメソッドを検 査するテストである。 – 単体テストは、コーディングが適 切かに対してすぐに修正し、プロ グラムの品質を高めることを目的 とする APIテスト(結合テスト) – APIテストは単独のAPIに対し、仕 様通りのREST APIとなっているか を検査するテストである。 – 外部システムを一部モックなどに置き換 えて実施することもある エンドツーエンドテスト(ユーザテスト) – エンドツーエンドテストは、APIの クライアント(ブラウザやモバイル) を含めたシステム全体に対して 実行するテストである。 – システムのユースケースやユーザ の利用シナリオに沿った内容で 進める 顧客サービス API 顧客サービスのフローに対 してテストを実施する APIテスト クライアント 顧客サービス API 単独のAPIに対して テストを実施する flow flow DB API 顧客サービス DB API モバイル サービス API 商品サービス モバイルアプリ クライアントアプ リに対してテスト を実施する
9.
Copyright (C) 2019
OGIS-RI All rights reserved. MUnit 9 ? Muleアプリケーションのテストフレームワーク – xUnit ライクな概念で、Muleアプリの processer をテストすることができる – モックを簡単に設定することができ、外部システムを用意せずにテスト可能 MUnitの例 テスト対象のフロー Execution の実行前 に、テストの前提条 件を設定する テスト対象の processerを設定する テスト実行後の値が期 待通りか確認する設定 をおこなう
10.
Copyright (C) 2019
OGIS-RI All rights reserved. Muleアプリケーションのデプロイ 10 ? Muleアプリケーションのデプロイ方法 – Runtime Manager(ブラウザ) – Anypoint Studio – Mule Maven Plugin CloudHub Worker Hosted Server Muleアプリケーション のjar
11.
Muleアプリケーション CI/CDを 構築した際のポイント
12.
Copyright (C) 2019
OGIS-RI All rights reserved. CI/CDとは ? Continuous Integration/Continuous Delivery、継続的インテグレーション/継続 的デリバリー ? ソースコードの変更に際し、常に自動でビルド、テストを実行し、本番環境にリリース可能な 状態にしておくソフトウェア開発のプロセスである。 ? 主に、ビルドツール、ソースコードリポジトリ、CICDツールから構成される。 ソースコード リポジトリ 開発者 CIサーバ ソースコードの更新 ソースコードの変更を 検知して、取得する 取得したソースコードからビルド ツールを利用し、コンパイル、単 体テスト、パッケージを実施する 12
13.
Copyright (C) 2019
OGIS-RI All rights reserved. 今回作成したCI/CDパイプラインの全体像 ? ユーザの参照、登録を行うシンプルなAPI。データはAWS上のRDS(MySQL)に格納する。 ? ソースコードリポジトリはGithub、CIサーバはTravis CIを利用する。 フィードバック API開発者 API Designer APIの 設計 RAML/OAS パブリッシュ API仕様 の確認 Exchange RAML/OAS インポート Anypoint Studio APIの 実装 Github 1. プッシュ TravisCI CloudHub 2. コード取得 Maven Repository 3. ビルド? 単体テスト 4. デプロイ サンプル アプリ MySQL 5. 結合テスト の前処理 結合テスト コード 6. 結合テスト 実施 CI/CDの パイプライン 13
14.
Copyright (C) 2019
OGIS-RI All rights reserved. Travis上でのMaven ビルド&単体テスト ? Travis CI上でMaven のビルドを実行する ? Mule EEのアーティファクトは一般公開されていないため、MuleSoft社のMule EEリポジトリから取得する 必要がある – Mule EEリポジトリはBasic認証が設定されている – Mavenのsettings.xmlに認証情報を指定することでMule EEのアーティファクトを取得できる – settings.xmlの記載方法は下記を参照 ? https://docs.mulesoft.com/mule-runtime/3.5/configuring-maven-pom-files-and-settings#referencing-mulesoft-s-enterprise-repositories Travis CI アーティファクトの取得 Mavenコマンドでsettings.xmlを指定する mvn --settings settings.xml package Maven Repository 14
15.
Copyright (C) 2019
OGIS-RI All rights reserved. Mule Maven Pluginを利用したCloudHubへのデプロイ ? Maven deploy コマンドを使用することでデプロイ可能 – Mule Maven PluginがMuleプロジェクトを自動生成すると組み込まれている ? https://docs.mulesoft.com/mule-runtime/4.1/mmp-concept ? デプロイの設定はpom.xmlに追加する – 設定はURLを参照 ? https://docs.mulesoft.com/mule-runtime/4.1/mmp-concept#deploying-to-cloudhub – 既存のCloudHub上のアプリを置き換える場合は、アプリケーション名とデプロイ環境を同じにすれば置換できる – 主な設定値(CloudHubがターゲット) ? URL ? MuleVersion ? デプロイを行うユーザー名 ? デプロイを行うユーザーのパスワード ? アプリケーション名 ? デプロイ環境(SandboxとかProductionとか) ? ランタイム設定のプロパティ(複数可) pom.xml 15
16.
Copyright (C) 2019
OGIS-RI All rights reserved. 結合テスト時の前処理 ? TravisからSQLを流してデータの初期化を実施 – RDSのセキュリティ ? IP制限をかけている(通常はVPCとCloudHubのRuntimeのみ許可) – Travisからの初期化時には、RDSのセキュリティグループにTravisのIPを一時的に許可した ? セキュリティグループの追加はAWSコマンドで実施 ? TravisのIPアドレス(https://docs.travis-ci.com/user/ip-addresses/) 16
17.
Copyright (C) 2019
OGIS-RI All rights reserved. 結合テスト実行の方法 ? 結合テストは「karate」を利用した – 作成者の好みによってこのテストフレームワークが選択 – karateについてはURLを参照 ? https://github.com/intuit/karate ? karateを実装したディレクトに移動してMavenコマンド(mvn test)を実行することでテ ストを実施 – 実行時のターゲットURLやAPI認証の情報は環境変数から取得している(後述) 17
18.
Copyright (C) 2019
OGIS-RI All rights reserved. 環境依存情報の管理 18 ? 環境依存情報とは – 環境(開発、テスト、本番など)によって異なる情報 – 例えば、DBサーバの接続情報やSaaSの接続URIなど ? 静的な設定ファイルを環境ごとに用意する – dev-config.yaml、test-config.yamlなど – ${env}-config.yaml と環境変数によって設定ファイルが切り替わるようにする
19.
Copyright (C) 2019
OGIS-RI All rights reserved. 環境情報の管理方法 ? Muleアプリに必要な環境情報の設定方法 – ローカル ? Anypoint Studioで、実行時の引数に -Dオプション経由で設定する – https://dzone.com/articles/muleload-properties-as-per-environmentwith-default – CloudHub Runtime ? RuntimeのProperties経由で設定する ? デプロイ時にRuntimeのPropertiesを設定するには、pom.xmlのcloudHubDeploymentのpropertiesに設 定する – https://docs.mulesoft.com/mule-runtime/4.1/mmp-concept#deploying-to-cloudhub ? 環境情報をpom.xmlに設定する場合は環境変数に環境情報を定義して、pom.xmlが環境変数から読み出す ようにした ? 結合テストに必要な環境情報の設定方法 – ローカル / Travis CI ? 環境変数に結合テストのURLとBasic認証のクレデンシャル情報を設定した ? 結合テストは実行ファイルに環境変数からURLとBasic認証情報を取得する作りとした(Javascriptの環境変数を 読み込むコードを記載 [java.lang.System.getenv('MULE_BASIC_AUTH')] ) 19
20.
Copyright (C) 2019
OGIS-RI All rights reserved. 結合テスト Travis環境 Muleアプリ(プロパティプレースホルダーで定義) 環境情報の管理方法(環境変数版) ? Muleアプリに必要な環境情報の設定方法 <db:config name="Database_Config"> <db:my-sql-connection host="${db.host}" port="${db.port}" user="${db.user}" password="${db.password}" database="${db.database}"> </db:my-sql-connection> </db:config> ローカル環境(VMの引数で定義) CloudHub環境 VMの設定値が アプリに反映される RuntimeManagerのプロパティ pom.xml <cloudHubDeployment> <properties> <db.host>${env.DB_HOST}</db.host> <db.port>${env.DB_PORT}</db.port> <db.user>${env.DB_USER}</db.user> <db.password>${env.DB_PASSWORD}</db.password> <db.database>${env.DB_DATABASE}</db.database> </properties> </cloudHubDeployment> 「${env.XXX}」と記 載すると環境変数を値 に設定できる デプロイ時に RuntimeManagerのプロ パティを設定できる RuntimeManagerのプロパティがアプリに反映される 20
21.
Copyright (C) 2019
OGIS-RI All rights reserved. クレデンシャル情報の管理方法 21 ? クレデンシャル情報とは – ID、パスワードやアクセストークンなど、サービスやコンポーネントにアクセスするための重要情報 – 平文で管理したくない ? どのような方法があるのか – Secure Configuration Properties ? https://docs.mulesoft.com/mule-runtime/4.2/secure-configuration-properties – Travis CI encryption key ? https://docs.travis-ci.com/user/encryption-keys/
22.
Copyright (C) 2019
OGIS-RI All rights reserved. Travis CI encryption keys ? Travis CIの暗号化、復号化の仕組みを利用して管理を行った – 解説はURLを参照 ? https://docs.travis-ci.com/user/encryption-keys/ – Travis CIの暗号化により、暗号化された文字列をGitHubにコミットしてTravis上で復号化を行える – 復号化された値はTravisの環境変数に設定される – 復号化した値を設定する必要があったファイル ? Mavenのsettings.xml(MuleEEの認証情報) ? pom.xml(ランタイム設定のプロパティ値[RDSの情報など]) – 各ファイルともに環境変数から値を取得可能 22
23.
Muleアプリケーション開発プロセス で悩んでいること
24.
Copyright (C) 2019
OGIS-RI All rights reserved. 様々な成果物のバージョン管理 ? API Designer のブランチ ? Anypoint ExchangeのAPIバージョンとアセットバージョン ? ソースコードリポジトリ(Github)のブランチ ? Muleアプリケーションのバージョン(pom.xml) 24 API Designerのブランチ Gitのブランチ pom.xmlのアーティファクトバージョン Exchange のAPIバージョンとアセットバージョン ? 無秩序に行えば混乱のもと、概念の整理とルール作りが必要……(これから!)
25.
Copyright (C) 2019
OGIS-RI All rights reserved. どこまで自動化するべきか 25 ? Design Center、Anypoint Exchange成果物の更新も自動化するべきか ? Anypoint Platform CLI で自動化はできそうだが…… – https://docs.mulesoft.com/runtime-manager/anypoint-platform-cli フィードバック API開発者 API Designer APIの 設計 RAML/OAS パブリッシュ API仕様 の確認 Exchange RAML/OAS インポート Anypoint Studio APIの 実装 Github 1. プッシュ TravisCI CloudHub 2. コード取得 Maven Repository 3. ビルド? 単体テスト 4. デプロイ サンプル アプリ MySQL CI/CDの パイプライン 5. APIのパブリッシュ
26.
Copyright (C) 2019
OGIS-RI All rights reserved. まとめ 26 ? Muleアプリケーション(API)の開発は「デザインファースト」である ? MuleRuntimeには、CI/CDを実践するために必要な様々なツールや機能が用意 されている – MUnit – Mule Maven plugin ? 開発プロセス、CI/CDのパイプラインはまだまだ検討すべき余地がある – 意訳) 私の力不足で、ベストプラクティスっぽい知見が共有できず申し訳ない m(_ _)m
Download