![見出し画像](https://assets.st-note.com/production/uploads/images/24932573/rectangle_large_type_2_b76596b94e226c949f4bae2ce9b19cc2.jpeg?width=1200)
Photo by
yokoichi
AWSソリューションアーキテクト取得に向けて~Lambda~
AWS ソリューションアーキテクト アソシエイト取得に向けて学習した内容を備忘的に記載します。
今回はLambda
Lambdaとは
インフラを気にすることなく、アプリケーションコードを実行できるデータ処理サービス。
クライアントからのアクセスに対してデータを登録する単純な処理をEC2インスタンスで実行している場合、Lambdaに置き換えてサーバレスに実行処理することが可能。
AWSでマイクロサービスアーキテクチャを構築するにあたり、SQSと並んで利用を推奨されるサービス
Lambdaの特徴
EC2インスタンスの代わりにコードを実行することで効率的なアーキテクチャを実現
■実行基盤はAWSが管理
■AWSサービスと連携させ、イベントドリブンなアプリケーションを実装可能
■Node.js/Javaで書かれたコードを実行
■100ミリ秒単位でコード実行時間に対して課金。コスト効率が非常に高い。
■オートスケール
Lambdaの仕組み
Lambdaファンクションを用意⇒アプリからLambdaを呼び出す
⇒イベント発生後(数ミリ秒以内)Lambdaコードが実行
■画像のアップロードをトリガーとして
■アプリケーション内の実行処理をトリガーとして
■ウェブサイトのクリックをトリガーとして
■接続デバイスからの出力をトリガーとして
Lambdaの起動
LambdaはPushモデルとPullモデルがある
Pushモデル
S3/Cognito/SNSなどのAWSサービスとカスタムイベントが直接実行することにより起動
■サービス or アプリが直接実行
■順不同
■3回までリトライ
Pullモデル
DynamoDBとKinesisなどのデータ処理はLambdaに対して直接的にいベンド発行を行わないためポーリングを行い自らイベントを取得
■ストリームに入ってきた順に処理
■イベントソースとして登録したストリームに対してLambdaが自動的にデータ取得などのファンクションを実行
■イベントごとに複数レコードを取得可能
■データが期限切れになるまでリトライ
Lambdaのパーミッション
Execution
■LambdaファンクションがAWSリソースにどういったアクションを実施させるかを決定
■指定されたIAMロールにそってAWSのリソースへのアクセスが許可される
Invocation
■Lambdaファンクションをどのリソースが実行できるかを決定
Lambdaの設定
1.コードをアップロード
-直接エディタ記述/S3インポート/Zip形式でアップロード
2.関数を設定
-スケジュール関数は実行頻度を指定
-イベント駆動型関数はイベントソースを指定
3.必要なメモリ容量を指定
4.タイムアウト時間を指定
5.VPCアクセス用にVPCを指定
6.関数を起動
ブループリント
サンプリコード集からコードを修正しファンクションを作成可能
バージョニング
バージョンの発行方法
■Lambdaファンクションの作成や更新時にpublishパラメータによりバージョンが発行
■Publish Versionにより明示的にバージョンを発行
バージョンの特徴
■一度発行すると変更不可
■単純にバージョン番号が増加
■エイリアスを設定して特定時点にマークすることが可能
■エイリアスを指定することでバージョン番号を把握していなくても指定バージョンを呼び出せる
VPCアクセス
VPC内のリソースへのアクセス
■AWSの全てのVPC内リソースなどへインターネット経由せずにアクセス可能
■Elastic Network Interface(ENI)を利用して実現。
ENIはIPアドレスがDHCPで割り当てられる
アクセス制御
■VPC内リソースにアクセスさせたいLambdaファンクションに対してVPCサブネットおよびセキュリティグループを指定
■ファンクションに割り当てるIAM RoleにAWSLambdaVPCAccessExecutionRoleというポリシーをアタッチしておくこと
Lambda Layer
Lambdaファンクション間で共通するコンポーネントをLambda Layerとして定義し5つまで参照可能
ロードバランサー機能
ALBのバックエンドにLambdaを呼び出せるようになり、WebアプリにLambdaファンクションを組み込みやすくなった。
この記事が気に入ったらサポートをしてみませんか?