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

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

複数名のGoogleカレンダー予定をAWS Lambdaで取得する

# はじめに
部署やグループ全体のスケジュール調整にはGoogleカレンダーを利用するのが便利ですが、複数のカレンダーを同時に確認するのは手間がかかります。
そこで、GoogleカレンダーAPIを使用して複数人分のスケジュールを取得する方法を紹介します。この処理は主にAWS Lambdaを使用して実装しました。

# 1. GCPでサービスアカウントを用意
まず最初に、GoogleカレンダーAPIを利用するためには、Google Cloudのプロジェクトを作成し、サービスアカウントを設定する必要があります。

このサービスアカウントにドメイン全体の委任を行い、`/auth/calendar.readonly`といったスコープを設定します。※ワークスペースの管理者権限が必要
このサービスアカウントのサービス アカウント キーやWorkload Identity 連携を利用しサービスアカウントの権限でAPIを叩きます。

# 2. 予定を取得するLambda関数
次に、実際に予定を取得する処理をAWS Lambdaで実装します。

実行者のメールアドレスをcredentialのsubjec

元記事を表示

Lambdaで使ってるNode.jsを18.xにアップデートした話 a.k.a 技術的負債の解消

# Node.js 14.xから18.xへのバージョンアップと周辺技術の更新

ソフトウェアの進化は早く、定期的なアップデートは避けて通れません。

https://qiita.com/autotaker1984/items/a3091772dbb0fb91473d

このたび、サービスで利用しているLambdaのランタイムにおいて、Node.jsをバージョン14.xから18.xへとアップデートしました。

このことに伴い、多くの周辺ライブラリやツールもアップデートまたは置き換えを行いました。
本記事では、その過程で直面した障壁とそれを乗り越えた経験を重点的に紹介します。

## アップデートの背景

大きな理由としてNode.jsの14.xバージョンがサポート終了を迎え、AWSのLambdaでも14.xがDeprecatedとなったことから、アップデートを決断しました。

Node.jsの16.xも検討しましたが、すでに対応した当時であってもサポート終了が2024年6月12日と間近に迫っていため、18.xにアップデートしました。

https://docs.aws.amazon.co

元記事を表示

Java 関数型インタフェースの理解

# はじめに
ラムダ式、メソッド参照を用いることで簡潔なコード記述を可能になり、直感的なプログラミングが可能になります。
[関数型インタフェース](https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/package-summary.html)

# コード比較
今回は関数型インタフェースSupplierを用いた”Hello world”をコンソール出力するサンプルコードを比較する

### 従来のコード
抽象メソッドについては、オーバーライドによって中身の実装を行います。
“`
@FunctionalInterface
interface Greeting {
String getGreeting();
}

public class App {
public static void main(String[] args) {
Greeting greeting = new Greeting() {
@Override
publi

元記事を表示

ソリューションアーキテクトに求められる視点(12/14) Lambda SnapStart による起動パフォーマンスの向上

## はじめに
ソリューションアーキテクトに求められる視点を整理してみました。

アプリケーション開発に注力するために、ユーザーインタラクションが重要なウェブアプリケーションで、マネージドサービスを効果的に活用することで、ユーザーエクスペリエンスを向上させる方法について、考えました。

今回は、**Lambda SnapStart による起動パフォーマンスの向上**です。実務や試験で、ご参考にして頂けましたら、幸いです。

## **アーキテクトに求められる視点**
レイテンシの影響を受けやすいアプリケーションです。
Lambda 関数は、ライブラリのロード、クラスの初期化、一意の ID の生成を行うための初期化コードがハンドラーの外部に含まれています。
起動時のパフォーマンスを改善したいと考えています。

## **ソリューション**
Lambda 関数を更新して、スナップショット前のフックを追加します。一意の ID を生成するコードをハンドラーに移動します。各 Lambda 関数のバージョンを公開します。公開された Lambda 関数のバージョンに対して Lambda SnapS

元記事を表示

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

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

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

# 目次
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