概要
Serverless FrameworkでLambdaファンクションをプロジェクトごとに一括管理するで書いたServerless Frameworkですが、作ったものをGithubで公開しておけば、他のプロジェクト(AWSアカウント)でも使用可能です。
- endopointとしてAPI Gateway
- プログラムロジックとしてLambda
- データストアとして、DynamoDBやS3
このあたりのサービスがServerlessではサポートされているのですが、これで自分なりのAWS構成を作っておけばオープンソースとして公開して配布できちゃうわけです。
イケてる構成を作れれば、皆が自身のAWSアカウント上でその構成を動かしてくれるかもしてません。これはオープンソース魂揺さぶられますよね。
ってことで、Serverless Frameworkで作ったAMIMOTO管理ツールで使ってるLambdaファンクション群をGithubで公開してみました。
AMIMOTO MobileApp Lambda
Githubへの公開方法
Serverless Frameworkを作るとこんなプロジェクト構成になりますが、モジュール名(mobileapps)以下をGithubにて公開するようにします。プロジェクトのルートディレクトリにはCredentialの情報や個別の環境設定が記述されているファイルがあるので、ここは公開しないように気をつけてください。
.gitignore
はこんな感じでモジュール名配下に置きます
ログや環境依存のファイルやIDE等のファイルは排除。またevent.json
はローカルでLambdaを動かすための入力値を定義するものです。今回の場合はインスタンスIDを設定するため、各AWS環境に依存するので、排除してます
# Logs
logs
*.log
npm-debug.log
# Runtime data
pids
*.pid
*.seed
dist
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
#IDE Stuff
**/.idea
#OS STUFF
.DS_Store
.tmp
#ENV VARS
.env
#Local Setting
**/event.json
package.jsonはこんな感じです。serverless-helpers-jsとaws-sdkをインストールするようにします。
{
"name": "amimoto-mobileapps",
"version": "0.0.1",
"description": "Dependencies for a Serverless Module written in Node.js",
"author": "me",
"license": "MIT",
"private": true,
"repository": {
"type": "git",
"url": "git://github.com/"
},
"keywords": [],
"devDependencies": {},
"dependencies": {
"aws-sdk": "^2.2.25",
"serverless-helpers-js": "~0.0.3"
}
}
こんな感じで準備したらあとはGitで公開してしまいましょう
他のAWSアカウントでの使用方法
まずは通常通りにAWSアカウントでIAMユーザを発行してServerlessをインストール。プロジェクトの設置まで行います。そしてそのプロジェクト内で以下のコマンドを発行するだけです。
$ serverless module install <GithubリポジトリへのURL>
これだけで、package.jsonの依存関係もすべて解決して必要なモジュールをインストールしてくれます。
あとはendpointやfunction,resourceをserverlessコマンドでAWS上にデプロイしてください
フレームワークにロックインされないか
こんな疑問を抱く方もいるかなと思ったので書いておきます。結論から言うとロックインはされません。ServerlessはFrameworkという表記が良くない気がするのですが、Frameworkと言うより、開発環境という方が近いと思います。作ったものの実体はAWS上にリソースとしてデプロイしてしまえば、Serverlessを使わずとも操作が可能です。
あまり向かないなと思ったらやめてしまえばいいので、えいやと本番で使ってしまってもいいかもしれません。
まとめ
AWSの構成がオープンソースとして公開できることろに冥利がつきますね。
今後作った構成はできるだけ公開できるように作っていきたいと思います。
それでは良いオープンソースライフを!