Serverless Framework V.1 Alphaのかなり丁寧なチュートリアル
サーバーレスアーキテクチャという言葉を聞くようになってしばらく経ちました。 サーバーレスアーキテクチャに関しては以下の記事が非常に綺麗なのでそちらをご覧ください。
サーバーレスアーキテクチャという技術分野についての簡単な調査 - Qiita
サーバーレス・アーキテクチャの話 - yoshidashingo
個人的にも、サーバーを一番簡単に建てる方法はサーバーを建てない事で、サーバーを一番簡単に管理する方法もサーバーを建てない事だと思っているので、サーバーレスアーキテクチャは使えるところでは使っていきたいです。(パフォーマンスが求められる部分ではまだ厳しいですが)
というわけで、Serverless Frameworkが 先日V.1 Alphaをリリースしたようなので試してみます。AWSアカウントの準備から行っているので、既にある程度の知識がある方にとっては冗長な記事になっているかと思います。ご容赦ください。
また、AWSの無料枠(アカウント開設後1年間有効)を持っている方でしたら本記事の内容を全て試してもお金はかからないはずです。
Serverless Frameworkとは
AWS Lambdaを主に活用してサーバレスなアプリケーションサービスを構築するためのフレームワークです。今後はGoogle Cloud Functions, Microsoft Azure,IBM OpenWhiskなどにも対応していくとの事です。Serverless Frameworkってまさにそのままの名前付けられるのも先駆者の特権というやつでしょうか。
環境
- OSX 10.11
- Serverless V.1 Alpha
事前準備
本当に1からやるので、ほとんどの方は飛ばしていただいて大丈夫だと思います。
AWSアカウント作成
以下を参考にして行ってください。面倒くさいかもしれませんが、二段階認証と請求情報のアラームは絶対に設定しておきましょう。
AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ - Qiita
IAMユーザ作成
https://console.aws.amazon.com/iam/home#usersからServerless Frameworkが使用するためのIAMユーザーを作成します。アクセスキー・シークレットキーを安全な場所に保管しておいてください。
※公式のTutorialでは簡易化のため作成したユーザーにAdministratorAccessのポリシーを付けていますが、本番で使う時は適切な権限だけをつけるようにしてください。
AWS CLIインストール
AWS CLIをインストールします。インストール済みの方はスキップでOKですが、公式では[default]にServerless Frameworkが使用するIAMユーザーを設定するよう推奨していますので、そこだけ設定を変更したほうが良いかもしれません。
serverless/provider-account-setup.md at v1.0 · serverless/serverless · GitHub
We'd recommend to create a default AWS profile on your local machine as Serverless uses this as a default which makes developing a lot faster and easier.
$ sudo pip install awscli --ignore-installed six $ aws configure # 先ほど作成したIAMユーザのアクセスキーを入力 AWS Access Key ID [None]: xxxxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxxxx Default region name [None]: us-west-2 Default output format [None]: ENTER $ cat ~/.aws/credentials [default] #ここがServerless FrameworkのIAMになっていること推奨 aws_access_key_id = xxxxxxxxxxxx aws_secret_access_key = xxxxxxxxxxxx [user_2] aws_access_key_id = xxxxxxxxxxxx aws_secret_access_key = Fxxxxxxxxxxxx
node環境構築
Serverless Frameworkのインストールにnpmが必要なので、node環境を構築します。 nodeはnodebrewを使って管理しますが、OSX 10.11ではnodebrewはhomebrewでインストールすると正常に動かないので注意してください。公式に従ってcurlを使ってインストールしましょう。
GitHub - hokaccha/nodebrew: Node.js version manager
$ curl -L git.io/nodebrew | perl - setup
~/.bash_profileに以下を追加
export PATH=$HOME/.nodebrew/current/bin:$PATH
設定を反映
$ source ~/.bash_profile
nodebrewを使ってnodeの安定版をインストール(今回はv6.3.0)
$ nodebrew install-binary stable
fetch: http://nodejs.org/dist/v6.3.0/node-v6.3.0-darwin-x64.tar.gz
######################################################################## 100.0%
Install successful
インストールされたバージョンを使うように設定
$ nodebrew ls v6.3.0 current: none $ nodebrew use v6.3.0 use v6.3.0 $ node -v v6.3.0
一応npmもupdateしておく。
$ npm install -g npm $ npm --version 3.10.5
Serverless Frameworkインストール
事前準備が終わったので、実際にServerless FrameworkをインストールしてHello Worldを行ってみます。ここからは公式のセットアップ手順に従って行います。
インストール自体はコマンド1つ打つだけで完了します。
$ npm install -g serverless@alpha $ sls --help _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.0.0-alpha.1 -------'
プロジェクト作成
$ sls create --name first-service --provider aws Serverless: Creating new Serverless service... Serverless: Successfully created service "first-service" Serverless: |- serverless.yaml Serverless: |- serverless.env.yaml Serverless: |- handler.js
設定ファイル書き換え
公式のドキュメントを参考にして設定ファイルを書き換えます。今回はランタイムをnodejs4.3で、HTTP経由でアクセスできるようにします。
serverless.yaml
service: first-service provider: aws runtime: nodejs4.3 defaults: # overwrite defaults stage: dev region: ap-northeast-1 memory: ${memoryVar} # reference a Serverless variable timeout: 30 functions: hello: handler: handler.hello events: - http: path: greet method: get
serverless.env.yaml
vars: memoryVar: 256 stages: dev: vars: regions: ap-northeast-1: vars:
デプロイ
設定ファイルを変更したらデプロイします。
$ sls deploy Serverless: Creating Stack... Serverless: Checking stack creation progress... Serverless: Stack successfully created. Serverless: Zipping functions... Serverless: Uploading zip files to S3... Serverless: Adding function resources to CF... Serverless: Updating Stack... Serverless: Checking stack update progress... Serverless: Deployment successful!
デプロイが成功したら、AWSのコンソールにアクセスして確認してみます。 LambdaのコンソールとAPI Gatewayのコンソールにアクセスして、実際に登録されていればOKです。
Lambdaコンソール
API Gatewayコンソール
最後に実際にHTTP経由でアクセスできるかどうか確認してみます。きちんと結果が返ってきますね!
$ curl https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/greet {"message":"Go Serverless v1.0! Your function executed successfully!","event":{"body":{},"method":"GET","headers":{...}}
終わり
以上でServerless Frameworkのチュートリアルは終了です。AWS LambdaとAPI Gatewayを手動で連携させようとするとかなり面倒くさいので、個人的には非常に良い感じです。 今後も使えるところでは是非使っていきたいと思います。