29
AWS .NET SDK .NET 開発者のための AWS ガイド AWS .NET SDK: .NET 開発者のための AWS ガイド Copyright © 2019 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

AWS .NET SDK - .NET 開発者のための AWS ガイド · クラウドベースのアプリケーションは完全にクラウド上にデプロイされており、アプリケーションのすべ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

AWS .NET SDK.NET 開発者のための AWS ガイド

AWS .NET SDK: .NET 開発者のための AWS ガイドCopyright © 2019 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

AWS .NET SDK .NET 開発者のための AWS ガイド

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

AWS .NET SDK .NET 開発者のための AWS ガイド

Table of Contents.NET 開発者の AWS ガイド ................................................................................................................ 1

ご意見をお待ちしております。 ..................................................................................................... 1.NET 開発者のための AWS 使用ガイド ................................................................................................. 2

.NET 開発者のための AWS ツール ............................................................................................... 2AWS Toolkit for Visual Studio ............................................................................................... 2AWS Tools for Microsoft Visual Studio Team Services ............................................................. 2AWS Tools for Windows PowerShell と PowerShell Core ......................................................... 2AWS SDK for .NET ............................................................................................................. 3

クラウドコンピューティングのタイプ ........................................................................................... 3Infrastructure as a Service ................................................................................................... 3Platform as a Service .......................................................................................................... 3Software as a Service ......................................................................................................... 4

クラウドデプロイモデル ............................................................................................................. 4クラウドデプロイモデル ...................................................................................................... 4ハイブリッドデプロイモデル ................................................................................................ 4オンプレミスデプロイモデル ................................................................................................ 4

AWS アカウントへのサインアップ ................................................................................................ 4AWS アカウントにサインアップ ........................................................................................... 4料金表 ............................................................................................................................... 5

ウェブアプリケーション ...................................................................................................................... 6ウェブサイトのタイプ ................................................................................................................. 6

静的ウェブサイトホスティング ............................................................................................. 6シンプルなウェブサイトホスティング .................................................................................... 6エンタープライズウェブサイトのホスティング ....................................................................... 6

ウェブアプリをデプロイする場所を選択 ....................................................................................... 6AWS Elastic Beanstalk ........................................................................................................ 7Amazon Elastic Container Service ......................................................................................... 7AWS Lambda ..................................................................................................................... 7

Visual Studio からウェブアプリケーションをデプロイする ............................................................... 7Windows への ASP.NET Core 2.0 アプリケーションのデプロイ ................................................ 7ASP.NET Core 2.0 アプリケーションの AWS Elastic Beanstalk へのデプロイ .............................. 9Amazon Elastic Container Service への ASP.NET Core 2.0 アプリケーションのデプロイ ............. 12

Team Services からウェブアプリケーションをデプロイする ........................................................... 13Team Services から ASP.NET アプリケーションを AWS Elastic Beanstalk にデプロイする .......... 13Team Services で AWS Elastic Beanstalk バージョンの作成 ................................................... 14

デプロイ済みインスタンスに接続する .......................................................................................... 15Windows インスタンスへの接続 .......................................................................................... 15Linux インスタンスへの接続 .............................................................................................. 15

SQL Server の操作 .................................................................................................................. 16SQL Server インスタンスに接続する .................................................................................. 16暗号化された接続文字列を使用する ..................................................................................... 16

Amazon DynamoDB での作業 ................................................................................................... 18Amazon DynamoDB プログラミングモデルの選択 ................................................................. 18Amazon DynamoDB を使用した ASP.NET セッション状態の管理 ............................................ 23

iii

AWS .NET SDK .NET 開発者のための AWS ガイドご意見をお待ちしております。

.NET 開発者の AWS ガイドAmazon Web Services は安全なクラウドサービスプラットフォームで、処理能力、データベースストレージ、ウェブホスティングやその他の機能など、高い柔軟性、スケーラビリティ、信頼性を備え、.NET 開発者が洗練されたアプリケーションを構築するためのサービスが提供されています。

このガイドは、AWS が .NET 開発者に提供する内容と、.NET アプリケーションのシナリオの適切なサービスを選択する方法について説明します。

ご意見をお待ちしております。ご意見を頂ける場合は、『.NET 用 GitHub リポジトリ開発者ガイド』を参照してください。そこから次のことを行えます。

• 問題の報告• 提案する• 新しいコンテンツの提案• 既存のコンテンツを改善• 問題や提案を確認

ページの下部にあるフィードバックボタンを使用して、フィードバックを送信することもできます。

ご協力ありがとうございます。

1

AWS .NET SDK .NET 開発者のための AWS ガイド.NET 開発者のための AWS ツール

.NET 開発者のための AWS 使用ガイド

クラウドコンピューティング、クラウドデプロイモデル、AWS にサインアップする方法などに関する必要な情報を見つけて、AWS のサービスを使用するのに役立ててください。

トピック• .NET 開発者のための AWS ツール (p. 2)• クラウドコンピューティングのタイプ (p. 3)• クラウドデプロイモデル (p. 4)• AWS アカウントへのサインアップ (p. 4)

.NET 開発者のための AWS ツール.NET 開発者が Amazon Web Services を使って仕事ができるように Amazon には以下のツールが用意されています。

AWS Toolkit for Visual StudioToolkit for Visual Studio は、アマゾン ウェブ サービスを使用した .NET アプリケーションの開発、デバッグ、デプロイを容易にする、Visual Studio IDE 用プラグインです。Toolkit for Visual Studio は、AWS サービスの Visual Studio テンプレートと、ウェブアプリケーションとサーバーレスアプリケーション用のデプロイウィザードを提供します。AWS Explorer を使用して、 Amazon Elastic Compute Cloud インスタンスを管理し、Amazon DynamoDB テーブルを操作し、Amazon Simple Notification Service キューに対してメッセージを発行することなどができます。

また、Visual Studio から離れる必要はありません。

ツールキットをダウンロードしてインストールする方法の詳細については、「AWS Toolkit for VisualStudio の設定」を参照してください。

AWS Tools for Microsoft Visual Studio Team ServicesAWS Tools for Microsoft Visual Studio Team Services (VSTS) はタスクを簡単に有効化されたビルドに追加し、VSTS のパイプラインをリリースし、Team Foundation Server (TFS) を AWS のサービスと連携するようにします。Amazon S3、AWS Elastic Beanstalk、AWS CodeDeploy、AWS Lambda、AWSCloudFormation、Amazon Simple Queue Service (Amazon SQS)、および Amazon Simple NotificationService (Amazon SNS) を使用できます。Windows PowerShell モジュールと AWS CLI を使用してコマンドを実行することもできます。

AWS Tools for Microsoft Visual Studio Team Services の使用を開始するには、「AWS Tools for MicrosoftVisual Studio Team Services」を参照してください。

AWS Tools for Windows PowerShell と PowerShellCoreAWS Tools for Windows PowerShell および AWS Tools for PowerShell Core は、AWS SDK for .NET によって公開されている機能を基盤として構築された PowerShell モジュールです。AWS PowerShell Tools

2

AWS .NET SDK .NET 開発者のための AWS ガイドAWS SDK for .NET

を使用すると、PowerShell コマンドラインから AWS リソースに対する操作を実行するスクリプトを作成できます。コマンドレットの実装には SDK のサービスクライアントとメソッドが使用されていますが、コマンドでは PowerShell の慣用的な方法に従ってパラメータを指定し、結果を処理できます。

AWS Tools for Windows PowerShell の開始方法ツールをダウンロードしたり、サンプルシナリオを確認したりすることができます。AWS Tools for PowerShell Core は PowerShell Gallery からダウンロードできます。

AWS SDK for .NETAWS SDK for .NET を利用すると、Windows 開発者は Amazon Simple Storage Service、Amazon ElasticCompute Cloud、AWS Lambda など、費用効果の高い、スケーラブルで信頼できる AWS インフラストラクチャサービスを利用する .NET アプリケーションを構築できます。

AWS SDK for .NET は、.NET Framework 3.5 以降をサポートする任意のプラットフォームでの開発をサポートします。

AWS SDK for .NET は .NET Standard 1.3 を対象としています。.NET Core 1.x または .NET Core 2.0 で使用できます。

始めるには、AWS SDK for .NET 開発者ガイドを参照してください。

クラウドコンピューティングのタイプクラウドコンピューティングにより、一連の幅広いサーバー、ストレージ、データベース、アプリケーションサービスにインターネット経由で簡単にアクセスできるようになります。アマゾン ウェブ サービスのようなクラウドサービスプラットフォームは、このようなアプリケーションサービスに必要なネットワークに接続されたハードウェアを所有し保守します。お客様は、ウェブアプリケーション、コマンドラインツール、または SDK を通じて必要なものをプロビジョンして使用します。

クラウドコンピューティングには主に 3 つのモデルがあります。各モデルは、次のようにクラウドコンピューティングスタックのさまざまな側面を表しています。

• Infrastructure as a Service (IaaS)• Platform as a Service (PaaS)• Software as a Service (SaaS)

Infrastructure as a ServiceInfrastructure as a Service (IaaS) はクラウド IT の基本的な構成要素を含んでいます。通常、ネットワーキング機能、コンピュータ(仮想または専用ハードウェア)、データストレージスペースを提供します。

.NET 開発者として、IaaS を使用して ASP.NET ウェブサイトのホスト、テストまたは開発環境の設定や解体、高性能コンピューティングアプリケーションのデプロイ、ネットワーキングおよびセキュリティリソースを活用することができます。

Platform as a ServicePlatform as a Service (PaaS) を使用すると、組織で基盤インフラストラクチャ (通常はハードウェアとオペレーティングシステム) を管理する必要がなくなります。PaaS を使用すると、アプリケーションの開発と管理に集中できるようになります。リソースの調達、容量の使用計画、ソフトウェアメンテナンス、パッチの適用、またはアプリケーションの実行に関連するその他のわずらわしい作業について心配する必要がなくなるため、業務をより効率的に進めることができます。

3

AWS .NET SDK .NET 開発者のための AWS ガイドSoftware as a Service

Software as a ServiceSoftware as a Service (SaaS) は、サービスプロバイダが実行および管理する完成品を提供します。ほとんどの場合、エンドユーザーアプリケーションを指して SaaS という言葉が用いられます。.NET 開発者として、アプリケーションを開発したり、またはサービスとして提供されるアプリケーションと統合したりすることができます。

クラウドデプロイモデルクラウド、ハイブリッド、オンプレミスの、3 つのクラウドデプロイモデルがあります。

クラウドデプロイモデルクラウドベースのアプリケーションは完全にクラウド上にデプロイされており、アプリケーションのすべての部分はクラウド上で実行されます。クラウド内のアプリケーションは、クラウド内で作成されたものか、クラウドコンピューティングのメリットを活用するために既存のインフラストラクチャから移行されたものもあります。クラウドベースのアプリケーションは低レベルのインフラストラクチャ上で作成することもできれば、管理、設計、および核となるインフラストラクチャのスケーリング要件からの抽象化を提供する高レベルのサービスを使用することもできます。

ハイブリッドデプロイモデルハイブリッドデプロイとは、クラウドベースのリソースと、クラウド上にはない既存のリソースとの間でインフラストラクチャとアプリケーションを接続する方法です。もっとも一般的なハイブリッドデプロイの方法は、クラウドと既存のオンプレミスインフラストラクチャ間を接続して、クラウドのリソースを内部システムに接続しながら、組織のインフラストラクチャをクラウドに拡張、成長させることです。

オンプレミスデプロイモデル仮想化およびリソース管理ツールを使用してリソースをオンプレミスでデプロイすることを「プライベートクラウド」と呼ぶこともあります。オンプレミスデプロイではクラウドコンピューティングのメリットの多くを利用できません。ただし、専用のリソースを提供することが可能なため、この方法が求められる場合もあります。多くの場合、このデプロイモデルはレガシーな IT インフラストラクチャと同じですが、アプリケーション管理と仮想化技術を使用してリソース使用率をできるだけ向上させるものです。

AWS アカウントへのサインアップAWS SDK for .NET を使って AWS にアクセスするには、AWS アカウントが必要です。Amazon S3 やAmazon EC2 などの個々のサービスの認証情報も必要です。最初のサンプルアプリを作成する時に、AWSSDK for .NET のプロファイルに認証情報を取得します。[add link]

AWS アカウントにサインアップ1. http://aws.amazon.com/ を開いて、[Create a Free Account] を選択します。過去に AWS マネジメント

コンソールにサインインした場合は、お使いのブラウザで使用できないことがあります。その場合は、[Sign in to a different account] を選択し、次に [Create a new AWS account] を選択します。

2. 画面上の指示に従います。

サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて PIN を入力することが求められます。

4

AWS .NET SDK .NET 開発者のための AWS ガイド料金表

AWS アカウントにサインアップした後、AWS マネジメントコンソール、AWS CloudFormation、API、または AWS CLI で AWS CloudFormation を使用できます。

料金表AWS では 70 種類を超えるクラウドサービスについて従量制料金を適用しています。AWS では必要な個々のサービスにのみ、サービスを使用する期間だけお支払いいただき、長期契約や複雑なライセンスは必要ありません。サービスを消費した分だけ支払い、サービスの使用を停止したときの追加コストや解約料金はありません。

AWS の料金に関する詳細は、http://aws.amazon.com の各製品の詳細ページを参照してください。たとえば、 Amazon Simple Storage Service 料金については aws.amazon.com/s3/pricing を参照してください。

いつでも現在のアカウントアクティビティを確認し、アカウントを管理するには、http://aws.amazon.comで [My Account/Billing and Cost Management Dashboard] を選択できます。

5

AWS .NET SDK .NET 開発者のための AWS ガイドウェブサイトのタイプ

ウェブアプリケーションAmazon Web Services は、ウェブサイトやウェブアプリケーションを配信するためのクラウドウェブホスティングソリューションを提供します。AWS は、.NET および他の一般的なプラットフォームの開発サポートを提供し、世界中にデータセンターがあり、ウェブサイトのトラフィックの変動によってリソースを動的に増減できます。柔軟な料金モデルによって、AWS では使用したリソースの分のみ料金が発生します。

ウェブサイトのタイプ静的ウェブサイトホスティング静的ウェブサイトは、HTML、JavaScript、画像、ビデオなどのファイルをウェブサイト訪問者に配信します。これらには、ASP.NET や PHP のようなサーバーサイドアプリケーションコードは含まれていません。通常は私的なサイトまたはマーケティングサイトの配信に使用されます。ASP.NET および ASP.NETCore ウェブアプリケーションは、一般的にシンプルなまたはエンタープライズ規模のウェブホスティングを必要とします。

ウェブサイトがサーバーサイドスクリプトを含まず、変更頻度が高くなく、高トラフィックの間隔をスケールする必要がある時は、静的ウェブサイトホスティングの使用を検討しましょう。静的ウェブサイトは、インフラストラクチャの管理をしないお客様に最適です。

シンプルなウェブサイトホスティング通常、シンプルなウェブサイトは、単一の Linux、Unix、または ASP.NET などの開発スタックがあるWindows ウェブサーバーで構成されています。将来規模を拡大する可能性があるウェブサイトにとって簡単な開始点となります。シンプルなウェブサイトはウェブサーバーの IT 管理が必要であり、数台のサーバーを超える可用性やスケールするように設計されていません。

ウェブサイトが 5 台のサーバーを超えてスケールする可能性が低い時は、シンプルなウェブサイトを使用することを検討しましょう。独自のウェブサーバーとリソースを管理することが望ましいです。

エンタープライズウェブサイトのホスティングエンタープライズウェブサイトは複数のサーバーと AWS のサービスを利用し、通常は複数のデータセンター (またはアベイラビリティーゾーン) にかけて運用しています。それらは需要に応じて動的にスケールし、高可用性である必要があります。通常、アプリケーションのさまざまな部分に、さまざまな開発スタックが使用されます。

ウェブサイトが最低 2 つのデータセンターにわたってウェブサーバーを必要とし、スケールする必要があり、持続する高い CPU 使用率が必須である場合、エンタープライズウェブサイトホスティングを採用することを検討しましょう。エンタープライズウェブサイトホスティングは、最大の管理性、構成の柔軟性、ウェブサーバーの管理を必要としている場合に最適です。

ウェブアプリをデプロイする場所を選択Amazon Web Services にはいくつかのデプロイオプションがあり ます。ほとんどの自動アプローチを選択でき、いくつかの初期設定の質問に回答して AWS に後は任せます。または、完全に設定可能な、調整する DNS、自動スケーラー、デプロイ環境のその他の要素を選択します。

6

AWS .NET SDK .NET 開発者のための AWS ガイドAWS Elastic Beanstalk

AWS Elastic BeanstalkAWS Elastic Beanstalk は、.NET で開発されたウェブアプリケーションのデプロイおよびスケーリング用の使いやすいサービス です。

アプリケーションをアップロードするだけで、Elastic Beanstalk が自動的に容量のプロビジョニング、負荷分散、拡張、およびアプリケーションの状態のモニタリングといった詳細を処理します。お客様のアプリケーションが稼動している AWS リソースの完全なコントロールを維持でき、いつでも基本的なリソースにアクセスすることができます。

Elastic Beanstalk は、いくつかのバージョンの .NET プログラミングフレームワークおよび WindowsServer のプラットフォームを多数サポートしています。Docker コンテナもサポートしています。

Amazon Elastic Container ServiceAmazon Elastic Container Serviceは、Amazon EC2 のクラスターで Docker コンテナを簡単に実行、管理、停止できる非常にスケーラブルで高速なコンテナ管理サービスです。

.NET Core アプリケーションをコンテナ化された場合は、Amazon ECS オプションを使用することをお勧めします。

AWS LambdaAWS Lambda でサーバーのプロビジョニングや管理をすることなく、.NET Core 関数やサーバーレスアプリケーションを実行できます。柔軟なスケーリングおよび高い可用性を得られます。コードが実行中でなければ料金はかからないので、アイドル状態のキャパシティーはありません。

サーバーレスコンピューティングから恩恵を受けたい場合、Lambda は優れた選択肢です。

Visual Studio からウェブアプリケーションをデプロイする

Toolkit for Visual Studio を使用して、Visual Studio から離れることなく、AWS にウェブアプリケーションをデプロイできます。

トピック• Windows への ASP.NET Core 2.0 アプリケーションのデプロイ (p. 7)• ASP.NET Core 2.0 アプリケーションの AWS Elastic Beanstalk へのデプロイ (p. 9)• Amazon Elastic Container Service への ASP.NET Core 2.0 アプリケーションのデプロイ (p. 12)

Windows への ASP.NET Core 2.0 アプリケーションのデプロイToolkit for Visual Studio の一部として提供された [Publish to Elastic Beanstalk] ウィザードを使用して、アプリケーションを Elastic Beanstalk にデプロイできます。演習を行う場合は、ウェブアプリケーションのスタータープロジェクトのインスタンスを使うことができます。これは Visual Studio に組み込まれています。または独自のプロジェクトを使用することもできます。

7

AWS .NET SDK .NET 開発者のための AWS ガイドWindows への ASP.NET Core

2.0 アプリケーションのデプロイ

