AWS Lambda をローカルで使用できるようにしてみる。

最近流行り?のサーバーレスアーキテクチャーを試してみたいのでいろいろ検討してみると今のところAWS Lambdaが標準っぽい。
しかしそのためだけにAWSにアカウント作ってもな~と考えていた。 よくよく調べてみるとAWS Lambdaで開発するにはいちいちAWSのコンソールからコードを作成したり、ローカルで作成したコードをZIPにしてアップロードするなどしなければならない。 どう考えても開発効率悪いとおもったので、いっそローカルで開発できればもっといいのにな~っと。

ありました!!
Installing the AWS SAM CLI on Linux - AWS Serverless Application Model

実際にローカルで動かすまでやってみました。

必要であったのは以下

  • Linuxbrew
  • Docker
  • awscli
  • aws-sam-cli

Linuxbrewをインストール

apt update
apt upgrade
sudo apt install linuxbrew-wrapper

次に以下を参考に
Installing the AWS SAM CLI on Linux - AWS Serverless Application Model
AWS SAM CLIをインストール

brew upgrade
brew update
brew tap aws/tap
brew install aws-sam-cli

/home/linuxbrew/binを パスに追加 ~/.bashrc の最後の行に以下を追加

export PATH='/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin':"$PATH"

いったんターミナルを閉じて、新しいターミナルを起動

sam --version

SAM CLI, version 0.12.0

上記のように表示されればOK

次にDockerをいれる。 以下を参照

Get Docker CE for Ubuntu | Docker Documentation

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    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 docker-ce-cli containerd.io

上記でインストール

sudo docker ps

上記のコマンド入力でエラーが出てなければOK
以下の表示が出てくればOK
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

次に、AWSのリージョンを設定する。この作業をしないとこの後で、リージョン設定されていないです!!と、いうこと聞かないので、ここで設定しておく

brew install awscli
aws configure

以下のように設定
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]: json

リージョンセットOK!!

次に、以下を参照にQuick Startを試してみる。
Quick Start - AWS Serverless Application Model

cd ~
mkdir work
cd work
sam init --runtime nodejs

上記で work フォルダーの中に sam-appフォルダが作成される
nodeで実行できるようにする。

cd ~/work/sam-app/hello-world
npm install
cd ..
sam local start-api

ここで ターミナルに
Running on http://127.0.0.1:3000/ (Press CTRL+C to quit) と表示されればOK

Error: Running AWS SAM projects locally requires Docker. Have you got it installed? と表示された場合は

dockerがログインしたユーザで操作できない状態なので以下で確認

docker ps

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

上記のエラーが表示されている場合は現在のログインユーザをdockerグループへ入れてあげる。

gpasswd -a <USER> docker

いったんログアウト&ログインして再度コマンドで確認

docker ps

sudo なしの上記のコマンド入力でエラーが出てなければOK
以下の表示が出てくればOK
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cd ~/work/sam-app/
sam local start-api

Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
上記を確認!!

あとは以下をブラウザから呼び出して http://127.0.0.1:3000/hello

{"message":"hello world"}

表示されればOK

f:id:treehitsuji:20190305135826p:plain