AWSがサーバレスアプリケーションのローカル開発とテストのための'SAM Local'をリリース
- 共有
-
- |
後で読む
マイリーディングリスト
AWSはSAM Localという新ツールのベータ版をリリースした。ローカル開発マシンを使ったサーバレスAWS Lambdaアプリケーションの開発とテストを容易にするツールだ。提供するコア機能には、AWS Lambda関数をDocker内でローカルに実行してテストする機能、Lamdba関数をコールするローカルAPIゲートウェイをSAMテンプレート経由で起動するためのシンプルなCLI、S3やKinesisやCloudTailなどのさまざまなAWSイベントソースの処理をテストするためのサンプルペイロードの生成、といったものがある。
AWSは昨年、サーバレスアプリケーションのデプロイを簡単にすることを目的として、Serverless Application Model(SAM)を導入した。SAMは、AWSの既存のインフラストラクチャ・アズ・コード(IaC)製品であるAWS CloudFormationをベースに構築されたオープンソース仕様であり、開発者によるクラウドリソースの展開と構成の宣言的な指定を可能にする。
SAM Localのおもな機能は次のようなものだ。
- sam localとDockerを使用したAWS Lambda関数のローカル開発とテスト。
- Amazon Simple Storage Service (S3)、Amazon DynamoDB、Amazon Kinesis、Amazon Simple Notification Service (SNS)など、既知のイベントソースからの関数呼び出しのシミュレーション。
- SAMテンプレートからのAmazon API Gatewayのローカル起動とホットリロードによる、機能開発のイテレーション期間の短縮。
- リスナやIDEとの統合を含む、SAMテンプレートの迅速な検証。
- Lambda関数の対話型デバッグのサポート。
SAM Localでサーバレスプロジェクトと関数をローカルで実行するには、Dockerをインストールして起動しておく必要がある。またSAM Localは、dockerデーモンとの接続に環境変数DOCKER_HOSTを使用する。SAM LocalはNPMを使ってインストールする(npm install -g aws-sam-local)か、あるいは最新バージョンを直接ソースからインストールする(github.com/awslabs/aws-sam-localから取得して、samではなく、aws-sam-localという名称のバイナリを生成する)ことができる。
関数および関連する統合AWSリソースのデプロイメント設定は、拡張されたCloudFormationテンプレートフォーマット(最終的には標準のCloudFormationフォーマットに変換される)を使って指定する。例として、下記のtemplate.yamlファイルでは、簡単なDynamoDBテーブル、Pythonで記述されたLambda関数(ソースコードは‘Handlerプロパティ’で指定したlambda_function.pyという名称の別ファイルに含まれている)、GETとPOSTメソッドをサポートするAPI Gatewayインスタンスが定義されている。
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
VotesTable:
Type: "AWS::Serverless::SimpleTable"
VoteSpacesTabs:
Type: "AWS::Serverless::Function"
Properties:
Timeout: 30
Runtime: python3.6
Handler: lambda_function.lambda_handler
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
TABLE_NAME: !Ref VotesTable
Events:
GetVotes:
Properties:
Method: get
Path: /
Type: Api
Vote:
Properties:
Method: post
Path: /
Type: Api
Randall Hunt氏の書いたAWS Blog記事では、API Gatewayを統合したSAM Deploymentの例をあげて、SAM Localを開発ワークフローで活用する方法について具体的に示されている。説明内容は包括的だが、関数をテストするには、対応するDynamoDBテーブルを(例えば、下記のAWS CLIで実行される‘create-table’コマンドで)事前に作成しておく必要がある。また、テスト目的でDynamoDBをローカルに実行する場合は、関数内のDynamoDBホスト名もマシンのローカルネットワークIPアドレスに変更しておく。ただし、単純に‘localhost’と指定することはできない。関数がDockerコンテナ内で実行されているため、Mac用とWindows用のDockerでは関数が自身のVM内で動作しており、‘localhost’が異なるコンテキストであるためだ。
--table-name spaces-tabs-votes \
--attribute-definitions \
AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000
SAM Localでは、CLIコマンド ‘sam local generate-event <サービス>’を実行することで、テスト目的のAWSサービスイベントの生成も可能である。サポート対象のIDEを使えばインタラクティブなデバッグも可能だ。JavaとNode.jsでは、-d フラグとポートを‘sam local’ CLIコマンドで指定して、デバッガを直ちに有効にすることもできる。AWS Blogによれば、Pythonではepdbなどのライブラリの利用も可能だ。
サーバレスアプリをローカルで開発およびテストした後は、SAM CLIを使ってアプリケーションをパッケージし、ライブ環境にデプロイすることができる。‘sam package’コマンドを使用してコードアーティファクトをzipし、S3にアップロードして、AWS Cloud Fomationを使ってLamdbaにデプロイするためのSAMファイルを生成する。後は‘sam deploy’コマンドが、パッケージされたSAMテンプレートをCloudFormationにデプロイしてくれる。‘sam package’と‘sam deploy’はいずれも、AWS CLIの相当するコマンドであるaws cloudformation packageとaws cloudformation deployと等価である。
SAM Localに関するより詳細な情報は、AWS Blogの記事 “New - AWS SAM Local (Beta) - Build and Test Serverless Applications Locally”、またはプロジェクトのGitHubリポジトリを参照してほしい。
- AWS Web Application Firewall: セキュアでないWebサイトのための後付けセキュリティ 2017年9月4日
- AWSがLambda@Edgeをリリース、Node.js関数をCDNと共にエッジロケーションで実行可能に 2017年8月18日
- AWS Greengrass、Lambda関数をIoTデバイスで実行する 2017年6月14日
- AWS Organizationsが実現する集中型のポリシベースアカウント管理 2017年5月11日
- AmazonがAWS DynamoDBへTime to Live(TTL)機能を追加 2017年3月27日
- Amazon Web ServicesがCNCFに参加 2017年9月19日
- Azure IaaS Disaster Recoveryパブリックプレビュー発表 2017年9月8日
- Amazon CloudWatch Eventsでアカウント間のイベント配信が可能に 2017年9月6日
- AmazonがEC2 Auto Scalingのターゲットトラッキングサポートを追加 2017年8月28日
- Amazon DynamoDB Accelerator (DAX)がプレビューに 2017年5月23日
- AmazonがAuroraのクロスリージョンの暗号化されたレプリケーション機能を追加 2017年4月19日
- Javaコミュニティプロセスがリリースサイクルの発表に反応した 2017年9月19日
- Facebookの大規模で高速なリリース方法 2017年9月19日
- Docker Enterprise Edition 17.06がリリース、Windows Server 2016とIBM Zメインフレームをサポート 2017年9月19日
- GoogleのPuppeteerがヘッドレスChromeツールの一員に 2017年9月19日
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。