0
Help us understand the problem. What are the problem?

posted at

[AWS.1] .net AWS Lambda 開発環境(for mac) の構築

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

  1. ブラウザから、MacOS用の pkgファイルをダウンロードします。
    https://awscli.amazonaws.com/AWSCLIV2.pkg
     
  2. ダウンロードしたファイルを実行し、画面の指示に従ってインストールします。
    「インストール先の選択」画面では次の3つを選択可能ですが、特に問題が無ければ既定で選択されている『このコンピュータのすべてのユーザ用にインストール』のままで良いと思います。
     ・このコンピュータのすべてのユーザ用にインストール
     ・自分専用にインストール
     ・特定のディスクにインストール
     
  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 へデプロイする手順について説明します。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?