AWS SAM Localを使ってみた
最近AWS Lambdaを使うことが増えてきたので、ローカルでもテストしたいなぁと思い
AWS SAM LocalをVagrantのUbuntu16.04にインストールしてみました。
1.前提
ブラウザからアクセスできるようにVagrantfileには下記を設定してあります。
config.vm.network "forwarded_port", guest: 3000, host: 3000 config.vm.network "private_network", ip: "192.168.111.222"
2.Docker CEのインストール
AWS SAM LocalはDockerを使用するため、Docker CEをインストールします。
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce sudo adduser vagrant docker
#vagrant再ログイン docker ps #動作確認
3.Node.jsのインストール
現状、安定版はnpmでインストールするようなので、Node.jsをインストールします。
通常のインストールだと権限の問題でAWS SAM Localのインストールに失敗するため、NVMを使用します。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash source ~/.bashrc nvm ls-remote #対応バージョンを確認 nvm install v8.5.0
4.AWS SAM Localのインストール
下記コマンドでインストールします
npm install -g aws-sam-local sam --version #バージョンが表示されれば成功
5.Lambdaのサンプルを作成
まずは「Hello world.」とレスポンスを返すLambdaを作成してみます。
Lambdaのサンプル用フォルダと各種ファイルを作成します。
mkdir /vagrant/sample cd /vagrant/sample
上記で作成したフォルダ内にtemplate.yamlを作成します
# template.yaml AWSTemplateFormatVersion : '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: Hello: Type: AWS::Serverless::Function Properties: Handler: hello.handler Runtime: python3.6 Events: Api: Type: Api Properties: Path: /hellow Method: get
sam validateで内容が正しいかを確認できます。(Valid!と表示されればOK)
実行ファイルとして同じ階層にhello.pyを作成します。
def handler(event, context): return {'statusCode':'200', 'body':'Hello world.'}
下記コマンドでAWS SAM Localを起動します。
※Vagrantの場合はホストを0.0.0.0にする必要がありました。
sam local start-api --host 0.0.0.0
ブラウザから、「http://192.168.111.222:3000/hello」にアクセスし、「Hello world.」と表示されれば成功です。
2017-09-25 17:20:23