Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
de:code 2019 MW01
ASP.NET Core + Azure で支える
熟成 3 年「私だけのポン酢」アーキテクチャ
株式会社オルターブース
松村優大 森田邦裕
松村優大 (まつむらゆうた)
業務執行役員 / Chief Technical ArchitectMicrosoft MVP for Developer Technologies
C# / PHP / Microsoft AzureFukuoka.NET 主催
森田邦裕 (もりた くにひろ)
ソリューションアーキテクト
JAWS-UG福岡, Serverless Meetup Fukuoka 運営
株式会社オルターブース
2015 年 3 月設立 (5 期目)Microsoft Azure を活用したソリューションを展開するクラウドインテグレーター2017 年 8 月 Japan Microsoft Partner of the Year (OSS on Azure) 受賞
本セッションについて
本セッションについて
世界でたったひとつだけの、
自分だけのオリジナルソースを作ろう。
簡単に、お手軽に。あなたの「コレ、好き!」を作るお手伝い。
https://mysaucefactory.com/
マイソースファクトリーの構成
アプリケーション インフラストラクチャ
マイソースファクトリーの構成
アプリケーション インフラストラクチャ
クラウドネイティブ技術
https://github.com/cncf/toc/blob/master/DEFINITION.md
クラウドネイティブのメリット
https://github.com/cncf/toc/blob/master/DEFINITION.md
クラウドネイティブを実践する上で大事なこと
アーキテクチャ
連携
連携
ASP.NET Core の採用
• MVC (Model-View-Controller)
• Web API
バージョン マイソースファクトリー 取り組んだこと
1.0-preview 開発初期~ベータ版 .xproj + project.json
1.0 正式公開 .csproj に移行
2.0
正式公開継続的なアップデート
(大きな問題は起きていない)2.1
2.2
なぜ .NET Core を最初から採用したか
なぜ .NET Core を最初から採用したか
なぜ .NET Framework ではなかった?
開発当初に苦労したこと
API バージョニング
/api/v1/resources
/api/v2/resources
API バージョニング
Swagger で API のデバッグ
リポジトリパターンの採用
リポジトリパターンとは
https://docs.microsoft.com/ja-jp/dotnet/standard/microservices-
architecture/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design
リポジトリパターンとは
データ ソースへのアクセスに必要なロジックをカプセル化する
クラスまたはコンポーネントです。
リポジトリは一般的なデータ アクセス機能を一元管理して
保守性を向上させ、ドメイン モデル レイヤーからデータベース
にアクセスするためのインフラストラクチャやテクノロジを切り
離します。
Data Source
Repository
Controller
View
Model
Service
Data Source
Model
Controller
View
Data Source
Model
Controller
View
Data Source
Repository
Controller
View
Model
Service
連携
初代アーキテクチャ
全体の利用ツール・クラウド
ACS
WebApps
BLOB
SQLDatabase
DocumentDB
LogicApp
Functions
OMS
CloudFrontRoute53
S3
API Gateway
ECR
Cognito
IAM
Lambda
CloudWatch
• .NET Core で動く
• コンテナーで本番環境
• ログの可視化
• CI/CD による自動化
• 自動フェイルオーバー
リリースに向けたアーキテクチャ方針 (2016年)
.NET Core が動く
コンテナーで本番環境
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
Single Page Application
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
• 自前で認証を持ちたくなかった
• Azure AD B2C はデザインの一貫性が合わなかった
• AWS で実現
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
Azure と AWS のマルチクラウド
ログの可視化Azure Container Service
Storage
CI/CD による自動化
実行結果
Push
Polling
Azure Container Service
docker swarm
docker pulldocker push
docker build
Amazon EC2 Container Registry
blue green
開発メンバー
フェイルオーバー
Azure での構成も検討したが
Amazon Route 53
Web Apps Amazon CloudFront
Amazon S3
?
マイソースファクトリー
https://mysaucefactory.com
連携
時代・環境の変化 (2017年)
サービス提供を持続可能な運用形式へのシフト
運用の手間を無くす
マネージメントレベルの高いサービスへ乗り換え
解決するには?
マネージメントレベルの高いサービス
https://docs.microsoft.com/ja-jp/azure/security/security-management-and-monitoring-
overview
連携
2代目アーキテクチャ
改善の目的 (2018年~)
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseContainer Service
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps• コンテナーホスティングを辞めた
• Azure Container Service から Web Apps へ乗り換え
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
Azure Container 上のコンテナーで動いていた一部処理を Function Apps に移植
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
Azure Container Service 上でバッチ起動していたコンテナーを Azure Container Instance で起動するように移植
アーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
• サービスプリンシバルからの脱却
• コードにアスセスキーを埋め込まない
• SDK が期限付きトークンを自動的に取得/再取得
• これまで通り Azure サービスに対しアクセス可能( Azure AD 認証をサポートするサービスのみ)
アーキテクチャ (検討中)
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
Azure AD B2C
認証機能を Azure AD B2C へ移行
新旧リソース切り替え
Container Service
Web Apps
Amazon Route 53 SQL Database
リソースのサブスクリプション移動
旧 Subscription 新 Subscription
リソースのサブスクリプション移動
Web Apps
Amazon Route 53 SQL Database
Web Apps
Azure Container Service からWeb Apps へAzure Container Service Web Apps
as a Service IaaS PaaS
アップデート対応 自前で対応 プラットフォーム側対応
サービス監視 自前で対応 プラットフォーム側対応
セキュリティ 自前で対応 プラットフォーム側対応
Infrastructure as Code Terraform, Ansible Terraform
環境構築OS からミドルウェア、アプリデプ
ロイまで全て自前で対応アプリデプロイするだけ
Web Apps に変えて
Kubernetes (k8s) に変えなかったの?
ログの可視化Azure Container Service
Storage
ログの可視化
Web Apps Application Insights
アプリにApplication Insights SDK を組み込み
Elasticsearch + Fluentd + Kibana から Application Insights へ
Elasticsearch + Fluentd +
KibanaApplication Insights
as a Service IaaS SaaS
アップデート対応 自前で対応 プラットフォーム側対応
サービス監視 自前で対応 プラットフォーム側対応
セキュリティ 自前で対応 プラットフォーム側対応
Infrastructure as Code Terraform, Ansible Terraform
環境構築OS からミドルウェアまで全て
自前で対応サービスを利用する
Application Insights に変えて
CI/CD による自動化
実行結果
Push
Polling
Azure Container Service
docker swarm
docker pulldocker push
docker build
Amazon EC2 Container Registry
blue green
開発メンバー
CI/CD による自動化
実行結果
Push
Polling
Azure DevOps
Web Apps Web Apps
ReleaseBuild
開発メンバー
Jenkins から Azure DevOps へJenkins Azure DevOps
as a Service IaaS SaaS
アップデート対応 自前で対応 プラットフォーム側対応
サービス監視 自前で対応 プラットフォーム側対応
セキュリティ 自前で対応 プラットフォーム側対応
Infrastructure as Code Terraform, Ansible -
環境構築OS からミドルウェアまで全て
自前で対応。 Jenkins職人サービスを利用する
Azure DevOps に変えて
連携
ログの送信先
ログの送信先
メールのアーキテクチャ
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
メールのアーキテクチャ
サーバーレスで実現する負荷分散メール
API
責任範囲が明確になる
API
責任範囲が明確になる
API
責任範囲が明確になる
API
シークレットの保護(= 機密情報)
AWS LambdaAmazon
API Gateway
Amazon Cognito
Web Apps
SQL DatabaseWeb Apps
Managed Identities
Container Instance
Function Apps
https://12factor.net/ja/config
Secret Manager
Development Staging / Production
Azure Key Vault
Managed Identities
secrets.json
Azure Key Vault でシークレットを管理する理由
Managed Identities
分散キャッシュ
• 分散キャッシュ
キャッシュ
まとめ
ASP.NET Core に挑戦して良かった
ASP.NET Core に挑戦して良かった
継続的クラウドネイティブ
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
© AlterBooth,inc.
本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。