はじめに
このブログ記事は、約11年間、客先常駐で『マネジメント』をメインに続けてきて、技術力が全く無くて後悔していた人が、Webエンジニアへ転職して学んだ事を記録しておくために書いています。自身の振り返りのために書いている記事ですが、30代の方で同じような境遇で技術力が全く無くて後悔している方々にとっても「Webエンジニアになるとこんな事を勉強するんだ・・・」と雰囲気を掴んで貰えれば幸いです。
転職後6週目
今回は、転職後6週目の話になります。
4週目と5週目は、子供が産まれた事でドタバタしており、慶弔休暇も頂いていたので割愛します。
今回はAWS Lambdaを使った開発を続けてきて資産が増えてきたので、この資産をどのように管理していくのか。という事を考え、色々と学んだのでそれを書いていきたいと思います。
資産管理はやっぱりGitHub
AWS lambdaといえど、管理対象となるのはプログラムのソースコードになるので、GitHubで管理すべきかと考えます。AWS CodeCommitを使う手段もありますが、開発者側が使い慣れている人が多いGitHubが良いと思いました。
GitHubでの管理は決まった。じゃあ開発環境や本番へのデプロイ方法は?
ここが悩みどころでした。
多くの方々がAWS lambdaの管理・デプロイ方法に悩まれており、現段階(2018/10時点)だと以下フレームワークの何れかを使うのが定番になっています。
・AWS SAM
・Serverless Framework
・Apex
当然、私は3つのフレームワークの何れも使った事がありません。
そのため、1つ1つ導入からデプロイまでをやってみて、使用感を確かめていきました。 私なりに使用感を以下に纏めてみました。
比較項目 | AWS SAM | Serverless Framework | Apex |
---|---|---|---|
公式/非公式 | 公式 | 非公式 | 非公式 |
検索したときの情報量 | 中 | 大 | 中(Oracleに同名の製品があり、稀にそっちの情報が混ざる事あり) |
S3/CloudFormationの使用要否 | 要 | 要 | 否 |
テンプレートの作成難易度 | 高 | 中 | 中 |
デプロイの難易度 | 簡単 | 簡単(早い) | 簡単(早い) |
備考 | Dockerコンテナを使った開発環境も提供 | 使用している人が多く、プラグインも多い | S3/Cloud Formationを使用していないため、迅速にデプロイできるのが魅力 |
纏めてみた結果、個人的にはAWS SAMで行うべきかと思いました。
公式なので今後もサポートが期待できるという事やDockerコンテナを使った開発環境も提供されているので、開発環境で動いたけどデプロイしたら動かなくなった等のトラブルを未然に防げるのが良いかと思いました。
さて、これでAWS lambdaの管理方法は全てきまった問題なし
と思ったのですが・・・次はこんな疑問に辿り着きました。
「果たしてAWS Lambdaの資産管理ってどこまで管理すべきなの?」
AWS lambdaはイベントドリブン(つまり、AWS GateWayやS3にファイルが格納された等)なので、単体では動きません。
AWS lambdaを動かすためには、それに紐づくイベントの設定(AWS Gatewayの設定やS3のファイル格納場所、権限等の設定)が必要で、デプロイとイベントの設定をして初めて動かす事ができます。
AWS SAMやServerless Frameworkは、結局はCloudFormation(AWSの構築をテンプレートと呼ばれるファイルにそって自動で行ってくれる機能)を使ってデプロイしているので、テンプレートにイベントの設定を書く事で、この問題はクリアにできます。
ですが・・・
AWS lambdaをちょっとやりました。という人が、そのテンプレートにイベントの設定を書いていくのはキツイ!!本当にキツイです!!!
色々テンプレートの書き方を調べてみましたが「テンプレートはこう書きます。(ボンッ)」という感じで、既に完成済みのテンプレートが出てくるものばかり・・・
ホントすごくない????
と思ったのが正直な気持ちです。
というわけで、一旦管理するのはAWS lambdaのプログラムのみにして、イベントの管理はまた考える・・・という事になりました。
どなたかCloudFormationのテンプレートの簡単な書き方を教えてくださいorz
学んだ事
・AWS lambdaの管理方法を考える上で、現状3つのフレームワークを使う手段があるということ。
・AWS lambdaはイベントドリブンなので、イベント側の管理方法も考えないといけないということ。
・AWS SAMにはDockerコンテナを使用したテストが可能であること、また、Dockerを使ったメリットにも気づけました。