サンプルウェブアプリケーションのスタータープロジェクトの作成1. Visual Studio で、 [File]、[New]、[Project] の順に選択します。2. [New Project] ダイアログボックスのナビゲーションペインで、[Installed]、[Templates]、[Visual C#] の

順に展開し、[Web] を選択します。3. ウェブプロジェクトテンプレートのリストの中から、Web と Application が説明に含まれるテンプ

レートのいずれかを選択します。この例では、[ASP.NET ウェブアプリケーション (.NET フレームワーク)] を選択します。

4. [Name] ボックスに、「WebAppDemo」と入力します。[Location] を選び、[Create directory for solution]ボックスが選択されていることを確認します。次に、[OK] を選択します。

5. [New ASP.NET Web Application] ダイアログボックスで、 [Web Forms] または [MVC] を選択し、[OK]を選択します。

Visual Studio を用いて、選択されたアプリケーションプロジェクトテンプレートをベースにしたソリューションやプロジェクトを作成できます。新しいソリューションやプロジェクトが表示される[Solution Explorer] が、Visual Studio の画面に表示されます。

[Publish to Elastic Beanstalk] ウィザードを使用してアプリケーションをデプロイする方法は次のとおりです。1. [Solution Explorer] で、[WebAppDemo] のプロジェクトのコンテキスト (右クリック) メニューまた

は独自のアプリケーションのコンテキスト (右クリック) メニューを開き、[Publish to AWS ElasticBeanstalk] を選択します。

[Publish to Elastic Beanstalk] ウィザードが開きます。2. [Profile] で、[Account profile to use for deployment] リストから、デプロイに使用する AWS アカウント

のプロファイルを選択します。このアカウントプロファイルはデプロイ用にのみ使用されます。必要に応じて、アプリケーションの認証情報を個別に指定することができます。

オプションとして、使用したい AWS アカウントはあるが AWS アカウントのプロファイルをまだ作成していない場合は、プロファイルを選択することができ、プラス記号 (+) のボタンを選択して、AWS アカウントのプロファイルを追加できます。

3. [Region] ストで、Elastic Beanstalk からアプリケーションをデプロイする際の AWS リージョンを選択します。

4. Deployment Target では、[Create a new application environment] を選択します。以前にデプロイされたアプリケーションを再デプロイする場合は、[Redeploy to an existing environment] を選択します。

5. [次へ] を選択します。

[Application Environment] ページの [Application] エリアで、Name はデフォルトの WebAppDemo になります。

6. [Environment] の [Name] リストで、 [WebAppDemo-dev] を選択します。ここで環境とは、アプリケーションのインフラストラクチャ Elastic Beanstalk プロビジョニングのことを意味します。

7. [Check availability] を選択して、ウェブアプリケーションの URL が使用されていないことを確認します。使用中の場合は、リクエストされた URL が利用可能になるまで、他の名前を試します。

8. [次へ] を選択します。9. [キーペア] リストで、Amazon EC2 インスタンスキーペアを選択して、

アプリケーションに使用されるインスタンスにサインインします。[<Create new key pair>] を選択し、キー名を入力 します。この例では、MyKeyPair を使用します。

8

AWS .NET SDK .NET 開発者のための AWS ガイドASP.NET Core 2.0 アプリケーション

の AWS Elastic Beanstalk へのデプロイ

将来的に SSH または RDP で接続できるように、キーペアを使用してインスタンスを起動することをお勧めしています。

10.[Use non-default VPC]、[Single instance environment]、および[Enable Rolling Deployments] が選ばれないように確認してください。これらのオプションは後で追加できます。

必要に応じて、アプリケーションにアクセスさせたいデータベースに Amazon Relational DatabaseService データベースのセキュリティグループが存在する場合、[Relational Database Access] リスト内で目的のファイルを選択します。これは、アプリケーションをホストしている Amazon EC2 インスタンスからのアクセスを許可するように変更されました。

[次へ] を選択します。

1. [Permissions] ページで、[Next] を選択してデフォルト値を受け入れます。2. [Applications Options] ページで、[Next] を選択してデフォルト値を受け入れます。3. [Review] ページで、[Open environment status window when wizard closes] と [Generate AWSDeploy

configuration] を選択します。[選択] をクリックし、[WebAppDemo] を入力し、[保存] を選択します。4. [デプロイ] を選択して、Elastic Beanstalk にデプロイします。

Note

アプリケーションをデプロイすると、アプリケーションが使用する AWS リソースの料金が発生し、それはアクティブなアカウントに請求されます。

Visual Studio ステータスバーと環境ページの [Events] ウィンドウに、デプロイに関する情報が表示されます。デプロイが完了するまで、数分かかる場合があります。完了すると、環境起動に成功したことを示す緑色の INFO イベントが表示されます。

ウェブサイトを表示 する URL を選択します。

AWS Elastic Beanstalk デプロイの削除環境を終了し、アプリケーションを削除します。

Toolkit for Visual Studio を使用してデプロイを削除できます。AWS Explorer で [Elastic Beanstalk]ノードを展開し、デプロイのサブノードのコンテキスト (右クリック) メニューを開いて、[TerminateEnvironment] を選択します。削除には数分かかる場合があります。環境ビューのイベントタブで 終了ステータスを監視できます。

デプロイが終了したら、AWS Explorer で [Elastic Beanstalk] ノードを展開し、デプロイのサブノードのコンテキスト (右クリック) メニューを開いて [Delete] を選択します。

ASP.NET Core 2.0 アプリケーションの AWS ElasticBeanstalk へのデプロイToolkit for Visual Studio の一部として提供された Publish to AWS Elastic Beanstalk ウィザードを使用して、Windows を対象とする ASP.NET Core 2.0 アプリケーションを Elastic Beanstalk にデプロイできます。

サンプルウェブアプリケーションのスタータープロジェクトの作成1. Visual Studio で、 [File]、[New]、[Project] の順に選択します。

9

AWS .NET SDK .NET 開発者のための AWS ガイドASP.NET Core 2.0 アプリケーション

の AWS Elastic Beanstalk へのデプロイ

2. [New Project] ダイアログボックスのナビゲーションペインで、[Installed]、[Templates]、[Visual C#] の順に展開し、[Web] を選択します。

3. ウェブプロジェクトテンプレートのリストの中から、[ASP.NET Core Web Application] を選びます。4. [Name] ボックスに「WebAppDemo 」と入力し、[OK] を選択して次の画面に進みます。5. .NET Core と ASP.NET Core 2.0 が選択されていることを確認し、 ウェブアプリケーションのアプリ

ケーションのテンプレートを選択します。6. [Create directory for solution] が選択されていることを確認します。[Solution] リストで、[Create new

solution] が選択されていることを確認し、[OK] を選択して次のページに進みます。7. .NET Core と ASP.NET Core 2.0 が選択されていることを確認し、 ウェブアプリケーションのアプリ

ケーションのテンプレートを選択します。

[Publish to AWS Elastic Beanstalk] ウィザードを使用して、ASP.NET Core 2.0 Application アプリケーションをデプロイする方法は次のとおりです。1. Solution Explorer で、WebAppDemo のコンテキストメニューを開きます。または独自のアプリケー

ションのプロジェクトフォルダのコンテキストメニューを開きます。[Publish to AWS Elastic Beanstalk]を選びます。

[Publish to Elastic Beanstalk] ウィザードが開きます。2. [Profile] で、[Account profile to use for deployment] リストで、デプロイに使用する AWS アカウントの

プロファイルを選択します。このアカウントプロファイルはデプロイ用にのみ使用されます。ウィザードで個別に他の認証情報を指定します。

オプションとして、使用したい AWS アカウントはあるが AWS アカウントのプロファイルをまだ作成していない場合は、プロファイルを選択することができ、プラス記号 (+) のボタンを選択して、AWS アカウントのプロファイルを追加できます。

3. [Region] ストで、Elastic Beanstalk からアプリケーションをデプロイする際の AWS リージョンを選択します。

4. Deployment Target では、[Create a new application environment] を選択します。以前にデプロイされたアプリケーションを再デプロイする場合は、[Redeploy to an existing environment] を選択します。

5. [次へ] を選択します。

[Application Environment] ページの [Application] エリアで、Name はデフォルトの WebAppDemo になります。

1. [Environment] エリアの [Name] リストで、 [WebAppDemo-dev] を選択します。ここで環境とは、アプリケーションのインフラストラクチャ Elastic Beanstalk プロビジョニングのことを意味します。

2. [Check availability] を選択して、ウェブアプリケーションの URL が使用されていないことを確認します。使用中の場合は、リクエストされた URL が利用可能になるまで、他の名前を試します。

3. [次へ] を選択します。4. [Key pair] ドロップダウンリストで、アプリケーションで使用するインスタンスにサインインする際の

Amazon EC2 インスタンスキーペアを選択します。[<Create new key pair...>] を選択し、キー名を入力します。この例では、MyKeyPair を使用します。

将来的に SSH または RDP で接続できるように、キーペアを使用してインスタンスを起動することをお勧めしています。

5. [Use non-default VPC]、[Single instance environment]、および[Enable Rolling Deployments] が選ばれないように確認してください。これらのオプションは後で追加できます。

10

AWS .NET SDK .NET 開発者のための AWS ガイドASP.NET Core 2.0 アプリケーション

の AWS Elastic Beanstalk へのデプロイ

必要に応じて、アプリケーションにアクセスさせたいデータベースに Amazon Relational DatabaseService データベースのセキュリティグループが存在する場合、[Relational Database Access] リスト内で目的のファイルを選択します。これは、アプリケーションをホストしている Amazon EC2 インスタンスからのアクセスを許可するように変更されました。

[次へ] を選択します。6. [Permissions] ページで、[Next] を選択してデフォルト値を受け入れます。7. [Applications Options] ページで、[Next] を選択してデフォルト値を受け入れます。8. [Review] ページで、設定したオプションを確認します。[Open environment status window when wizard

closes] と [Save settings to aws-beanstalk-tools-defaults.json and configure project for command linedeployment] を選択します。設定ファイルを使用して、今後、.NET CLI を使用して、コマンドラインから将来にデプロイできます。

9. すべてが正しい場合は、[Deploy] を選択します。

Note

アプリケーションをデプロイすると、アプリケーションが使用する AWS リソースの料金が発生し、それはアクティブなアカウントに請求されます。

Visual Studio ステータスバーと環境ページの [Events] ウィンドウに、デプロイに関する情報が表示されます。デプロイが完了するまで、数分かかる場合があります。完了すると、環境起動に成功したことを示す緑色の INFO イベントが表示されます。

ウェブサイトを表示 する URL を選択します。

キャパシティーを拡大Elastic Beanstalk 環境には、環境内の Amazon EC2 インスタンスを管理する Auto Scaling グループが含まれています。単一インスタンス環境では、Auto Scaling グループは常に1 つのインスタンスが実行されているよう確認します。負荷分散される環境では、実行する範囲のグループを設定すると、Amazon EC2Auto Svaing は、負荷に基づき、必要に応じてインスタンスを追加または削除します。

[AWS Explorer] のアプリケーションの [Auto Scaling] ページの [キャパシティ] を編集することで、Amazon EC2 Auto Scalingを設定できます。

1. Visual Studio 2017 で、[View] を選択し、次に表示されていない場合、[AWS Explorer] を選択します。2. [AWS Explorer] で、[Elastic Beanstalk] ノードを展開し、アプリケーション環境のノードをダブルク

リックします。この例では、 EBWebAppDemo-devです。3. [Auto Scaling] を選択します。4. 自動スケーリング設定の環境設定最低 2 つのアプリケーションが実行されているようにするに

は、[Minimum Instance Count] を「2」に設定します。また、需要 に合わせて [Maximum InstanceCount] を増減します。

Auto Scaling の設定とトリガーの詳細については、 Auto Scaling グループを参照してください。5. [変更の適用] を選択します。

AWS Elastic Beanstalk を削除するToolkit for Visual Studio を使用して アプリケーションを削除できます。[AWS Explorer] で、[ElasticBeanstalk] ノードを展開し、削除するアプリケーションのコンテキスト (右クリック) メニューを開いて[Delete] を選択します。

デプロイ環境を終了することもできます。 [AWS Explorer] で、[Elastic Beanstalk] ノードを展開し、アプリケーションのノードを展開して、終了する完了のコンテキスト (右クリック) メニューを開き、環境を選

11

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon Elastic Container Service への

ASP.NET Core 2.0 アプリケーションのデプロイ

択し、[Terminate Environment] を選択します。削除には数分かかる場合があります。環境ビューのイベントタブで 終了ステータスを監視できます。

Amazon Elastic Container Service への ASP.NETCore 2.0 アプリケーションのデプロイこのセクションでは、Toolkit for Visual Studio の一部として提供される [Publish Container to AWS] ウィザードにより、Fargate 起動タイプを使用して Linux 向けコンテナ化 ASP.NET Core 2.0 アプリケーションを Amazon ECS 経由でデプロイする方法について説明します。ウェブアプリケーションは継続的に実行されるため、サービスとしてデプロイされます。

[Publish Container to AWS] ウィザードへのアクセスLinux 向け ASP.NET Core 2.0 コンテナ化アプリケーションをデプロイするには、[Solution Explorer] でプロジェクトを右クリックし、[Publish Container to AWS] を選択します。

Visual Studio の [Build] メニューの [Publish Container to AWS] を選択することもできます。

サンプルウェブアプリケーションのスタータープロジェクトの作成1. Visual Studio で、 [File]、[New]、[Project] の順に選択します。2. [New Project] ダイアログボックスのナビゲーションペインで、[Installed]、[Templates]、[Visual C#] の

順に展開し、[Web] を選択します。3. ウェブプロジェクトテンプレートのリストの中から、[ASP.NET Core Web Application] を選びます。4. [Name] ボックスに「WebAppDemo 」と入力し、[OK] を選択して次のページに進みます。5. [.NET Core] と [ASP.NET Core 2.0] が選択されていることを確認し、[ウェブアプリケーション] のアプ

リケーションのテンプレートを選択します。6. [Enable Docker Support] で、[Linux] オペレーティングシステムを選択し、[OK] を選択します。Visual

Studio 2017 はプロジェクトを生成します。

[Publish Container to AWS] ウィザードを使用する1. [Solution Explorer] で、先のセクションで作成したプロジェクトの [WebAppDemo] プロジェクトフォル

ダのコンテキストメニュー (右クリック)、またはユーザーが作成したアプリケーションのプロジェクトフォルダのコンテキストメニューを開き、[Publish Container to AWS] を選択します。

[Publish Container to AWS...] ウィザードが表示されます。2. [Profile] で、[Account profile to use for deployment] リストから、デプロイに使用する AWS アカウント

のプロファイルを選択します。このアカウントプロファイルはデプロイ用にのみ使用されます。ウィザードで個別に他の認証情報を指定できます。

オプションとして、使用したい AWS アカウントはあるが AWS アカウントのプロファイルをまだ作成していない場合は、プロファイルを選択することができ、プラス記号 (+) のボタンを選択して、AWS アカウントのプロファイルを追加できます。

3. [Region] リストで、 [US East(N.Virginia)] または別の Fargate を提供しているリージョンを選びます。4. [Deployment Target] として [Service on an ECS Cluster] を選択します。[Save settings to aws-ecs-

tools-defaults.json and configure project for command line deployment] が選択されているか確認してください。設定ファイルを使用して

.NET CLI を使ってコマンドラインから今後デプロイできます。

12

AWS .NET SDK .NET 開発者のための AWS ガイドTeam Services からウェブアプリケーションをデプロイする

5. [Launch Configuration] ページで、[ECS Cluster] リストから [Create an empty cluster] を選び、[WebAppDemo] クラスターに名前を付けます。[Launch Type] が [FARGATE] に設定されていることを確認します。

6. [Network Configuration] 領域で、新しいセキュリティグループを作成するには、[Create New] を選択し、次に [Next] を選択します。

7. [Service Configuration] ページの [Service] リストで、[Create New] を選択します。ウィザードにはデフォルトサービス名が用意されています。

8. [Number of Tasks] を 2 に更新します。各タスクはコンテナの 1 つのインスタンスにマップします。ひとつがダウンしても、もうひとつが利用可能になります。[Next] を選択します。

9. [Application Load Balancer Configuration] ページで、 [Configure Application Load Balancer] を選択します。[Network Load Balancer] リストで、[Create New] を選択します。ウィザードに関連するフィールドのデフォルト値が用意されています。[Next (次へ)] を選択します。

10.[Application Load Balancer Configuration] ページの [Task Definition] リストで、 [Create New] を選択します。[Container] リストも [Create New] に設定されている必要があります。デフォルト名とその他の値を使用します。

11.[Publish] を選択します。

Note

アプリケーションをデプロイすると、アプリケーションが使用する AWS リソースの料金が発生し、それはアクティブなアカウントに請求されます。

デプロイ中にイベントが表示されます。ウィザードは正常終了時に自動的に閉じられます。この動作を無効にするには、ページの下部にあるチェックボックスをオフにします。

新しいインスタンスの URL は AWS Explorer で見つけることができます。[Amazon ECS] を展開し、[Clusters] をクリックします。

Team Services からウェブアプリケーションをデプロイする

AWS Tools for Microsoft Visual Studio Team Services (VSTS) はビルドを可能にするタスクを追加し、AWS サービスを扱えるように VSTS と Team Foundation Server (TFS) にパイプラインをリリースします。

トピック• Team Services から ASP.NET アプリケーションを AWS Elastic Beanstalk にデプロイする (p. 13)• Team Services で AWS Elastic Beanstalk バージョンの作成 (p. 14)

Team Services から ASP.NET アプリケーションをAWS Elastic Beanstalk にデプロイするAWS Tools for Microsoft Visual Studio Team Services の一部として提供された Elastic Beanstalk を使用して、ASP.NET アプリケーションを単一の既存の Elastic Beanstalk アプリケーションにワンステップでデプロイできます。

1. チームサービスで、[プロジェクト] タブを選択します。デプロイするプロジェクトを選択し、[Build &Release] を選択してください。

2. [Build Definitions] ページで、[+ New definition] を選択します。3. [Select a template] ページで、[ASP.NET] を選択し、[Apply] を選択します。

13

AWS .NET SDK .NET 開発者のための AWS ガイドTeam Services で AWS Elastic Beanstalk バージョンの作成

4. Elastic Beanstalk デプロイタスクを追加します。[Add Task] を選択します。右側にある [Add tasks] ペインで、aws を検索ボックスに入力し、[AWS Elastic Beanstalk Deploy Application] まで下にスクロールして、 [Add] を選択します。

5. [Process] ページで、[Deploy to Elastic Beanstalk] を選択してデプロイの詳細を設定します。[AWSCredentials] を選択し、ビルドエージェントが Elastic Beanstalk へのアクセスに使用する認証情報を選びます。

6. Elastic Beanstalk デプロイ用の [AWS リージョン] を選択します。7. デプロイ 用に [アプリケーション名] と [環境名] を入力します。たとえば、ContosoUniversity と

ContosoUniversity-dev です。8. [Deployment Bundle Type] リストで、[ASP.NET (Source: Web Deploy Archive)] を選び、[Web

Deploy Archive の場所を指定します。アプリケーションにちなんで名付けられた .zip ファイルです。("$(build.artifactstagingdirectory)\ContosoUniversity.zip" など)。

ウェブデプロイアーカイブ (出力パッケージ) フォルダを探すには、[Process list] で [Build Solution] を選びます。そして [MSBuild Arguments] エントリで PackageLocation を調べます。

9. [Version Label] ボックスに、$(Build.BuildNumber) を入力します。バージョンラベルを指定しない場合、日付と時刻に基づいて自動的に生成されます。

10.[Save&queue] を選択します。[Queue build] ダイアログボックスで、[キュー] を選択します。デプロイの進行状況がビルドコンソールに表示されます。

Team Services で AWS Elastic Beanstalk バージョンの作成AWS Tools for Microsoft Visual Studio Team Services の一部として提供された AWS Elastic Beanstalk を使用して、ASP.NET アプリケーションを複数の既存の Elastic Beanstalk アプリケーションにデプロイできます。

1. チームサービスで、[プロジェクト] タブを選択します。デプロイするプロジェクトを選択し、[Build &Release] を選択してください。

このプロセスは、Visual Studio Team Services でも同じです。2. [Build Definitions] ページで、[+ New definition] を選択します。3. [Select a template] ページで、[ASP.NET] を選択し、[Apply] を選択します。4. Elastic Beanstalk デプロイタスクを追加します。[Add Task] を選択します。右側にある [Add tasks] ペ

インで、aws を検索ボックスに入力し、[AWS Elastic Beanstalk Create Version] まで下にスクロールして、 [Add] を選択します。

5. [Process] ページで、[AWS Elastic Beanstalk Create Version] を選択してデプロイメントの詳細を設定します。[AWS Credentials] を選択し、ビルドエージェントが Elastic Beanstalk へのアクセスに使用する認証情報を選びます。

6. Elastic Beanstalk デプロイ用の [AWS リージョン] を選択します。7. デプロイ 用に [アプリケーション名] を入力します。既存のアプリケーションに違いありません。8. [Deployment Bundle Type] リストで、[ASP.NET (Source: Web Deploy Archive)] を選び、[Web Deploy

Archive の場所を指定します。アプリケーションにちなんで名付けられた .zip ファイルです。例$(build.artifactstagingdirectory)\ContosoUniversity.zip.

ウェブデプロイアーカイブ (出力パッケージ) フォルダを探すには、[Process list] で [Build Solution] を選びます。そして [MSBuild Arguments] エントリで PackageLocation を調べます。

9. [Version Label] ボックスに、$(Build.BuildNumber) を入力します。バージョンラベルを指定しない場合、日付と時刻に基づいて自動的に生成されます。

10.[Save & queue] を選択します。[Queue build] ダイアログボックスで、[キュー] を選択します。デプロイの進行状況がビルドコンソールに表示されます。

14

AWS .NET SDK .NET 開発者のための AWS ガイドデプロイ済みインスタンスに接続する

デプロイ済みインスタンスに接続するLinux または Windows インスタンスに接続する方法と、ローカルコンピューターとインスタンスの間でファイルを転送する方法について説明します。

トピック• Windows インスタンスへの接続 (p. 15)• Linux インスタンスへの接続 (p. 15)

Windows インスタンスへの接続ほとんどの Windows Amazon マシンイメージ (AMIs) から作成された Amazon Elastic ComputeCloudAmazon EC2 インスタンスは、リモートデスクトップを使用して接続することができます。リモートデスクトップは、Remote Desktop Protocol (RDP) を使用して接続でき、目の前のコンピューターを使用するのと同じ方法でインスタンスを使用することができます。

1. Visual Studio 2017 の [AWS Explorer] で [Amazon EC2] を展開し、[Security Groups] をダブルクリックします。

2. デプロイ済みのインスタンスに対応する VPC セキュリティグループを選択します。3. [アクセス権限の追加]、[プロトコル] の下にある [RDP] を選択し、[OK] を選択します。RDP プロトコル

(ポート 3389) はインバウンドのアクセス権限に追加されます。4. AWS Explorer で、AWS Elastic Beanstalk ノードとアプリノードを拡張し、ターゲット環境をダブルク

リックします。5. 環境ビューで、 [Connect to Instance を選択します。[Open Remote Desktop] ウィンドウが開きます。

[Use EC2 keypair to log on] を選択し、必要に応じて、リモートデスクトップでローカルドライブをマッピングするかどうかを選択し、 OK を選択します。

Toolkit for Visual Studio はデプロイ中に作成されたキーペア を使用します。6. リモート接続の公開者を確認できないと警告が表示されることがあります。インスタンスに接続するた

めに、Toolkit for Visual Studio によって生成されました。接続を信頼するには、[接続] を選択します。

リモートコンピューターの身元を確認できないと警告が表示されることがあります。とにかく接続するには、 [はい] を選択します。

しばらくすると、接続されます。

ローカルコンピューターとWindows インスタンスと間でファイルを転送する他の方法については、「Windows インスタンスへの接続」を参照して、接続して します。

Linux インスタンスへの接続Toolkit for Visual Studio を使用して Visual Studio 内で Linux インスタンスに接続できます。

Toolkit for Visual Studio は SSH クライアントの Putty を使用して Amazon EC2 インスタンスに接続します。これは無料の SSH クライアントで、https://www.chiark.greenend.org.uk/~sgtatham/putty/ から入手できます。

1. [AWS Explorer] で、[Amazon EC2] にある [Instances] を展開して、Linux インスタンスを右クリックし、 [Open SSH Session] を選択します。

2. [Open SSH Session] ダイアログボックスで、[Use EC2 keypair to log on] を選択し、インスタンスに関連付けられているキーペア を使用します。

15

AWS .NET SDK .NET 開発者のための AWS ガイドSQL Server の操作

Toolkit for Visual Studio にキーペアが保存されていない場合は、インスタンスのプライベートキーをコピーして、[Private Key] ボックスに貼り付けます。[Save private key] を選択して、プライベートキーをToolkit for Visual Studio に保存します。インスタンスに関連付けられて、後で接続に使用されます。

パスワードも使用できます。[パスワードの入力] を選択し、インスタンスのパスワードを入力します。認証情報を保存するには、[認証情報の保存] を選択します。今後、認証情報が接続に使用されます。

3. [Location of Putty] を確認してください。4. [OK] を選択して接続します。

Putty ウインドウが開き、接続した状態になります。

接続できない場合は、「インスタンスへの接続に関するトラブルシューティング」を参照してください。

SQL Server の操作SQL Server と AWS でのウェブ開発について説明します。

トピック• SQL Server インスタンスに接続する (p. 16)• 暗号化された接続文字列を使用する (p. 16)

SQL Server インスタンスに接続するVisual Studio の Server Explorer とVisual Studio の Toolkit for Visual Studio を使用して、既存の SQLServer インスタンスに接続できます。

Note

お客様のマシンがプロキシ / ファイアウォールの内側にある場合は、ネットワーク管理者に連絡する必要がある場合があります。

この手順では、Toolkit for Visual Studio と Visual Studio Server Explorer を使用してサンプル DB インスタンスに接続します。

1. [AWS Explorer] で、 Amazon RDS ノードと Instances ノードを展開します。DB インスタンスを右クリックし、 [Add to Server Explorer] を選択します。

Toolkit for Visual Studio が接続 できない場合は、 [Unable to Connect] ダイアログボックスが表示されます。ダイアログボックスに、現在の CIPR/IP を DB インスタンスのセキュリティグループに追加するオプションが提供されます。[OK] を選択して追加するか、[キャンセル] をクリックして終了します。

接続できない場合は、ネットワークネットワーク管理者に連絡する必要がある場合があります。2. [Add Connection] ダイアログボックスで、[Authentication] リストの [SQL Server Authentication] を選択

し、 [ユーザー名] と [パスワード] を入力します。3. 特定のデータベースに接続するには、[Select or enter a database name] リストでデータベースを選択し

ます。4. [OK] を選択して接続します。

暗号化された接続文字列を使用するAWS Systems Manager では、データベース文字列のようなプレーンテキストデータや、パスワードのような秘密データなど、設定データを一元的に管理するストアを利用できます。これにより、秘密データと

16

AWS .NET SDK .NET 開発者のための AWS ガイド暗号化された接続文字列を使用する

設定データをコードから分離できます。パラメータにはタグを付けることができ、階層別に整理できるため、より簡単にパラメータを管理できます。たとえば、"constr" という同じパラメータ名を "/MyWebApp/Development/constr" や "/MyWebApp/Production/constr" などの異なる階層パスで使用して、異なる値を保存できます。値は暗号化され、ユーザーとリソースへのアクセスを制御できます。

IAM ユーザーアカウント、グループ、またはロールに管理者アクセス権限が割り当てられている場合は、システムマネージャーにアクセスできます。そうでない場合、管理者は、IAM アカウント、グループ、またはロールを更新する必要があります。

暗号化された接続文字列を作成するAWS マネジメントコンソール を使用して暗号化された SQL Server 接続文字列を作成するには:

1. https://console.aws.amazon.com/systems-manager/を開き、ナビゲーションペイの [Shared Reources]で、[Parameter Store] を選択します。

2. [Create Parameter] を選択します。3. [Name] ボックスに、階層と名前を入力します。階層を使用して、異なるデプロイ環境の一意の接続文

字列を作成できます。例: /MyWebApp/Development/constr、/MyWebApp/Test/constr、および/MyWebApp/Production/constr。

4. 説明を入力します。例: Dev environment SQL Server connection string.5. [Secure String] を選択します。6. SQL Server 接続文字列を入力します。少なくとも、通常は接続文字列

で、password、server、initial catalog、およびuser idを指定します。("server=myserver.com;Initial Catalog=mydb;User ID=myid;Password=mypwd" など)。

7. [Create parameter] を選択します。

パラメータを作成することもでき、AWS Tools for PowerShell を使用して他の操作を実行できます。

# Create a new connection string; returns parameter versionWrite-SSMParameter -Name "/MyWebApp/Development/constr" -Value "server=<server>;initial catalog=<db>;user id=<id>;password=<pwd>" -Type SecureString -Overwrise $true

# Retrieve all the keys for this appGet-SSMParametersByPath -Path "/MyWebApp" -Recursive $true

# Get latest version of a parameterGet-SSMParameter -Name "/MyWebApp/Development/constr"

# Get version of a parameterGet-SSMParameter -Name "/MyWebApp/Development/constr:1"

# Get parameter value with decryptionGet-SSMParameter -Name "/MyWebApp/Development/constr" -WithDecryption $true

PowerShell Tools の詳細については、AWS Tools for Windows PowerShell<https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html> を参照してください。

.NET から暗号化された接続文字列を読むAWS SDK for .NET を使用して、パラメータストアの値を取得できます。

// Add the AWSSDK.SimpleSystemsManagement NuGet package to your projectusing Amazon.SimpleSystemsManagement;using Amazon.SimpleSystemsManagement.Model;

class DbHelper

17

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB での作業

{ public static string GetDBConnectionString() { // The parameter name is customized based on the ASPNETCORE_ENVIRONMENT // // You can change this to a fixed string or use a different mechanism // to customize. String parameterName = String.Format("/MyWebApp/{0}/constr", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));

// Using USEast1 var ssmClient = new AmazonSimpleSystemsManagementClient(Amazon.RegionEndpoint.USEast1); var response = ssmClient.GetParameter(new GetParameterRequest { Name = parameterName, WithDecryption = true }); return response.Parameter.Value; }}

Amazon DynamoDB での作業Amazon DynamoDB は、あらゆるスケールで 1 桁台のミリ秒単位の安定したレイテンシーを必要とする全アプリケーションに対応した、高速かつフレキシブルな NoSQL データベースサービスです。完全マネージド型のクラウドデータベースで、ドキュメントとキー値のストアモデルの両方をサポートしています。その柔軟なデータモデル、信頼性の高いパフォーマンス、スループットキャパシティの自動スケーリングは、ウェブとその他のアプリケーションに最適です。

トピック• Amazon DynamoDB プログラミングモデルの選択 (p. 18)• Amazon DynamoDB を使用した ASP.NET セッション状態の管理 (p. 23)

Amazon DynamoDB プログラミングモデルの選択AWS SDK for .NET は、AWS によって提供される高速の NoSQL データベースサービスである AmazonDynamoDB をサポートします。SDK には、DynamoDB との通信用に 3 つのプログラムモデルが含まれます。低レベル、ドキュメント、オブジェクト永続性です。

以下では、これらのモデルとその API を紹介し、どのような場合にどのような方法で使用するかを例で示します。また、AWS SDK for .NET での追加の DynamoDB プログラミングリソースへのリンクも提供します。

低レベルモデル低レベルプログラミングモデルは、DynamoDB サービスに対する直接呼び出しをラップしています。このモデルには、Amazon.DynamoDBv2 名前空間からアクセスします。

低レベルモデルは、3 つのモデルの中で最も多くのコードを記述する必要があります。たとえば、.NETデータ型を DynamoDB の同等の型に変換する必要があります。ただし、このモデルを使用するとほとんどの機能にアクセスできます。

以下の例では、低レベルモデルを使用して DynamoDB でのテーブルの作成、テーブルの変更、テーブルへの項目の挿入を行う方法を示します。

18

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB プログラミングモデルの選択

テーブルを作成する

次の例では、CreateTable クラスの AmazonDynamoDBClient メソッドを使用してテーブルを作成します。CreateTable メソッドでは、必要な項目属性名、プライマリキーの定義、スループット容量などの特性を含む CreateTableRequest クラスのインスタンスを使用します。CreateTable メソッドは、CreateTableResponse クラスのインスタンスを返します。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();

Console.WriteLine("Getting list of tables");List<string> currentTables = client.ListTables().TableNames;Console.WriteLine("Number of tables: " + currentTables.Count);if (!currentTables.Contains("AnimalsInventory")){ var request = new CreateTableRequest { TableName = "AnimalsInventory", AttributeDefinitions = new List<AttributeDefinition> { new AttributeDefinition { AttributeName = "Id", // "S" = string, "N" = number, and so on. AttributeType = "N" }, new AttributeDefinition { AttributeName = "Type", AttributeType = "S" } }, KeySchema = new List<KeySchemaElement> { new KeySchemaElement { AttributeName = "Id", // "HASH" = hash key, "RANGE" = range key. KeyType = "HASH" }, new KeySchemaElement { AttributeName = "Type", KeyType = "RANGE" }, }, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = 10, WriteCapacityUnits = 5 }, };

var response = client.CreateTable(request);

Console.WriteLine("Table created with request ID: " + response.ResponseMetadata.RequestId);}

19

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB プログラミングモデルの選択

テーブルへの項目の挿入次の例では、低レベルモデルを使用して DynamoDB のテーブルに 2 つの項目を挿入します。各項目は、PutItem クラスのインスタンスを使用して、AmazonDynamoDBClient クラスの PutItemRequestメソッドによって挿入されます。PutItemRequest クラスの 2 つのインスタンスはそれぞれ、項目を挿入するテーブルの名前と一連の項目属性値を取得します。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();

var request1 = new PutItemRequest{ TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "1" }}, { "Type", new AttributeValue { S = "Dog" }}, { "Name", new AttributeValue { S = "Fido" }} }};

var request2 = new PutItemRequest{ TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "2" }}, { "Type", new AttributeValue { S = "Cat" }}, { "Name", new AttributeValue { S = "Patches" }} }}; client.PutItem(request1);client.PutItem(request2);

テーブルからの項目の読み取り次の例では、Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem メソッドと一連の式を使用して、Id が 205 である項目を取得して出力します。項目の属性のうち返されるものは、Id、Title、Description、Color、RelatedItems、Pictures、ProductReviews だけです。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new GetItemRequest{ TableName = "ProductCatalog", ProjectionExpression = "Id, Title, Description, Color, #ri, Pictures, #pr", ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#ri", "RelatedItems" } }, Key = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "205" } } },};var response = client.GetItem(request);

20

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB プログラミングモデルの選択

前の例で、ProjectionExpression プロパティは戻る属性を指定しています。ExpressionAttributeNames プロパティで、プレースホルダー #pr は ProductReviews 属性を表し、プレースホルダー #ri は RelatedItems 属性を表します。

ドキュメントモデルドキュメントプログラミングモデルは、DynamoDB のデータを操作する簡単な手段を提供します。このモデルは、特にテーブルおよびテーブル内の項目にアクセスすることを目的に作られています。このモデルには、Amazon.DynamoDBv2.DocumentModel 名前空間からアクセスします。

低レベルプログラミングと比べると、ドキュメントモデルの方が DynamoDB データに対するコーディングが容易です。たとえば、多くの .NET データ型を DynamoDB の同等のデータ型に変換する必要がありません。ただし、このモデルでは、低レベルプログラミングモデルほど多くの機能にはアクセスできません。たとえば、このモデルを使用して、テーブルの項目を作成、取得、更新、削除することはできます。しかし、テーブルを作成するには、低レベルモデルを使用する必要があります。オブジェクト永続性モデルと比較すると、このモデルの方が .NET オブジェクトを保存、ロード、クエリするために多くのコードを作成する必要があります。

次の例では、ドキュメントモデルを使用して DynamoDB のテーブルの項目を挿入および取得する方法を示します。

テーブルへの項目の挿入

次の例では、Table クラスの PutItem メソッドを使用してテーブルに項目を挿入しています。PutItemメソッドは、Document クラスのインスタンスを受け取ります。Document クラスは、初期化された属性の単純なコレクションです。項目を挿入するテーブルを特定するには、Table クラスの LoadTable メソッドを呼び出し、AmazonDynamoDBClient クラスのインスタンスと DynamoDB の対象テーブルの名前を指定します。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var item = new Document();

item["Id"] = 3;item["Type"] = "Horse";item["Name"] = "Shadow";

table.PutItem(item);

テーブルからの項目の取得

次の例では、GetItem クラスの Table メソッドを使用して項目を取得しています。取得する項目を特定するために、GetItem メソッドでは対象項目のハッシュおよび範囲プライマリキーを使用しています。Table クラスの LoadTable メソッドで項目を取得するテーブルを特定するには、AmazonDynamoDBClient クラスのインスタンスと DynamoDB の対象テーブルの名前を使用します。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var item = table.GetItem(3, "Horse");

Console.WriteLine("Id = " + item["Id"]);

21

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB プログラミングモデルの選択

Console.WriteLine("Type = " + item["Type"]);Console.WriteLine("Name = " + item["Name"]);

前の例では、Id、Type、Name の属性値を WriteLine メソッドの文字列に暗黙的に変換しています。AsType クラスのさまざまな DynamoDBEntry メソッドを使用すると、明示的に変換できます。たとえば、Id データ型の Primitive の属性値を、AsInt メソッドを使用して整数に明示的に変換できます。

int id = item["Id"].AsInt();

または、(int) を使用することで簡単に明示的なキャストを実行できます。

int id = (int)item["Id"];

オブジェクト永続性モデルオブジェクト永続性プログラミングは、DynamoDB での .NET オブジェクトの保存、ロード、クエリを特に目的にして作られています。このモデルには、Amazon.DynamoDBv2.DataModel 名前空間からアクセスします。

3 つのモデルの中で、オブジェクト永続性モデルは、DynamoDB データの保存、ロード、クエリに関しては常にコーディングが最も簡単です。たとえば、DynamoDB のデータ型を直接操作できます。ただし、このモデルでアクセスできるのは、DynamoDB の .NET オブジェクトを保存、ロード、クエリする操作だけです。たとえば、このモデルを使用して、テーブルの項目を作成、取得、更新、削除することはできます。ただし、最初に低レベルモデルを使用してテーブルを作成してから、このモデルを使用して .NET クラスをテーブルにマッピングする必要があります。

以下の例では、項目を表す .NET クラスを定義する方法、.NET クラスのインスタンスを使用して項目を挿入する方法、.NET オブジェクトを使用して DynamoDB のテーブルから項目を取得する方法を示します。

テーブルで項目を表す .NET クラスの定義

次の例では、DynamoDBTable 属性がテーブル名を指定しているのに対し、DynamoDBHashKey およびDynamoDBRangeKey 属性はテーブルのハッシュおよび範囲プライマリキーをモデル化しています。

// using Amazon.DynamoDBv2.DataModel;

[DynamoDBTable("AnimalsInventory")]class Item{ [DynamoDBHashKey] public int Id { get; set; } [DynamoDBRangeKey] public string Type { get; set; } public string Name { get; set; }}

.NET クラスのインスタンスの使用によるテーブルへの項目の挿入

この例では、DynamoDBContext クラスの Save メソッドを使用して項目を挿入しています。これは項目を表す .NET クラスの初期化されたインスタンスを取得します。(DynamoDBContext クラスのインスタンスは、AmazonDynamoDBClient クラスのインスタンスで初期化されます)。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DataModel;

22

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB を使用し

た ASP.NET セッション状態の管理

var client = new AmazonDynamoDBClient();var context = new DynamoDBContext(client);var item = new Item{ Id = 4, Type = "Fish", Name = "Goldie"};

context.Save(item);

.NET オブジェクトのインスタンスの使用によるテーブルからの項目の取得

この例では、DynamoDBContext クラスの Load メソッドを使用して項目を取得しています。これにより、取得する項目のハッシュおよび範囲プライマリキーを表す .NET クラスの部分的に初期化されたインスタンスを取得します。(前に示したように、DynamoDBContext クラスのインスタンスはAmazonDynamoDBClient クラスのインスタンスで初期化されます)。

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DataModel;

var client = new AmazonDynamoDBClient();var context = new DynamoDBContext(client);var item = context.Load<Item>(4, "Fish");

Console.WriteLine("Id = {0}", item.Id);Console.WriteLine("Type = {0}", item.Type);Console.WriteLine("Name = {0}", item.Name);

Amazon DynamoDB を使用した ASP.NET セッション状態の管理ASP.NET アプリケーションは、セッション状態のデータをメモリに格納する場合があります。ただし、この方法は十分な拡張性がありません。アプリケーションが複数のウェブサーバーを対象とする規模に拡大した後、セッション状態をサーバー間で共有する必要があります。一般的な対応策は、Microsoft SQLServer を使用して専用のセッション状態サーバーをセットアップすることです。しかし、このアプローチにも欠点があります。他のマシンの管理が必要になり、セッション状態サーバーが単一障害点となります。また、セッション状態サーバー自体がパフォーマンスのボトルネックとなる可能性があります。

DynamoDB を使用すると、各ウェブサーバーを対象としたセッション状態の共有に対して効果的なソリューションが実現され、これらの欠点が回避されます。

Note

使用するソリューションに関係なく、DynamoDB では項目のサイズに制限が適用されることに注意してください。DynamoDB に保存するどのレコードも、この制限を超えることはできません。詳細については、Amazon DynamoDB Developer Guideの「DynamoDB での制限」を参照してください。

AWS SDK for .NET には、ASP.NET セッション状態プロバイダーが含まれているAWS.SessionProvider.dll が付属しています。また、AmazonDynamoDBSessionProviderSample サンプルも含まれています。このサンプルは、DynamoDB をセッション状態プロバイダーとして使用する方法を示します。

ASP.NET アプリケーションでセッション状態を使用する方法の詳細については、MSDN のドキュメントを参照してください。

23

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB を使用し

た ASP.NET セッション状態の管理

ASP.NET_SessionState テーブルの作成アプリケーションを起動すると、そのアプリケーションは DynamoDB テーブル(デフォルト名はASP.NET_SessionState)を探します。最初にアプリケーションを実行する前に、このテーブルを作成することをお勧めします。

1. [テーブルの作成] を選択します。[Create Table (テーブルの作成)] ウィザードが開きます。2. [Table name] には、ASP.NET_SessionState を入力します。3. [Primary key] フィールドに、「SessionId」と入力し、タイプを「String」に設定します。4. すべてのオプションを入力したら、[Create (作成)] を選択します。

ステータスが ASP.NET_SessionState から CREATING に変わったら、ACTIVE テーブルは使用できる状態になります。

Note

テーブルを事前に作成しない場合、初期化時にセッション状態プロバイダーによってテーブルが作成されます。セッション状態テーブルの設定パラメータとして機能する属性のリストについては、次の web.config オプションを参照してください。プロバイダーがテーブルを作成する場合は、これらのパラメータを使用します。

セッション状態プロバイダーの設定1. Visual Studio ASP.NET プロジェクトに、AWSSDK.dll と AWS.SessionProvider.dll への参照を追

加します。これらのアセンブリは、AWS SDK for .NET をインストールすると利用できます。NuGet を使用してこれらのアセンブリをインストールすることもできます。

SDK の以前のバージョンでは、セッション状態プロバイダーの機能は AWS.Extension.dll に含まれていました。使いやすさを向上させるために、この機能は AWS.SessionProvider.dll に移動されました。詳細については、ブログの投稿記事を参照してください。<problematic>:aws-blogs-net:`AWS.Extension Renaming <Tx27RWMCNAVWZN9/AWS-Extensions-renaming>`</problematic>に加えて使用したりすることもできます。

2. アプリケーションの Web.config ファイルを編集します。system.web 要素で、既存のsessionState 要素を次の XML フラグメントに置き換えます。

<sessionState timeout="20" mode="Custom" customProvider="DynamoDBSessionStoreProvider"> <providers> <add name="DynamoDBSessionStoreProvider" type="Amazon.SessionProvider.DynamoDBSessionStateStore" AWSProfileName="{profile_name}" Region="us-west-2" /> </providers></sessionState>

プロファイルは、セッション状態の保存と取得のために DynamoDB との通信で使用される AWS 認証情報を表します。AWS SDK for .NET を使用していて、アプリケーションの Web.config ファイルのappSettings セクションでプロファイルを指定している場合は、providers セクションでプロファイルを指定する必要はありません。AWS.NET クライアントコードが実行時に検出します。詳細については、net-dg-config を参照してください。

ウェブサーバーが、EC2 インスタンスの IAM ロールを使用するように設定されている Amazon EC2インスタンスで実行されている場合は、Web.config ファイルで認証情報を指定する必要はありません。この場合、AWS .NET クライアントは IAM ロール認証情報を使用します。詳細については、net-dg-roles および net-dg-ddb-sess-security を参照してください。

24

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB を使用し

た ASP.NET セッション状態の管理

Web.config オプション

providers ファイルの Web.config セクションで、次の設定属性を使用できます。

AWSAccessKey

使用するアクセスキー ID。これは providers セクションまたは appSettings セクションで設定できます。この設定を使用しないことを強くお勧めします。代わりに、AWSProfileName を使用して認証情報を指定し、プロファイルを指定してください。

AWSSecretKey

使用するシークレットキー。これは providers セクションまたは appSettings セクションで設定できます。この設定を使用しないことをお勧めします。 代わりに、AWSProfileName を使用して認証情報を指定し、プロファイルを指定してください。

AWSProfileName

使用する認証情報に関連付けられるプロファイルの名前。詳細については、「AWS SDK for .NET アプリケーションの設定」を参照してください。

リージョン

必須の string 属性。DynamoDB を使用する AWS リージョン。AWS リージョンの一覧については、「リージョンとエンドポイント: DynamoDB」を参照してください。

アプリケーション

オプションの string 属性。Application 属性の値は、テーブルのセッションデータをパーティション分割するために使用されます。これにより、テーブルを複数のアプリケーションで使用することができます。

オプションの string 属性。セッションデータの格納に使用されるテーブルの名前。デフォルト:ASP.NET_SessionState。

ReadCapacityUnits

オプションの int 属性。プロバイダーがテーブルを作成する際に使用する読み取りキャパシティーユニット。デフォルトは 10 です。

WriteCapacityUnits

オプションの int 属性。プロバイダーがテーブルを作成する際に使用する書き込みキャパシティーユニット。デフォルトは 5 です。

CreateIfNotExist

オプションの boolean 属性。CreateIfNotExist 属性は、テーブルが存在しない場合に、プロバイダーがテーブルを自動作成するかどうかを制御します。デフォルト: true。このフラグが false に設定されていて、テーブルが存在しない場合は、例外がスローされます。

セキュリティに関する考慮事項DynamoDB テーブルが作成され、アプリケーションが設定されると、他のセッションプロバイダーでもセッションを使用できるようになります。

セキュリティのベストプラクティスとして、IAM ユーザーの認証情報でアプリケーションを実行することをお勧めします。IAM マネジメントコンソールまたは AWS Toolkit for Visual Studio のいずれかを使用して、IAM ユーザーを作成し、アクセスポリシーを定義できます。

セッション状態プロバイダーでは、セッションデータを保存するテーブルに対して、DeleteItem、DescribeTable、GetItem、PutItem、UpdateItem、の各オペレーションの呼び出しが可能

25

AWS .NET SDK .NET 開発者のための AWS ガイドAmazon DynamoDB を使用し

た ASP.NET セッション状態の管理

になっている必要があります。次のサンプルポリシーを使用して、us-east-1 で実行している DynamoDBのインスタンスのプロバイダーが必要とするオペレーションだけを使用できるように、IAM ユーザーを制限することができます。

{ "Version" : "2012-10-17","Statement" : [ { "Sid" : "1", "Effect" : "Allow", "Action" : [ "dynamodb:DeleteItem", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource" : "arn:aws:dynamodb:|region_api_default|:{<YOUR-AWS-ACCOUNT-ID>}:table/ASP.NET_SessionState" } ]}

26