Lambda関連のことを調べてみた

Lambda関連のことを調べてみた
目次

ゼロから始める!サーバーレスアーキテクチャの世界

# はじめに
サーバーレスアーキテクチャは、近年非常に注目を集めている技術の一つです。クラウドサービスの進化に伴い、サーバーレスは開発者にとって避けて通れないテーマとなっています。このブログでは、サーバーレスアーキテクチャの基本からその利点、具体的な活用方法までを詳しく解説します。
初心者から中級者まで幅広い読者に向けてわかりやすく説明しているので、ぜひ最後までお読みください!

# 対象読者
– サーバーレスについて知りたい方
– クラウドサービスを活用している方
– システムアーキテクトやエンジニア

# 目次
1. サーバーレスアーキテクチャとは
2. サーバーレスの利点と課題
3. サーバーレスを始めるためのステップ
4. よくあるサーバーレスのユースケース
5. 実際のサーバーレスプロジェクトの例
6. サーバーレスアーキテクチャのベストプラクティス

# 1. サーバーレスアーキテクチャとは
サーバーレスアーキテクチャは、インフラの管理をクラウドプロバイダーに任せることで、アプリケーション開発に専念できるアーキテクチャの概念です。

### サーバーレスの基本について
サー

元記事を表示

LocalStack環境向けTraformの設定ファイル(main.tf)をollamaで自動生成してみました。

こちらの方の記事を拝見して、main.tfファイルが自動生成できるようなインタフェースがあれば面白いことができそうだと思いましたので、備忘録もかねて

https://zenn.dev/shimat/articles/32f5f1dc96f817

ollama-uiを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/60127739-0fa6-9bbc-9230-f5b95492a541.png)
詳細はこちらの記事を参照下さい。

https://qiita.com/nw-engineer/items/191f2b89dac88acd33b8

以下指示内容を「type your quesstin here…」に入れて、「Send」をクリックします。

“`bash
あなたは、Terraform 構成を生成する便利なアシスタントです。\n次のリクエストの Terraform 構成を生成します。: 設定情報のみファイルに出力してください。S3バケットとL

元記事を表示

Lambda に登録したKMSで暗号化した環境変数をLambdaで扱う方法

Lambda では API トークンなどを環境変数として登録できます。
さらに、KMSを使用して暗号化することで、よりセキュアにAPIトークンなどを保存することができます。

しかし、KMSを使用して暗号化した環境変数を扱う際に沼にハマったので記録を残しておきます。
(意外とこれに該当する記事がぱっと見つかりませんでした。。。)

## 結論: 暗号化するコード(Python)
“`
def decode_variables(encrypted_token_name: str) -> Optional[str]:
“””
Decrypts the encrypted value of an environment variable.

Args:
encrypted_token_name (str): The name of the environment variable containing the encrypted value.

Returns:
Optional[str]: The decrypted val

元記事を表示

S3イベントをトリガーにLambda関数を実行

前回、ローカル環境でS3のputイベントに対してLambdaを実行するテストを行いました。

詳細については、こちらの記事をご覧ください:

https://qiita.com/kutinasi_hobby/items/6e76d640598a10e89d14

今回は、AWS環境で実際にこれを実行する方法について説明します。

## CloudFormationを使用してリソースの作成
AWS SAM(Serverless Application Model)はCloudFormationを使用してリソースの作成を行います。SAMプロジェクト内のtemplate.yamlファイルにリソース情報を記述することで、必要なリソースを簡単に定義できます。

ここでは、ファイルをアップロードするS3バケット、処理を行うLambda関数、そしてそのLambda関数に適切な権限を付与するためのIAMロールを作成します。

