1. 概要
2022年2月、AWS Lambda で .NET6 が利用できるようになりました。
VisualStudio 2022 for MAC によって Mac上でも .NET6 アプリケーションを作成できるようになったため、本記事では C#(.NET6) で AWS Lambda 関数を作成するための環境構築について整理していきます。
同様の記事はネット上に溢れており、開発ツールのバージョンアップも頻繁に行われています。
本記事の内容もあっという間に陳腐化すると思われますので、ご注意ください。
VisualStudio 2022 for MAC
.NET コンソールアプリケーションを作成する環境であり、プロジェクトを包括的に管理することができる統合開発環境です。
.NET6 を正式にサポートする Visual Studio ですが、Visual Studio Code でも同様の開発環境を整えることは可能です。
Visual Studio for Mac
https://visualstudio.microsoft.com/ja/vs/mac/
AWS Toolkit for Visual Studio
現時点では、AWS Toolkit for Visual Studio は Visual Studio for Mac をサポートしていません。
AWS を利用する .NETアプリケーションの開発、デバッグ、デプロイが容易になるとのことですが、残念ながら利用することができないため、AWS CLI を手動操作で駆使するしかないようです。
AWS Toolkit for Visual Studio
https://aws.amazon.com/jp/visualstudio/
AWS SDK for .NET
VisualStudio のパッケージ管理システム NuGet を使うと、プロジェクトに AWS SDK のパッケージを追加することができます。
コマンドツールからパッケージを追加することもできますが、Visual Studio からの画面操作で導入する方が遥かに容易です。(特に、導入可能なパッケージを目視で探すときなど)
AWS SDK for .NET のドキュメント
https://docs.aws.amazon.com/ja_jp/sdk-for-net/
NuGet で AWSSDK パッケージをインストールする
https://docs.aws.amazon.com/ja_jp/sdk-for-net/v3/developer-guide/net-dg-install-assemblies.html
AWS アカウント
最初に作成した root アカウントは開発時には利用しません。
管理者権限を持たせた「管理用のユーザアカウント(IAMアカウント)」を作成し、そのアカウントでログインして開発作業を進めてください。
このアカウントは、AWSの各APIや AWS CLI 実行時のアカウントとして使用します。
AWS アカウントでの IAM ユーザーの作成
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html
本記事を作成する際に参考にしたサイト
AWS CLI v2をMacにインストールする
https://qiita.com/NorihitoYamamoto/items/badd32785078bc944089
初級:AWS Lambda + .NET C# の最初の一歩
https://qiita.com/nanananamememe/items/8c57b17e5f7f60b768d4
.NET Core CLI
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/csharp-package-cli.html
2. IAMユーザのアクセスキーを取得
IAMユーザはアクセスキー情報を持つことができます。
IAMユーザ作成時、「AWSアクセスの種類を選択」の「アクセスの種類」欄で、『プログラムによるアクセス』にチェックをつけておくと、アカウント作成中にアクセスキー情報を取得可能です。
アクセスキー情報には下記の値が含まれており、AWS へアクセスする際の認証情報として使用します。
- アクセスキーID
- シークレットアクセスキー
アカウント作成中に取得し忘れた場合は、IAMコンソール画面から対象ユーザーを選択して再取得可能です。
IAM ユーザーのアクセスキーの管理
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html
アクセスキー情報は必ず CSVファイル形式でダウンロードしてください。
作成直後は画面上でも確認できますが、後日改めて確認しようとしても「シークレットアクセスキー」値は二度と表示されません。
その場合、古いキー情報を削除して新しいアクセスキー情報を再作成する必要があります。
3. AWS CLI のインストール
MacOS用のパッケージをダウンロードしてインストールします。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
- ブラウザから、MacOS用の pkgファイルをダウンロードします。
https://awscli.amazonaws.com/AWSCLIV2.pkg
- ダウンロードしたファイルを実行し、画面の指示に従ってインストールします。
「インストール先の選択」画面では次の3つを選択可能ですが、特に問題が無ければ既定で選択されている『このコンピュータのすべてのユーザ用にインストール』のままで良いと思います。
・このコンピュータのすべてのユーザ用にインストール
・自分専用にインストール
・特定のディスクにインストール
- ターミナルを起動し、次のようにコマンドを投入して AWS CLI がインストールされたことを確認します。
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.7.16 Python/3.9.11 Darwin/19.6.0 exe/x86_64 prompt/off
4. AWS CLI の設定
AWS CLI のインストールが終わった後、認証情報などの設定作業を行います。
この作業は aws configure
コマンドで簡単に実施できます。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
設定する情報は次のとおりです。
- アクセスキーID
- シークレットアクセスキー
- AWSリージョン
- 出力形式
アクセスキーID/シークレットアクセスキー
先の手順で取得した、IAMユーザのアクセスキー情報を指定します。
AWSリージョン
既定のリージョンを指定します。
通常は最寄りのリージョン(例. "Asia Pacific (Tokyo)" の場合は ap-northeast-1)を指定しますが、どのリージョンでも構いません。
コマンド実行時に個別指定しない限り、ここで設定したリージョンへリクエストが送信されます。
AWS service endpoints - AWS General Reference
https://docs.aws.amazon.com/general/latest/gr/rande.html
出力形式
既定の出力形式を指定します。
省略時は「JSON」形式となります。
実行例
下記はサンプル値です。
実際の設定値へ置き換えて実行してください。
$ aws configure
AWS Access Key ID [None]: AK****************LE
AWS Secret Access Key [None]: w***********I/K*****G/b****************Y
Default region name [None]: us-west-2
Default output format [None]: json
設定情報は、既定で「default」という名前のプロファイルへ保存されますが、--profile オプションにより、任意の名前のプロファイルへ保存することが可能です。
例えば、「user1」という名前のプロファイルへ保存するときは、次のようにオプションを指定して実行します。
$ aws configure --profile user1
保存したプロファイルを指定してコマンドを実行する際も、--profile オプションを指定します。
$ aws s3 ls --profile user1
5. AWS Extensions for .NET CLI のインストール
AWS拡張機能の一つである「Lambda.Tools」を、.NET CLI へ追加します。
この拡張には、Lambda 関数をパッケージングして AWS上へデプロイする機能が含まれます。
https://github.com/aws/aws-extensions-for-dotnet-cli
(1) インストール
$ dotnet tool install -g Amazon.Lambda.Tools
(2) アップデート
$ dotnet tool update -g Amazon.Lambda.Tools
6. Lambda プロジェクトテンプレートのインストール
AWS Toolkit for Visual Studio が MacOS をサポートしていないため、 新規 Lambda プロジェクトは dotnet コマンドで作成しなければなりません。
そのためのそのためのプロジェクトテンプレートをインストールします。
$ dotnet new -i Amazon.Lambda.Templates
コマンドの実行が成功すると、インストールしたテンプレートの一覧が表示されます。
次のパッケージがインストールされます:
Amazon.Lambda.Templates
成功: Amazon.Lambda.Templates::6.2.0により次のテンプレートがインストールされました。
テンプレート名 短い名前 言語 タグ
------------------------- -------------------------------------------- ------- ---------------------
Empty Top-level Function lambda.EmptyTopLevelFunction [C#] AWS/Lambda/Serverless
Lambda Annotations Fra... serverless.Annotations [C#] AWS/Lambda/Serverless
Lambda ASP.NET Core Mi... serverless.AspNetCoreMinimalAPI [C#] AWS/Lambda/Serverless
Lambda ASP.NET Core We... serverless.AspNetCoreWebAPI [C#],F# AWS/Lambda/Serverless
Lambda ASP.NET Core We... serverless.image.AspNetCoreWebAPI [C#],F# AWS/Lambda/Serverless
Lambda ASP.NET Core We... serverless.AspNetCoreWebApp [C#] AWS/Lambda/Serverless
Lambda Custom Runtime ... lambda.CustomRuntimeFunction [C#],F# AWS/Lambda/Function
Lambda Detect Image La... lambda.DetectImageLabels [C#],F# AWS/Lambda/Function
Lambda Empty Function lambda.EmptyFunction [C#],F# AWS/Lambda/Function
Lambda Empty Function ... lambda.image.EmptyFunction [C#],F# AWS/Lambda/Function
Lambda Empty Serverless serverless.EmptyServerless [C#],F# AWS/Lambda/Serverless
Lambda Empty Serverles... serverless.image.EmptyServerless [C#],F# AWS/Lambda/Serverless
Lambda Giraffe Web App serverless.Giraffe F# AWS/Lambda/Serverless
Lambda Simple Applicat... lambda.SimpleApplicationLoadBalancerFunction [C#] AWS/Lambda/Function
Lambda Simple DynamoDB... lambda.DynamoDB [C#],F# AWS/Lambda/Function
Lambda Simple Kinesis ... lambda.KinesisFirehose [C#] AWS/Lambda/Function
Lambda Simple Kinesis ... lambda.Kinesis [C#],F# AWS/Lambda/Function
Lambda Simple S3 Function lambda.S3 [C#],F# AWS/Lambda/Function
Lambda Simple SNS Func... lambda.SNS [C#] AWS/Lambda/Function
Lambda Simple SQS Func... lambda.SQS [C#] AWS/Lambda/Function
Lex Book Trip Sample lambda.LexBookTripSample [C#] AWS/Lambda/Function
Order Flowers Chatbot ... lambda.OrderFlowersChatbot [C#] AWS/Lambda/Function
Serverless Detect Imag... serverless.DetectImageLabels [C#],F# AWS/Lambda/Serverless
Serverless Simple S3 F... serverless.S3 [C#],F# AWS/Lambda/Serverless
Serverless WebSocket API serverless.WebSocketAPI [C#] AWS/Lambda/Serverless
Step Functions Hello W... serverless.StepFunctionsHelloWorld [C#],F# AWS/Lambda/Serverless
7. 終わりに
これで Lambda プロジェクトソースを作成する準備が整いました。
次回は、ありきたりなネタですが HelloWorld 的なサンプル関数を作成して AWS へデプロイする手順について説明します。