Amazon Web Services ブログ

AWS Lambda の新機能 – 環境変数とサーバーレスアプリケーションモデル (SAM)

AWS Lambda とサーバーレスアプリケーション開発をめぐる興奮のとりこになっています。過去 1〜2 年間に週刊 AWS で、多くのサーバーレスの成功事例、ツール、オープンソースプロジェクトを紹介しました。今回は Lambda に追加された重要な機能として、環境変数と新しいサーバーレスアプリケーションモデルについて説明します。

環境変数
開発者なら、だれでも複数の環境で利用できるコードを構築したいと思います。コードを簡単に再利用するには、実行時に設定値を受け入れられるように構築する必要があります。設定値とは、コードの環境をカスタマイズするためのテーブル名、デバイス名、ファイルパスなどです。たとえば、多くのプロジェクトは開発環境、テスト環境、本稼働環境ごとに設定が異なります。Lambda 関数に環境変数を指定できるようになりました。これでコードを変更または再デプロイすることなく設定の変更が可能になり、これまで以上にサーバーレスアプリケーション開発が効率化されます。各環境変数はキーと値のペアです。キーと値は AWS Key Management Service (KMS) で暗号化され、必要に応じて復号されます。関数あたりの環境変数の数には制限がありませんが、合計サイズは 4 KB を超えることができません。 Lambda 関数を新規作成する場合は、同時に環境変数も設定します。最新バージョンの関数の値は変更できますが、以前のバージョンの値は変更できません。次の例では、シンプルな Python 関数を作成して、いくつかの環境変数を設定し、その環境変数をコードから参照しています (このために os ライブラリをインポートする必要がありました)。

Lambda に用意されているデフォルトのサービスキーを使えば、この機能を使用しても料金はかかりません (独自のキーを使用する場合は、リクエストあたりの KMS の通常料金が適用されます)。この新しい機能の詳細とさまざまな活用方法については、AWS Compute Blog で「サーバーレスアプリケーションを簡素化する Lambda 環境変数」を参照してください。

AWS サーバーレスアプリケーションモデル
サーバーレスアプリケーションを構築するために、Lambda 関数、Amazon API Gateway リソース、Amazon DynamoDB テーブルを併用する場合があります。新しい AWS サーバーレスアプリケーションモデル (AWS SAM) を使うと、これらのすべてのコンポーネントを、AWS CloudFormation でネイティブにサポートされている簡略化された構文で記述できます。この構文を使用するには、CloudFormation テンプレートに次のような Transform セクション (CloudFormation の新しい要素) が含まれている必要があります。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

テンプレートの他のセクションでは、Lambda 関数、API Gateway のエンドポイントとリソース、DynamoDB テーブルを指定します。各関数宣言では、ハンドラー、ランタイム、および関数のコードが含まれている ZIP ファイルへの URI を指定します。API は、イベントを定義して暗黙的に宣言するか、Swagger ファイルを指定して明示的に宣言することができます。DynamoDB テーブルは、テーブル名、プライマリキー (名前とタイプ)、プロビジョニングされたスループットのみが必要な簡略化された構文を使用して宣言します。必要に応じてすべてのオプションを使用することもできます。これで、Lambda コンソールで新しい Export オペレーションを使用し、Lambda 関数の AWS SAM ファイルとデプロイパッケージを生成できるようになりました。[Actions] メニューをクリックして、[Export function] を選択します。

次に、[Download AWS SAM file] または [Download deployment package] をクリックします。

私の関数の AWS SAM ファイルは次のとおりです。

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: A starter AWS Lambda function.
Resources:
  ShowEnv:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python2.7
      CodeUri: .
      Description: A starter AWS Lambda function.
      MemorySize: 128
      Timeout: 3
      Role: 'arn:aws:iam::99999999999:role/LambdaGeneralRole'

デプロイパッケージは ZIP ファイルで、関数のコードが含まれています。このファイルを S3 にアップロードし、SAM ファイルの CodeUri を更新してサーバーレスアプリケーションの一部として使えるようにします。これは手動で行うことも、新しい CLI コマンドのペア (aws cloudformation packageaws cloudformation deploy) を使って自動化することもできます。このオプションの詳細については、新しい記事「簡略化されたサーバーレスアプリケーションの管理とデプロイの概要」で「サーバーレスアプリのデプロイ」セクションを参照してください。Lambda 関数の設計図をエクスポートすることもできます。コーナーにあるダウンロードリンクをクリックします。

次に、[Download blueprint] をクリックします。

ZIP ファイルには、AWS SAM ファイルとコードが含まれています。

この新しい仕様の詳細と実際の使い方については、AWS Compute Blog で「簡略化されたサーバーレスアプリケーションの管理とデプロイの概要」を参照してください。

Jeff;