“`yaml:template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’ # テンプレートのバージョンを指定
Transform

元記事を表示

ApiGateway から Lambda にパラメータを渡す

# 概要
今更だが、ApiGatewayからLambdaを呼び出した際に、指定したパラメータのみを渡す設定方法をまとめた。
ただし**以下の「Lambda プロキシ統合」の設定はFalseにする前提で進める。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1909565/c4662705-f02a-acb1-a47c-af1e520379ed.png)

# 設定
1.対象のリソースにて、統合リクエストを選んで「編集」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1909565/87ac8de9-9ad0-95e1-6333-c45d19b38e45.png)

2.リクエストパススルーを推奨の設定のままにし、マッピングテンプレートを記載する
![image.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

Step Functionsで日付を取得して後続のGlueジョブで使いまわす(手動で別日実行もしたい)

# はじめに
Step Functions、皆さん使っているでしょうか。GUIでフローが組めて便利ですよね。
そんな便利なStep Functionsですが、実際に使おうとすると日付をどうやって取得するか問題に見舞われると思います。今回は、その解決方法の一例を試してみたので記事にします。

# やりたいこと
– Step Functionsのフロー内で**今日の日付**(`yyyymmdd`形式)を取得して、Glueジョブ内の処理で使う
– 日付は**日本時間(JST)** とする
– ただし、フローを手動実行した時に**日付を指定**すると、その日付がGlueジョブ内の処理で使われる
– 例えば日次で実行していた処理が土日で失敗していて、月曜日にリカバリーを実施する場合などを想定

実際に運用し始めると、後から別日で実行した時ってよくありますよね。それをうまく実現してみます。

# 日付を取得する方法の検討
Step Functions内で日付を取得する方法はいくつか存在します。その方法を紹介している素晴らしい記事があるので、そこから紹介します。

https://d

元記事を表示

AWS Lambdaを最大限に活用するためのベストプラクティス

# はじめに

サーバーレス大好きなエンジニアです!

みなさん、AWS Lambdaを使ってますか?
日常的に利用しているけど、最適化についてはあまり考えていない方も多いのではないでしょうか。

実際、私もあまり意識せずに使っていました。
使い方をちょっと工夫するだけで、**Lambdaのパフォーマンスがぐんと上がる**んです!

今回は、AWSのドキュメントに書かれているベストプラクティスを参考にしながら、Lambdaを最大限に活用する方法をお伝えします。

各セクションのタイトルを見ると、ちょっと難しそうに感じるかもしれませんが、できるだけわかりやすく解説していきますので、ぜひ参考にしてみてください!

# 対象読者

– Lambdaを使ったことがある人
– もっと効果的に使いたいと感じている方
– チームの開発効率とコードの品質を向上させたい方
– Lambdaに興味がある方

では、早速始めていきましょう!

# 目次

1. ハンドラー関数について
2. SDKクライアントとデータベース接続の初期化
3. 静的アセットのローカルキャッシュ
4. 環境変数を使用して関数に設

元記事を表示

AWS LambdaでmsoffcryptoライブラリOS依存エラー対応

– 参照:https://qiita.com/yomon8/items/d4e5d8e6b536d490681f

– 言語:`Python3.11`

`msoffcrypto-tool`をlayerに入れて使ったら、参照のqiita記事と同じく下記のようなエラーが発生していた。
“`
lib64/libc.so.6: version `GLIBC_2.28′ not found
“`

OS依存関係の問題がある模様だった。
ChatGPTに聞いたらDockerを使ってみてと言うが、その方法も上手くいかない。

それで参照のqiita記事を読んでヒントを得て下記のようにlayer用のzipを作成してみた。

– 修正前
“`
pip install msoffcrypto-tool -t ./python/
“`

– 修正後
“`
pip install –platform manylinux2014_x86_64 –implementation cp –only-binary=:all: msoffcrypto-tool -t ./python/
“`

(以降

元記事を表示

AWS SAMを使ってS3にファイルがアップロードされたらLambdaでファイル名とバケット名を取得Localテスト

AWS SAM(Serverless Application Model)を使用すると、AWS LambdaとS3を組み合わせて簡単にサーバーレスアプリケーションを構築できます。

この記事では、S3バケットにファイルがアップロードされたときに自動的に起動するLambda関数を作成し、ファイル名とそのバケット名を取得してみました。

実際に作成する中でエラーも出たので合わせて対応を書いていきます。

### 事前準備
#### AWS SAM をインストールしておきます
“`ターミナル
> pip install aws-sam-cli
“`
#### SAM プロジェクトの作成
“`
> sam init
Which template source would you like to use?
1 – AWS Quick Start Templates

Choose an AWS Quick Start application template
1 – Hello World Example

Use the most popular run

元記事を表示

AmplifyでLambda関数を作成する際の仮想環境の注意点と解決策

## 作者メモ
AmplifyでLambda関数を新しく作成した際に出てきたエラーで覚えておきたいので、メモしておきます。

初心者なので、間違えている場合はコメントいただけると嬉しいです。

## 経緯と問題
Amplifyで2個目のLambdaを作成。
コードが出来上がったので、AWSコンソール上に反映させようと、”amplify push”を行いました。

“`
# amplify push
“`
すると、
“`
🛑 Could not find a pipenv site-packages directory at /Users/nnoti/.local/share/virtualenvs/kadailambdaget2/lib/python3.11/site-packages
“`
指定されたパスにpipenv仮想環境のsite-packagesディレクトリが見つからないとでてしまいました。

Lambdaを新しく作成する度に仮想環境を構築しないといけないの…?
そんなバカなと思い、丸一日調べて頭を悩ませていました。

## 解決策
1つ目のLamdbaで使用していた

元記事を表示

図解でわかる世界一簡単なサーバーレス解説

# はじめに
サーバーレスの聞いたことがあるけど、触ったことがない人の中にはこのような疑問を持つ方も多いのではないでしょうか?
今回は図を用いてわかりやすく特徴を3つ説明していきます。

# サーバーレスはサーバーがない?

サーバーレスは**サーバーの存在を意識せずに開発**を行うことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/fa87c604-1fc7-329d-dbfb-c73cfc3711d3.png)

# なぜ時間短縮できるか

サーバーの細かい設計や可用性、負荷分散などについて考えることが少なくなるからです。

![スクリーンショット 2024-07-11 13.30.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/c0764b8b-5ffe-5db7-4362-009fe2c70267.png)

# コストが安い理由

**サーバーレスは使

元記事を表示

AWS lambdaの拡張機能を使ってパラメータストアを取得するときに注意すること

## はじめに

クラウドコンピューティングが主流となる現代において、セキュアな設定情報や機密データの管理はますます重要になっています。特に、AWS(Amazon Web Services)を利用する企業や個人はその安全性と効率性を最大限に活用するためのツールやサービスを常に模索しています。この記事では、そんなAWSの中でも特に注目されている「AWS Parameters and Secrets Lambda Extension」を使ったときにハマったポイントがあったので紹介します。

## AWS Parameters and Secrets Lambda Extensionってなんぞ

AWS Parameters and Secrets Lambda Extensionは、AWS Lambda関数で利用する設定情報や機密データの取得と管理を簡素化するための拡張機能です。AWS Lambdaはサーバーレスコンピューティングを実現するためのサービスで、コードの実行に特化しており、従来のサーバー管理の煩わしさから解放されます。しかし、Lambda関数で利用する設定情報やシークレットの管

元記事を表示

エラーログ監視アラート: AWS Fargate + CloudWatch + Lambda + SNS

# はじめに

このドキュメントは、AWS Fargateを使用して実行されるWebサイトのエラーログを監視し、問題が発生した際にメールで通知するためのシステムを構築する手順を説明します。このシステムは、CloudWatch Logsを使用してログを収集し、Lambdaを使用してエラーログを検出し、SNSを使用して通知を送信します。

作成したリポジトリはこちらです。

https://github.com/sugiyama404/practice_cloudwatch_sns

## 目的

Webサイトの可用性と信頼性を確保するために、エラーログをリアルタイムで監視し、問題が発生した際に即座に対応することが重要です。このシステムは、以下の目的を達成するために設計されています。

+ **リアルタイム監視**: エラーログをリアルタイムで監視し、迅速な対応を可能にする。
+ **自動通知**: エラーログが検出された際に、自動的に通知を送信し、担当者に即座に知らせる。
+ **インフラの可視化**: AWSサービスを活用して、ログ監視と通知のインフラを効率的に構築する。

## イ

元記事を表示

Lambda使ってみたいけど、まだ使ったことがない人へ

# はじめに

AWS、サーバーレス、Lambdaなど名前は聞くが難しそうと思っている方も多いのではないでしょうか?
今回はサーバレスの何がいいのか、どんな時に使えるのか、どう使うのかなどにフォーカスして紹介できたらと思います。

# サーバーレスの特徴

一言で表すと以下のような感じです。

**コストを抑え、余計なことを考えずにコードを書いて実行できる**

#### インフラストラクチャの管理不要

サーバーレスでは、クラウドプロバイダーがインフラのセットアップ、保守、スケーリングをすべて管理します。
基本的な保守運用やスケーリングを自動でやってくれると思っていただければ大丈夫です!

#### コスト効率
サーバーレスは「ペイ・アズ・ユー・ゴー」モデルを採用しているため、使用した分だけ料金が発生します。
どれくらいコストがかかるかざっくり案内します!
毎月1,500,000回のリクエストがあり、128 MBのメモリを使用して0.5秒で実行されるLambda関数を使用した場合、概算で11円です。

つまり、

ECRにdocker pushしてもLambdaが古いイメージを参照する

# 課題
Makefileを用いてECRにイメージをdocker pushした。
Lambdaはlatestタグのイメージを使用しており、新しいイメージがlatestタグを取得したにも関わらず、新しいイメージが使われなかった。

# code

“`Makefile
PROFILE ?= default

ECR_URI := 123456789.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_NAME=image-name
LAMBDA_FUNCTION_NAME=my-function

.PHONY: deploy
deploy: ecr_login
docker build -t $(IMAGE_NAME):latest -f ./xxx/runtime/xxx/Dockerfile ./xxx/runtime –no-cache
docker tag $(IMAGE_NAME):latest $(ECR_URI)/$(IMAGE_NAME):latest
docker push $(ECR_URI)/$(IMAGE_NAME):

Amplify (Gen 1) で Lambda から Amplify の Branch を追加する

## やりたいこと

Amplify のアプリを組織管理用と各組織用の 2 種類作成して、組織管理用のアプリから組織を追加したときに、各組織用 Amplify のブランチを作成するということをやりたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599504/7dc37f52-06ca-c78b-5a79-5ff5e1d08ceb.png)

## 前提

– 各組織用 Amplify のソースコードは CodeCommit に push 済み
– 各組織用 Amplify も一度は push 済みで Build できることを確認済み

## Lambda でやること

1. Amplify の BackendEnviroment 作成
– [CreateBackendEnvironmentCommand](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/amplify/command/Creat

AutoscalingグループのEC2を自動更新してみた

# はじめに
最近Autoscalingグループで稼働するWebサーバーに対して、アプリケーションの更新を自動化する機会があったので実装した機能を紹介させていただきます。

# 背景
以下の図のような、よくある構成でWebサーバーをホストする環境を構築しました。
* Application Load Balancer配下に、常時2台稼働するEC2にWebアプリケーションをホストしている。
* アプリケーションの更新用に、ALBには紐づかないEC2が1台存在する。

![AMI自動更新.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/a56f3df9-064e-e22f-0474-044f5b32757f.png)

上記の構成において、これまではアプリケーション更新用のEC2で更新・テストが完了したら以下の手順で、**手動**でAutoscalingグループのEC2を入れ替えていました。
1. アプリケーション更新用EC2を停止する
1. このEC2からAMIを作成する
1. 作成した

DockerHubのトークンのキーローテーション機能をLambdaとSecrets Managerを使って実現しよう!

## 概要
LambdaとSecrets Managerを使うと秘匿情報のキーローテーションを実現できます
今回はDockerHubのトークンを使ってキーローテーションします
また、リソースはCloudFormationを使ってコード化します

## 前提
– DockerHubのアカウントを作成済み

## Lambda用のバケットの作成
Lambdaをzipファイルからデプロイする用のS3バケットを作成します

“`yml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Stack For Account Setup”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
– Label:
default: “Proje

CloudFormationで作成したAPIGatewayとLambdaを動かす

# はじめに
今回はAPI GatewayをトリガーとしてLambdaを実行していきたいと思います。
API GatewayとLambdaの作成とテスト実行までやっていきたいと思います。

# 目次
・構成について
・Lambdaの設定項目
・LambdaのCloudFormation作成
・API Gatewayの設定項目
・API GatewayのCloudFormation作成
・Permission設定について
・動作確認
・最後に
・参考

# 構成について
LambdaとAPI Gatewayで構成します。
AWS環境はCloudFormationで作成します。
そのため、LambdaのコードやレイヤーのパッケージについてはS3から取得する必要があるのでS3も作成します。

S3の構築は以前の記事を参考に作成してください。

https://qiita.com/ogataro/items/71dd28babfcdf6410a3c

# Lambdaの設定項目
今回はnodejs.20.xを利用し、「Hello from Lambda!」と返答してくるようにします。
またno

Lambdaを使ってDynamoDBの既存データに新しい属性を追加する

# はじめに
今回はLambdaを使ってDynamoDBの既存データに新しい属性を追加していきたいと思います。
これにより、DyanmoDBの既存データに対して一括で属性を追加できるようになります。

# 目次
・構成について
・DynamoDBの設定項目
・DynamoDBのCloudFormation作成
・Lambdaの設定項目
・LambdaのCloudFormation作成
・動作確認
・最後に
・参考

# 構成について
DyanmoDBとLambda、そしてS3で構成します。
DyanmoDBの既存データを一度CSVでダウンロードし、それを元にLambdaは新しい属性を追加するようにします。
AWS環境はCloudFormationで作成します。

S3の構築は以前の記事を参考に作成してください。

https://qiita.com/ogataro/items/71dd28babfcdf6410a3c

# DyanmoDBの設定項目
DyanmoDBの設定項目はIDをパーティションキーとして、Timeをソートキーとしています。
それ以外の項目はCloudFormati