Help us understand the problem. What is going on with this article?

AWS Toolkit for Visual Studio Codeを使ってみた(C#編)

AWS Toolkit for Visual Studio Codeとは

AWS Toolkit for Visual Studio CodeはAWSがオープンソースで開発を行っているVisual Studio Code(以下VS Code)用のプラグインで、ソースコードはGitHubのaws/aws-toolkit-vscode で公開され開発が進められています。 ライセンスは Apache License 2.0で、2019/10/20 時点の最新バージョンは1.1.0です。

AWS Toolkit for Visual Studio Codeの便利な機能

AWS Toolkit for Visual Studio Codeは、VS Codeのプラグインとして下記の便利な機能を提供します。

  • AWS Serverless Application Model (以下 SAM) を利用したサーバーレスアプリケーションの開発
  • AWS Lambdaの開発言語として、Node.js、Python、.NET Coreに対応
  • SAMテンプレートを含むAWS Lambdaファンクションプロジェクトの生成
  • ユニットテスト用コードの提供
  • VS Code内でローカル実行やデバッグ実行
  • VS Code内からSAMテンプレートによるAWSへのデプロイ

利用するための準備

前提条件

AWS Toolkit for Visual Studio Codeをインストールするために必要な前提条件は以下の通りです。

また使用する言語に応じて下記のVS Codeプラグインをインストールします。

AWSサーバーレスアプリケーション開発を行うには以下もインストールします。

筆者は下記の環境で動作を確認しました。

  • macOS Mojave バージョン 10.14.6
  • Visual Studio Code バージョン 1.39.2
  • AWS Toolkit for Visual Studio バージョン 1.1.0
  • C# for Visual Studio Code (powered by OmniSharp) 1.21.5
  • .NET Core 3.0.100
  • aws-cli/1.16.156 Python/3.6.1 Darwin/18.7.0 botocore/1.12.146
  • SAM CLI, version 0.22.0
  • Docker version 19.03.2, build 6a30dfc

AWS Toolkit for Visual Studio Codeのインストール

インストールは、シンプルにプラグインをインストールするだけです。
install_AWS_Toolkit_for_Visual_Studio_Code.png

AWSで利用するプロファイルの設定

AWS Toolkit for Visual Studio Codeをインストールしたら、AWSのリソースにアクセスするために認証情報の設定を行います。コマンドパレットから [AWS: Create Credentials Profile]を選択します。
スクリーンショット_2019_10_19_22_20.png
初期プロファイル名、利用するIAM Userの認証情報(アクセスキーIDとシークレットアクセスキー)を入力します。すでに設定されている場合は、~/.aws/credentialsファイルと ~/.aws/configファイルが開きますので、内容を確認します。アクセスキーIDとシークレットアクセスキーの取得の方法は、AWSアクセスキーの取得を参照してください。
credentials_—_demoapp2.png

AWS Toolkit for Visual Studio Codeの利用

AWS Toolkit for Visual Studio Codeのインストールとプロファイルの設定が完了したら、サーバーレスアプリケーションを開始することができます。

AWSサーバーレスアプリケーションの作成

サーバーレスアプリケーションの開発を始めるために、コマンドパレットから[AWS: Create New SAM Application]を選択します。
create_new_sam_app.png
作成するサーバーレスアプリケーションの言語を選択します。今回はC#編ということで、dotnetcore2.1を選択します。
select_language.png
ワークスペースのフォルダを選択します。
select_workspace_folder.png

アプリケーション名を入力します。
enter_new_application.png

サーバーレスアプリケーションプロジェクトが作成され、template.ymlが表示されます。Amazon API Gatewayから呼び出されるAWS LambdaをAWS上に生成するSAMテンプレートが作成されていることがわかります。
sam_template.png

ローカル環境でデバッグモードの実行

サーバーレスアプリケーションプロジェクトには、AWS Lambdaファンクションのサンプルコードが予め作成されています。srcフォルダ内のFunction.csを開きます。
function_cd.png
左側のアクティビティーバーからAWSアイコンをクリックするとCodeLensが表示されます。デバッグ実行で実行を中断したい行番号の左側をクリックしてブレークポイントを設定します。AWS LambdaファンクションのエントリポイントであるFunctionFunctionHandlerメソッドのCodeLensで[Debug Loccaly]をクリックしてデバッグ実行を開始します。
debug2.png
デバッグツールバーとデバッグコンソールが表示され、.NET Coreアプリケーションがデバッグモードで実行開始されます。
debug3.png
デバッグツールバーの続行(F5)をクリックするとブレイクポイントを設定した箇所で実行が停止することを確認できます。またローカル変数の値が確認できることもわかります。
debug4.png

API Gatewayイベントソースリクエストからの情報の受け取り

Amazon API GatewayをイベントソースとするAWS Lambdaファンクションでイベントソースからの値を受け取るためにAWS Lambda for .NET Coreでは、Amazon.Lambda.APIGatewayEvents.APIGatewayProxyRequestクラスを提供しています。このクラスはパブリックプロパティを集めただけのクラスですが、AWS API Gatewayから渡されるJSONのメンバーの値が自動的にこのクラスのインスタンスにセットされて渡されるようになっています。この動作をデバッグモードの実行でエミュレートするための機能が提供されています。
configure.png
CodeLensの[Configure]をクリックすると.aws/templates.jsonが開きます。
event1.png
このevnetプロパティに値をセットするとデバッグ実行にその値を受け取ることができます。サーバーレスアプリケーションプロジェクト内の[アプリケーション]/eents/event.jsonにAWS API Gatewayから渡されるjsonのサンプルがあるので、これをコピーして試してみます。
event2.png
再度、CodeLensの[Debug Locally]をクリックしてデバッグモードで実行して見るとAPIGatewayProxyRequestクラスのインスタンスであるapigProxyEventに値がセットされて渡されていることが、変数ウィンドウの値で確認できます。
event3.png

AWSへのデプロイ

AWS Toolkit for Visual Studio Codeが提供する機能を利用して、VS CodeからサーバーレスアプリケーションをAWSへデプロイすることができます。デプロイする前に、あらかじめAmazon S3にデプロイ用のバケットを作成しておきます。
VS Codeのコマンドパレットから[AWS: Deploy SAM Application]を選択します。
deploy1.png
SAMテンプレートを選択します。
deploy2.png
次にデプロイするリージョンを選択します。
deploy3.png
あらかじめ作成しておいたAmazon S3のバケット名を入力します。バケットは1つ前で選択したリージョンに作成している必要があります。
deploy4.png
デプロイスタックのための名前を入力します。
deploy5.png
以上の手順でVS Codeからサーバーレスアプリケーションをデプロイすることができます。
deploy6.png

最後に

AWS Toolkit for Visual Studio Codeを利用することで使い慣れたVS Codeを使用してAWS Lambdaの開発を効率よく行うことができます。今回はC#(.NET Core)で開発を行う例を紹介しましたが、Node.jsやPythonでも同様に利用することができます。この投稿が、VS Codeでサーバーレスアプリケーション開発したいと考えている開発者の方の参考になれば幸いです。

免責

本投稿は、個人の意見で、所属する企業や団体は関係ありません。
また掲載しているサンプルプログラム等の動作に関しても一切保証しておりません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした