[レポート] .NET アプリケーションを AWS でビルド、テスト、デプロイする #reinvent #XNT302

2022.12.01

いわさです。

現在開催中の re:Invent 2022 にて Breakout Session の XNT302: Build, test, and deploy your .NET applications on AWS に参加しました。
セッションレポートをお届けします。

Build, test, and deploy your .NET applications on AWS

セッション概要

A benefit of moving to the cloud is the opportunity to accelerate development and deployment processes, streamlining and automating release processes. In this session, learn how to use .NET with AWS DevOps services, as well as other popular third-party DevOps tools, CI/CD best practices, and test automation strategies. Leave this session with the knowledge you need to build, test, and deploy .NET code on AWS.

動画

スピーカー

  • Jagadeesh Babu Chitikesi, Sr. Specialist Solutions Architect, Microsoft workloads on AWS, Amazon Web Services
  • Dror Helper, Senior Microsoft Specilist Solution Architect, Amazon

レベル

300 - Advanced

セッション内容

  • より少ないディベロッパーで価値を提供するために何に集中すればよいか。
    • 顧客に価値を提供することに焦点を当てていること
    • 開発者に迅速なフィードバックを提供するメカニズムがあること

  • 価値提供に焦点を当てるためにツールを活用し CI/CD を導入する
  • フィードバックプロセスを提供するために段階を踏む
    • 人々との会話
    • 個々のサービスの計画外の停止時間を見る

ツールを活用する

AWS からは AWS Tools and SDKs が提供されている

  • AWS Toolkits の IDE 統合
    • Visual Studio
    • Visual Studio Code
    • JetBrains Rider
  • 各環境で利用出来る SDK
    • .NET
    • .NET Framework

その他にも活用出来るサービスもある。
AWS Toolkit から CodeCommit へコミットを行い、ビルドした Nuget パッケージを AWS CodeArtifact で管理する。

パイプライン

大きな流れとしてはビルドエージェントによるビルドと環境へのデプロイとなる。
.NET Framework の場合は Windows が前提となり Windows のビルドエージェントが必要となる。
デプロイ先は Amazon EC2、AWS Elastic Beanstalk、Amazon ECS、Amazon EKS が選択肢となる。

.NET の場合は Linux のビルドエージェンが利用可能で、デプロイ先に AWS App Runner と AWS Lambda が追加される。

IIS でホスティングされる ASP.NET アプリケーションのデプロイの流れ

より細かいデプロイまでの流れとしては以下のようになる

  • ソースコード管理システムからプル
  • Nuget のリストアとプロジェクトのビルド
  • テスト
  • パッケージング
  • デプロイ
    • IIS on EC2 あるいは Elastic Beanstalk となる

コンテナ化された .NET アプリケーションを ECS へデプロイする流れ

  • ソースコード管理システムからプル
  • Nuget のリストアとプロジェクトのビルド
  • テスト
  • Docker ビルド
  • イメージスキャン
  • ECR へのデプロイ
  • ECS の更新

ビルドパイプラインツールの選択

選択肢がいくつかある

  • AWS ネイティブサービス
  • AWS でホスティングされているサービス
  • サードパーティ製のサービス

様々な要件からパイプラインツールを選択する必要がある。

  • どれだけのマルチビルドが必要か
  • 必要なビルド統計情報は
  • あるいは Jenkins などのツールが必要か

非コンテナ環境のホスティング

以下は標準的なマルチ AZ の構成。

  • Linux も Windows もオートスケーリンググループが利用可能。
  • また、CloudWatch アラームを使って監視を行う。

コンテナ環境のホスティング

  • AWS Fargate を使ってホスティング出来る。
  • ECR でコンテナイメージを管理する。

テスト

クイックに、そして繰り返し利用出来るようなテストの実装が必要になる。

  • DI を実装する
  • モックフレームワークを導入する
  • トリガーをテストイベントで実現可能。ターゲットが例えば DynamoDB であれば Fake DynamoDB が利用出来る

ASP.NET のサービス構造

複数レイヤーにわかれ、各サービス内でさらにいくつかのサービスに分割することが出来る。
サービスごとのテストが可能になる。

テスト

上位にいけばいくほど時間がかかり、コストが必要になる。
この観点からはサービスレベルのテストまで機能させるのが理にかなっている。

IaC

IaC に関して、様々な選択肢がある。
オペレーターが選択しやすいものと、ディベロッパーが選択しやすいものがある。

  • AWS CloudFormation
  • AWS Serverless Application Model (AWS SAM)
  • AWS Cloud Development Kit (AWS CDK)
  • Terraform
  • Pulumi

このセッションでは AWS CDK を使ったデモを実施。
C# でリソースを定義することが出来る。

さいごに

以上、XNT302: Build, test, and deploy your .NET applications on AWS のセッションレポートでした。

内容としては開発ツールからビルド・テスト・デプロイまでを含めて広く全体について再確認出来るようなセッションとなっていました。
また、随所で .NET と .NET Framework の違いを意識し、Windows の場合はどうなるのか、Linux の場合はどうなるのか、あるいはコンテナだとどうなるのかなど、実際に .NET アプリケーションでパイプラインやデプロイ環境を検討する際に必要な情報が網羅されている感じでした。

なお、セッション終了後にセッションルームの外に出てみると、謎のグループが作戦会議をしていました。