はじめに
会社のDX課題に取り組むにあたって、システム管理課の人から「AWS lambda使ってみたら」
とアドバイスをもらったので、個人アカウントで試してみることに。
幸いにもPython使えるみたいだし、javascriptもある程度かじっているので、
とっかかりやすいと思った。
なにより、プログラムが処理した分だけ課金というのが嬉しいね。
AWS lambdaとは

AWS Lambda はサーバーレスコンピューティングサービスで、サーバーのプロビジョニングや管理、ワークロード対応のクラスタースケーリングロジックの作成、イベント統合の維持、ランタイムの管理を行わずにコードを実行できます。Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。コードを ZIP ファイルまたはコンテナイメージとしてアップロードするだけで、Lambda はあらゆる規模のトラフィックに対して、自動的かつ正確にコンピューティング実行能力を割り当て、受信リクエストやイベントに基づいてコードを実行します。コードは、200 種類を超える AWS のサービスおよび SaaS アプリケーションから自動的にトリガーするよう設定することも、ウェブやモバイルアプリケーションから直接呼び出すよう設定することもできます。Lambda 関数をお気に入りの言語 (Node.js、Python、Go、Java など) で記述し、サーバーレスツールと AWS SAM や Docker CLI などのコンテナツールの両方を使用して、関数をビルド、テスト、デプロイできます。
まぁこんなふうに書かれていても素人にはさっぱりイメージ掴めんのです。
だいたいこんな感じなのだろうというのが僕の下記の理解
関数を作成してみる
まずはAWSアカウントを登録。(ここは割愛する)
住所や請求情報を登録
ここで、支払いが発生するしないに関わらずクレジットカード情報の登録を求められるので用意しておくと良いでしょう。
AWS lambdaに移動し、関数を新規作成する。
関数を新規作成する。
基本的な情報の入力
下記のように基本的な情報を入力する。関数名は、好きなものを設定。今回、見積書を自動で発行するようなものを作りたいので、return_quotationとした。
ランタイムは初期はNodejsとなっているが、得意なPython(というかこれしか使えない)を選択。
アーキテクチャ?実行ロール?知らん。
できたら「関数を作成」ボタンで次のステージへ。
関数ページ
初っ端にはこんな表示が。視覚的にトリガーと受け手(lambda)と送り先がわかるようになっているということだね。
って、
この中でソースコード書けちゃうのか!!!
ちょっとこれは自分の中で革命的すぎてやばいんだけど。
なんでさくらサーバーなんか使ってんの僕。
いつかホリエモンが言っていた「これからはスマホ1つで仕事ができる」ってマジやん。
とりあえず、トリガーを追加してみる。
S3でいいよね。
(・・・・Alexaとかあって夢が広がる!!!!!)
バケットはS3の方で作成したものを選択できるようだ。
この時、リージョンが同じでないと設定できないので注意。
ほかは以下のとおり設定。(=何もしていない)
S3についてよくわからない、、、とりあえず、Q&Aはこちら。
とりあえず、S3と関数がつながったような表示になった。
S3の運用
lambdaを運用する前に、S3で静的なHTMLファイルを表示させる基本的なところからクリアしていかなければならない。とりあえず「quotation」という名前のS3に「sample.py」ファイルをアップロードして、パブリックな読み取りができる設定にした。
sample.pyをアップロード
以下のように、sample.pyのURLが与えられて、世界中のどこからでもこのファイルを参照できるようになったのがわかる。
API Gatewayの設定
とりあえずS3にHTMLファイルをアップロードすれば、ウェブサイトが見られるようになるところまではわかった。OK。
じゃあ、次はウェブサイト上で「あ」と打ったら「い」と返ってくる機能をつけよう。
これすらもどないしたらいいかわからん。
プログラマの友達にLINEで泣きつくと、
「API Gateway使ったら?」
とお言葉をいただいたので、試すことに。
ほんと、この世界、知っている人からキーとなる情報が得られないと延々と沼にハマる危険な世界。
以下のようにトリガー「API Gateway」を追加。
APIタイプはHTTP APIにした。
すると以下のようにAPIエンドポイントなるアドレスが付与された~。(これでどないすんねん。)
このエンドポイントにアクセスすると・・・
なんとlambda関数のヘローワールドが表示されるではないか~!