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

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

AWS Lambda Layersを自動更新するGitHub Actions

# はじめに

あの若干面倒なAWS LambdaのLayersをGithubActionsで自動更新するプロセスを組みましたので参考にしていただければ!!(備忘録も兼ねて)

また、本記事内ではアクセスキーとシークレットキーを使った認証ではなく、OIDC認証で実施していますので以下の記事を参考にしていただければ問題ないかと思います。

https://qiita.com/frei_aqua/items/c284a1249dac84c881cb

# 前提
– Python
– Pipenv環境
– Lambda関数を作成済み
– Layersも紐づけ済み(設定オプション的に紐づけもコマンドで行けそうか?要検証)

# 本体

お急ぎの方もいるかと思いますので先にymlを貼っておきます。

“`yaml
name: Layer Update

on:
push:
branches:
– main
paths:
– “Pipfile”

env:
REGION_NAME: your-region
FUNCTION_NAME: 対象のf

元記事を表示

AWS Step Functionsでランダムアルファベットに基づくLambda関数の実行

AWS Step Functionsは、分散システムの調整や状態管理を簡単にするための強力なツールです。今回は、Step Functionsを使って、ランダムなアルファベットを生成し、その結果に基づいて異なるLambda関数を実行する方法をご紹介します。このプロセスを通じて、StepFunction の基礎の基礎を学びます。

具体的には、まずランダムなアルファベット「A」、「B」、「C」を生成するLambda関数を呼び出し、その結果に基づいて「A_Process」、「B_Process」、「C_Process」のいずれかのプロセスを実行します。それぞれのプロセスは別々のLambda関数で処理され、最終的に結果を出力するLambda関数が呼び出されます。この一連の流れをStep Functionsでどのように実装するかを詳しく解説します。

### Step Function の構成
完成時の Step Function の構成は以下の通りです。
![stepfunctions_graph (2).png](https://qiita-image-store.s3.ap-northea

元記事を表示

DockerイメージをLambda関数のデプロイパッケージとして使用する

# 手順

## Dockerfileの作成

“`Dockerfile:Dockerfile
# 使用するベースイメージを指定
FROM public.ecr.aws/lambda/python:3.12

# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt

# Lambda関数のコードをコピー
COPY app.py ./

# Lambda関数のハンドラを指定
CMD [“app.lambda_handler”]
“`

## Lambda関数のコードを作成

“`app.py
def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: ‘Hello from Docker Lambda!’
}
“`

## 必要なパッケージを記載したrequirements.txtの作成

“`requirements.txt
# 例:reques

元記事を表示

不要なリソースの稼働時間、コストを削減する方法

## はじめに
今回は、**不要なリソースの稼働時間、コストを削減する方法**について、整理しました。今回ご紹介する内容を活用すると、毎回、必要な時ににインスタンスを起動したり、停止したりする手間が減るので、アプリケーション開発に集中する事が出来ると思います。

## **想定されるケース**
**開発チームとテストチームは、営業日の営業時間中に作業しますが、本番環境は 24 時間、365日稼働しています。最小限の運用労力でコストを削減するために何をすべきでしょうか?**

## **ソリューション**
最小限の運用労力でコストを削減するために、開発およびテスト環境のリソースを営業時間外に停止し、営業時間中に再起動することが効果的です。これにより、不要なリソースの稼働時間を削減し、コストを削減できます。

営業日の夕方に実行される Amazon EventBridge ルール`StopInstancesRule`を作成します。タグに基づいてインスタンスを停止する AWS Lambda 関数`StopInstancesFunction`を呼び出すようにルールを設定します。営業日の午前中

元記事を表示

未来を先取り!サーバーレスコンピューティングを徹底解説

# はじめに

サーバーレス大好きなエンジニアです!
今日は、最近急上昇中の「サーバーレスコンピューティング」について紹介します!
サーバーレスの実態や使われている事例も含めて書いていきたいと思います!

# 対象読者

– サーバーレスコンピューティングに興味がある方
– 最新の技術トレンドを追いかけたい方
– クラウド技術に関心のある方
– 新しいアーキテクチャの設計を学びたい方

# 目次

1. サーバーレスコンピューティングとは
2. サーバーレス技術の進化とトレンド
3. サーバーレスのメリットとデメリット
4. サーバーレスアーキテクチャの設計方法
5. 実際のケーススタディと成功事例
6. サーバーレスを使用する際のベストプラクティス
7. 今後のサーバーレスの展望

# 1. サーバーレスコンピューティングとは

サーバーレスコンピューティングという言葉を初めて聞いたとき、多くの人は「サーバーが無くなるの?」と驚くかもしれません。でも、実際には「サーバー」そのものがいつもそこにあるのです。サーバーレスコンピューティングとは、クラウドプロバイダーによってサーバー管理が完

元記事を表示

AWS Lambdaを定期的に実行するためにEventBridgeを設定する [Terraformを使用]

## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。

https://github.com/mochi-yu/qiita-material/tree/main/lambda-with-event-bridge-by-terraform

## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。

この記事はそのうちの3本目として、GoのスクリプトをAWS EventBridgeから定期実行する構成をデプロイしてみたいと思います。

– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– **Even

元記事を表示

AWS LambdaにGo言語のスクリプトをDockerイメージでデプロイする [Terraformを使用]

## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。

https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-docker-with-terraform

## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。

この記事はそのうちの2本目として、Dockerイメージを用いてLambdaにスクリプトをデプロイしてみたいと思います。

– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– **Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mo

元記事を表示

AWS LambdaにGo言語のスクリプトをzipファイル形式でデプロイする [Terraformを使用]

## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。

https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-zip-with-terraform

## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。

この記事はそのうちの1本目として、zipファイルを用いてLambdaにスクリプトをデプロイしてみたいと思います。

– **zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mochi_22

元記事を表示

EC2 上で docker コンテナを使用した Lambda 関数の開発

EC2(Amazon Linux2) から dockerコンテナを使用して lambda 関数を作成する手順を記録しておきます。
それぞれについて、軽く説明しておきます

## docker
docker の使い方として、以下二つの方法があると思います。今回は docker 環境で開発をしていきます。
1. ローカルで開発して、docker 環境でアプリケーションを動作させる
2. docker 環境で開発して、アプリケーションを docker で動作させる

具体的には、docker とボリュームをマウントした環境で開発を行った後に、Docker image を ECR に Push して、Lambda 関数を作成します。

## 手順
0. EC2 にSSH接続する
1. docker をインストールします
“`
$ sudo yum install -y docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
$ sudo docker info

元記事を表示

ソリューションアーキテクトに求められる視点(14/14) API の使用を制御および制限する方法

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

今回は、**API の使用を制御および制限する方法**です。実務や試験で、ご参考にして頂けましたら、幸いです。

## **アーキテクトに求められる視点**
Amazon API Gateway API を作成し、その API を外部の開発チームと共有している。
API は AWS Lambda 関数を使用し、本番ステージにデプロイされている。
API の使用量は特定の時間に急増し、コスト増加の懸念が生じている。
Lambda 関数を作り直すことなく、コストと使用量を制限する必要がある。

## **ソリューション**
API Gateway API キーと使用プランを作成する。使用プランでスロットル制限とクォータを定義する。使用プランを本番ステージと API キーに関連付ける。API キーを外部開発チームと共有する。

:::note info
API キーと使用プランを作成すると、API の使用を制御および制限できます。使用プランでは、スロットリング制限 (1 秒あたりのリクエスト数) とクォータ (

元記事を表示

複数名の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

元記事を表示

OTHERカテゴリの最新記事