さてさて、前回は私のクラウドに対するふんわりしたイメージから最初の一歩としてサーバーのインスタンスを起動してみた訳ですが。これって結構古い感覚だったりするのかな?
「クラウド」っていう言葉が流行り始めた頃から、こうやって簡単にプルダウンからロケーション(リージョン)を選択して地球上の好きなエリアにサーバー構築ができるから、冗長構成を地球規模で簡単に組めて「災害に強い」っていうのが私の「クラウド」に対する価値観だったりする訳ですが、AWSのサービスではそれを当然の前提として、さらに発想を発展させたサービスがたくさん用意されているんですね?
最近の流行りでよく聞く「サーバレスアーキテクチャ」に触れてみる。
サーバレスアーキテクチャという言葉、多少違和感あるけども別にサーバーを使っていない訳じゃなくてサーバー構築やスケーリング管理はプラットフォーマー側でやるから欲しい機能を実行できる分のリソースだけお借りするっていうサービスですね。
AWS上では、IAMを使って細かい権限ロールの設定ができるからリソースアクセスの権限はそっちで一元管理して、いちいち実行サーバー上でのパーミッションとか気にせずユーザーはいきなり実装したい機能のスクリプトから書いていいよってことかな??
FaaS(Function as a Service)とかって呼ばれているらしい。
?コンピューティング
AWS Lambda
- 概要
- サーバーをプロビジョニングしたり管理せずコードを実行できる
- 使用したコンピューティング時間に対してのみお支払い
- AWS Lambda がサポートするいずれかの言語でコードを指定できる
- Node.js ランタイム
- Python ランタイム
- Ruby ランタイム
- Java ランタイム
- Go ランタイム
- .NET ランタイム
AWS Lambda の無料利用枠には、1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が含まれます。
?AWS Lambdaを触ってみる
また権限ロールどれが必要か確認したいから、前回とは別で新しくIAMユーザーを作って更地のユーザーでサービスからAWS Lambdaを選択してみる。
うん。権限エラーでたね?
次のことを実行する権限がありません: lambda:GetAccountSettings.
?IAMからLambdaへのアクセス権のポリシーをアタッチする
まー、適切なアクセス権の制御はまた細かく勉強するとして、
- AWSLambdaFullAccess
とりあえず、またフルアクセス付けとくか?
?AWS Lambdaを触ってみる(リトライ!)
Lambdaのダッシュボードが開けるようになったネ?
そうか、GoogleのGCPでGASとかAPIとか使うときのイメージか?
利用状況とかが一目でわかるダッシュボードになってる。
左側のメニューには、4つの項目があるね。
- ダッシュボード
- アプリケーション
- 関数
- Layers
まず、「関数」で機能を作っておいて、イベントリソース(ファイル配置とか、HTTPリクエストとか、DB更新とか)の発火条件と組み合わせて能動的に動くようにしたのが「アプリケーション」として管理されて、汎用性を高める様に関数をライブラリ化したのが「Layers」として管理されるってことなのかな??
てことで、まずは試しに関数を作ってみるか?
「関数の作成」ぽちっと・・・、うん、権限エラーでるね。
次のことを実行する権限がありません: iam:CreateRole.
実行ロールってなんだろ?
あー、そうかそうか。ユーザーにも権限のポリシー設定はあったけど、例えばLambdaの実行権限しかなくて他リソースに対する直接の操作権限のないユーザーでもLambda関数自体に実行ロールで他リソースへのアクセス権が付いていればLambda関数自体の実行ロール使ってS3とかDynamoDBみたいな他リソースにアクセスして適切な処理ができるよということか?サーバー管理しない代わりに、各関数ごとにアクセス権の管理してるってことなのかぁ?
?もいっこIAMユーザーにポリシー追加してみる。
クソッ、不服だ。昨日のEC2もそうだったけど、力業で
- IAMFullAccess
特定の項目(iam:CreateRole)にアクセスしたいだけなのにFullAccessを使ってポリシーにStatement - Action - "iam:*"ってするのすごくキモチワルイなぁ?
次回はAWS CLIの勉強してこの辺ちゃんと制御できる様にしよっ?
?Lambda関数の作成リトライ!
おぉ、それっぽいDesignerの画面になった。
Python3.8選んで作成したら、こんなコードがデフォで入ってるネ
とりあえず、[lambda_handler(event, context)]が起動して無条件に「Hello from Lambda!」ってbodyとstatusCode: 200のjson出力するコードのようだね?
上部の「テスト」⇒「作成」ぽちぽちっと。えいっ!
なんの意味もないコードが正常に終了した様だ?
んーっ、ストレージとかDBとかも早く触ってみたいけど、先にポリシーとかロールのことを勉強してキチンとアクセス制御を理解しないと大変なことになりそうダネ?