引き続き AWS Lambda を C# で、.NET Core 1.0、.NET Standard 1.6 を使って実装する際のメモです。 環境変数の取り扱いについてです。
(2017/9月時点での話=.NET Core 1.0しかサポートしてない時点です)
Overview
1 開発環境の準備 (その1)
2 .NET Core 1.0 対応の .NET Standard 1.6 のクラスライブラリの作成(その1)
3 簡易なクラスライブラリー実装(その1)
4 Console プロジェクトの作成(その2)
5 Autofac の実装(その2)
6 AWS Labmda プロジェクトの作成(その2)
7 AWS Labmda の環境変数を読み込む(←今回ココから)
8 AWS API Gateway から Lambda - プロキシ統合 の使用とか
9 AWS Lambda から AWS Lambda の呼び出し
10 AWS Lambda から CloudWatch Events の呼び出し
デバッグ時( = 前回作成したConsoleAppでデバッグ実行時 )にはローカルの環境の環境変数を使い、
AWS Lambda上で実行時は、Lambdaの環境変数を読み込む実装イメージです。
7 AWS Labmda の環境変数を読み込む
AWS Lambda では、関数ごとに環境変数を設定できるので、そこで環境に応じたキーとか諸々を設定できます(詳しくは以下リンク)。
Environment Variables - AWS Lambda
デバッグ実行用に appsettings.json を用意
デバッグ実行(ConsoleAppからの実行)時に、appsettings.json
を読み込むので、
「LambdaDemo.ConsoleApp」プロジェクトを右クリック > 追加
> クラス
をクリックします(jsonを追加するんですが面倒なんで...)
名前に「appsettings.json」と入力しして 追加
をしましょう。
追加後、「appsettings.json」ファイルを右クリック > プロパティ
を開きます。
左ペイン「全般」 > 「詳細設定」 > 「出力ディレクトリにコピー」を「新しい場合はコピーにする」くらいにしておきましょう。
次は、jsonを編集します。「appsettings.json」ファイル開き、空っぽにしてから以下のように編集します。
{ "env_info": "LOCAL DEBUG", "aws_endpoint": "ap-northeast-1" }
IoCコンテナのプロジェクトで一括管理
環境変数読み込みの実現方法としては、ASP.NET Core のやつと同様です(詳しくは以下リンク)。
ASP.NET Core の構成 | Microsoft Docs
前回作成した「LambdaDemo.IoC」プロジェクトの、DemoContaioner.cs
を開きます。
コンストラクター LambdaDemo.IoC()
で、読み込むための設定しています。
今回は、以下のコードを実装しています(後ほどクラス全体のコードを載せてます)。
static DemoContainer() { Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .AddEnvironmentVariables() .Build(); //以下略
appsettings.json
を読み込み、そのあとに環境変数を読み込んで上書きするというイメージです。
が、Lambda側に appsettings.json
を配置する予定はないので、実際のところは以下のイメージです。
- デバッグ実行時(ConsoleAppからの実行時)なら
appsettings.json
を読み込む(ローカルのデバッグ環境には必要な環境変数を設定していない想定)。 - Lambdaで実行時は、環境変数を読み込む。
json のパスを代えたいときは、 jsonを読み込む前に SetBasePath
を読み込んであげると良いです。
で、後はこんな感じで実装すればOKです。( DemoContainer
クラスの全体)
46-47行目でそれぞれ読み込んで、読み込んだ値を49-50行目ログに出すようにしました。
実際に実行してみると正しく動いていることが確認できます。
AWS Lambda での実行確認
前回作った状態のアプリで、「LambdaDemo.Lambda」プロジェクトをデプロイしてみましょう。 (デプロイのやり方は以下リンク)
AWS Lambda で環境変数の設定
AWS マネジメントコンソールで デプロイした Lambda関数のページを開き、「コード」タブの下の方で環境変数を設定します。
環境変数のキーには「-」が使えなかったりするので注意です(appsettings.jsonから考慮が必要ですね)。
appsettings.json と同じキーを設定し、値は、env_info
だけ変えてみました。
保存してテストしてみましょう。
CloudWatch でログを見てみると、env_info
が正しく取得できていることが確認できます。
もう少し実践的なところは、Lambda から Lambda を呼ぶ際などにやるとします。