BT

Your opinion matters! あなたのご意見でInfoQが変わる!

AWSがサーバレスアプリケーションのローカル開発とテストのための'SAM Local'をリリース

| 作者: Daniel Bryant フォローする 217 人のフォロワー , 翻訳者 h_yoshida フォローする 0 人のフォロワー 投稿日 2017年9月19日. 推定読書時間: 7 分 |

A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.

原文(投稿日:2017/08/18)へのリンク

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をインストールして起動しておく必要がある。また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’が異なるコンテキストであるためだ。

aws dynamodb create-table \
    --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 packageaws cloudformation deployと等価である。

SAM Localに関するより詳細な情報は、AWS Blogの記事 “New - AWS SAM Local (Beta) - Build and Test Serverless Applications Locally”、またはプロジェクトのGitHubリポジトリを参照してほしい。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT