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

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

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

PythonをLambda関数としてデプロイする方法

この方法を模索してきましたが、ついにすべてのピースを組み合わせることができました。

[AWS Lambda](https://aws.amazon.com/lambda/)は、Pythonで書かれた関数をホストすることができます。これは「ゼロスケール」- 私の大好きなサーバーレスの定義です!- つまり、実際にトラフィックが発生した場合にのみ料金が発生し、トラフィックがないプロジェクトは運用コストがかかりません。

以前は、これらの関数をトリガーする動作するURLを取得するために多くの追加手順が必要でしたが、Lambda Function URLsがリリースされ、そのプロセスが劇的に簡素化されました。

それでもなお、まだ多くのステップがあります。ここでは、PythonウェブアプリケーションをLambda関数としてデプロイする方法を紹介します。

## AWS CLIツールの設定

これを行ったのはずいぶん前のことで、方法を覚えていません。AWSアカウントが必要で、[AWS CLIツール](https://aws.amazon.com/cli/)をインストールして設定する必要がありま

ALBで1025文字以上のメンテナンス画面を表示する方法

### 背景
AWSのALB(Application Load Balancer)のリスナールールを使ってメンテナンス画面を表示することは一般的ですが、ALBのリスナールールには1024文字の制限があります。
そのため、1024文字を超えるメンテナンス画面を表示するための方法として、S3とLambdaを利用するアプローチを紹介します。
これにより、ALBのリスナールールの優先順位を変更することで、メンテナンス画面を自由かつ簡単に表示することができます。
設定時間も10分程度なので、ぜひやってみてください!

### 前提条件
– ALBを使用したWeb3層構造のアーキテクチャ構築済み(または構築予定の方)

### 構成概要
単純に、新しいルートを作って向き先を変えるだけです。(簡単でしょ!)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/923114/e9630579-5bcb-c761-7fd4-1c09e96f20fe.png)

### 設計の流れ
1. S3にメンテナンス画

AWS Lambdaを使って粗品の「電池の切れかけた蟹」のチケット販売開始通知をLINEに送信してみた

## はじめに
筆者は粗品が好きで、単独ライブ「電池の切れかけた蟹」のチケットを毎回とっていますが、最近チケット販売の告知がなくなり、気付いたら販売終了してた….
となることが何度かありました。

そこで、チケットが販売されたら通知がくるものを作りたいと考え、
下記サービスについては初心者ですが、色々調べながら頑張って作ってみました。

## 環境・利用サービス
・Windows11
・Python 3.12
・AWS Lambda
・AWS ECR
・Docker
・LINE Notify

## とりあえずPython書いてみる

チケット販売が開始しているかを確認するため、pythonでseleniumを使って
吉本のお笑いライブチケット販売サイトの「[FANYチケット](https://yoshimoto.funity.jp/)」へクローリングを行います。

https://yoshimoto.funity.jp/

FANYチケットサイトをデベロッパーツールで確認したところ、
「芸人/公演名/会場で探す!」という検索欄で「粗品」と検索し、「電池の切れかけた蟹」というボ

LambdaのエラーログをCloudWatchで検知しSNSでメール通知を実装する

# はじめに
本記事ではLambda、CloudWatch、SNSを利用してエラーを通知を行います。
CloudWatchに出力されるLambdaのログにおいて、Errorログが吐かれた際にはそれをトリガーとし、対象のメールアドレスに通知を送付します。

# 環境
Python:3.12

# Lambda関数の作成

loggingモジュールを使用して、意図的にエラーを起こすLambda関数を作成します。

“`python:lambda_function.py
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
try:
logger.info(“This is an info message.”)

# 意図的にエラーを発生
raise ValueError(“Output an error message.”)
except

AMIの登録解除と連動してスナップショットを削除する2024夏(~北の国から~)

北の国ではないですが(関東民)。
不要なイメージを削除したいがために、AMI登録解除をしても、スナップショット(EBS)は消えないという事を最近思い出した。思い出したそのころには大量のAMIがあり、もはやこんなの全部やってれんない、、、という状態に。

以下のリンクを見るも、どうも2024年はこの形だとなかなかうまくいかず。

https://dev.classmethod.jp/articles/ami-and-snapshot-delete/

[AWS] AMIの登録解除と連動してスナップショットを削除する2021

https://www.seeds-std.co.jp/blog/creators/2022-10-18-191421/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/2564a9d3-8273-eeb7-c141-cedb2