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

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

python-lambda-local を使って AWS Lambda 関数をローカル環境で実行する

# はじめに
Lambdaのプログラムをテストする際、毎回 Lambda 関数を更新して実行するのは面倒ではないですか?
そこで良い方法ないかなと調べていたところ、 **python-lambda-local** というツールを知りました。

https://github.com/HDE/python-lambda-local

# 仕様
Python 3.7+
今回試した環境のバージョンは 3.9.6 でした。
“`bash:バージョン
$ python3 –version
Python 3.9.6
“`

# インストール
pip でインストールすれば完了です。

“`bash:インストール
$ pip install python-lambda-local
“`

# オプション
使い方とオプションは以下になります。

“`bash:使い方
$ python-lambda-local [-h] [-l LIBRARY_PATH] [-f HANDLER_FUNCTION]
[-t TIMEOUT] [-a ARN_ST

元記事を表示

MacでLambdaレイヤーARMアーキを作成

# はじめに
 ***arm64でLambda関数をデプロイせざるを得ないケースで、Layerを追加したい場合向け。*** imageデプロイを使えばどうとでもなるのだが、それは根本解決にはならない。前に一度やったのだが、やり方を失念してしまったため、備忘として記録する。
Cloud9やEC2を使ってLayerを作成する方法もあるが、***AWSが提供するdocker imageを使えばローカル環境であらゆるLayerを作成できるし、インタラクティブにやりたい***ので、本記事ではその方法について記述する。

# 環境
– 言語: python3.12
– OS: macOS Sonoma14.5
– RAM: 64GB
– Docker: 25.0.3

# 手順
この[Docs](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-layers.html#python-layer-compatibility)で推奨されている通り、Amazon Linuxベースコンテナイメージに基づくDocker環境に依存関係をイン

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編PUT&DELETE(第五回)

さて、今回は更新と削除のメソッドを作成していきたいと思います!
とは言っても構造体などはgetItemやputItemに似ているので非常に分かりやすかったです。

とりあえず全体像は以下の通りになります。
“`
package main

import (
“encoding/json”
“net/http”

“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
)

var (
tableName = “MyDynamoDB”
dynamoDb = dynamodb.New(session.Must(sess

元記事を表示

【Python】Lambda Layerの作成方法

# Lambda Layerを作成したいがめんどくさい
Lambda LayerはAWS Lambdaに標準で用意されていないライブラリや自分で作成した関数などを取り込む際に利用します。
一見zipファイルを作成してアップロードするだけなんですが、いくつか落とし穴があります
– Amazon Linuxで作成する必要がある(場合がある)
– LambdaはAmazonLinuxで動いている
– macOSなどでインストールしたものがAmazonLinuxで動かない場合があるため
– 求められるディレクトリ構造が実はある
– apiでのzipアップロードはファイルサイズの制限がある

などなどで躓いたのでやり方をまとめておきます

## AmazonLinuxでのpython実行環境の用意
構築方法は別記事にまとめました。ローカル環境(macOSやWindows)でインストールしたライブラリをアップロードすると、動くときもありますが動かないときもあります。仮に動いたとしても、基本的にはAmazonLinuxで作成するほうが良いでしょう。
pythonはLambdaで使用す

元記事を表示

【Lambda】Parameter Storeの値を取得する処理を共通化する

## まとめ

処理をmjsファイルに記述してレイヤー登録する

例として、supabaseを使用するためのパラメータを登録・取得してみます
lambdaからsupabaseをいじいじする記事は[こちら](https://qiita.com/akitika/items/3ef5aeb279ac5e9fc97d)

## 1. ファイルの用意

“`bash
touch getParameters.mjs
“`

## 2. 処理をmjsファイルに記述

以下のように記述してみます

“`js:getParameters.mjs
import { SSMClient, GetParameterCommand } from “@aws-sdk/client-ssm”;

const client = new SSMClient({ region: “ap-northeast-1” });

export async function getParameter(name) {
const params = {
Name: name,
WithDecrypt

元記事を表示

【Lambda】Supabaseに接続する

## まとめ

zip化したnodejsをレイヤーとして使う

## 1. Node.jsランタイムを使用する

当初はpythonを使用するつもりだったのですが、pythonでsupabaseライブラリを使うのが結構面倒だったので、nodeを使用しました

## 2. レイヤーとして使用するnodejsを用意 -> デプロイ

“`bash
# nodejsディレクトリを作成
mkdir nodejs
cd nodejs

# supabaseライブラリをインストール
npm init
npm install supabase

# zip化
cd ../
zip -r hogehoge.zip nodejs
“`

:::note alert

注意1: 作成するディレクトリ名は必ず**nodejs**という名前にすること

注意2: ファイルではなく**nodejsディレクトリ自体をzip化する**こと

:::

zipファイル自体の名前はなんでもOKです
作成したzipをlambdaのレイヤーとしてデプロイしましょう

レイヤー登録のわかりやすい手順は[こちら](http

元記事を表示

【ALB・CloudWatch・Lambda】サーバーダウン等の異常をALBで検知した際にSlackに通知する

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして約3ヶ月が経過しました🐣

## 概要
サーバーダウンにいち早く気づき、異常の対処や再起動ができるために、
ALBの異常を検知した際に、Slackに通知を送る機能を実装します。
下記の構成でEC2にデプロイされており、ロードバランサー(ALB)で1分毎にHTTPリクエストを送信し、サーバーが起動しているか確認する機能はすでに導入されている前提とします。

今回のインフラ構成図のイメージです。
![Qiita記事用.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471604/4ef7cf57-ad9b-7141-0c5a-298fee473b65.png)

### 環境
– Docker
– Ruby 3.2.3
– Rails 7.1.3
– PostgreSQL

:::note warn
間違っている箇所や、紹介

元記事を表示

GithubActionsでECRのImageをもとにLambdaをデプロイする方法

## 概要
– GithubActionsと ECRのイメージをもとにLambdaをデプロイするCICDを構築したため、記録として残しておく。
– 本記事を通して、下記が実現できるように記載していく
– ローカルでコード編集
– Commitして、GithubへPush
– GithubActionsが実行
– 編集後のコードをLambdaに自動デプロイする
– 最終的な構成として、キャプチャのよう流れとなる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531653/416025ea-2643-0084-e630-25d3625f83bd.png)

## 前提
– Githubの操作(CommitやPushなど)経験があること
– AWSのアカウントがあること
– この記事内ではオレゴンリージョンを使用しているため、リージョンコードが `us-west-2`で進めています。なので、東京リージョンなどを使用する際は適宜書き換えてください
– C

元記事を表示

【Cognito】メール認証、電話認証をせずにユーザー認証させるように頑張ってみたお話

## 結論
ユーザー登録後(ここ重要)lambdaで強制的に権限を変更する
つまり、登録からログインする前に何かしらでlambdaを起動させる必要がある

## サインアップフォーム

“`js:signin.tsx
import React, { useState } from ‘react’;
import { CognitoUserAttribute, CognitoUserPool } from ‘amazon-cognito-identity-js’;
import { poolData } from ‘../../../../lib/cognito’;

export const SignUp = () => {
const router = useRouter()
const [state, setState] = useState({
password: ”,
email: ”,
error: ”
});

const handleChange = (event) => {
setState({
..

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編GET&POST(第四回)

さて、今回は以下のようにファイルを記述してAPIGatewayで用意したエンドポイントへアクセスし、DynamoDBのレコードを作成&取得できるようにしていきます。長くなってしまうので今回はGETとPOSTをまずは作成し、次回更新と削除を実装していきたいと思います。

いつも通り詳しい解説をしていきます。
“`lambda/dynamoDBHandler/main.go
package main

import (
“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
“encoding/json”
“net/http

元記事を表示

AWSの利用をZscalerからに制限する

# 概要

AWSのセキュリティを強化する機能としては、MFA(多要素認証)が一般的です。

しかしMFAを利用しても、自宅からアクセスできてしまう問題があります。

また複数のAWSアカウントを管理し、IAMユーザが数百人に達すると、全ユーザの動向を把握するのは難しくなります。
メンバ管理をしている責任者が適切に運用してくれないと、退職したユーザにアクセスされてしまう可能性もあります。

アクセスキーにMFAを強制するとロジックの作り込みが必要になりますし、人間がアクセスキーを使用する際には手順が増え、ユーザに説明するのも、自分が利用するのも手間がかかります。

このような問題は、IP制限を設定することで多くが解決できます。アクセスキーが漏洩した場合のリスクも大幅に抑えられます。

会社からのアクセスに限定するには、自社拠点のIPアドレスに制限すれば良いのですが、弊社では全クライアントにZscalerがインストールされているためこの方法が使えません。

本記事では、Zscaler環境下でAWSにIP制限をかける方法、特にその運用の自動化を解説します。

なお、これを読みに来た人はZs

元記事を表示

[過去記事]lambdaからAPI Keyが設定されたAPIを実行する

## 前提

今回のlambdaはNode.js 18.xを使います。また関数の作成など細かい方法は下記で記載しているので省略します!

要リンク用意(モジュール無し)

要リンク用意(モジュールあり)

また、API Keyが設定されているAPIは別のlambda関数を用意します。今回は下記の記事で作成したreturnHello関数をそのまま使ってみます!

https://qiita.com/miriwo/items/aee5fbe285a1338daac9

## 今回作るもの

![private__Online_Whiteboard_for_Visual_Collaboration-3-1024×528.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e24a77c2-cb3e-13e8-947c-f239f412e315.png)

lambda関数2個とAPI Key付きのAPIをAPI Gateway作成します。

### lambda関数1つ目(returnHello関数)

元記事を表示

[過去記事]AWS lambda Node.jsの追加モジュールを使って他のAPIを実行してみる(requestモジュール使用 現在は非推奨)

## 今回つくるもの

![private__Online_Whiteboard_for_Visual_Collaboration-2-1024×388.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/c1ae4144-f89e-c20a-4b13-279dddc59d70.png)

今回は前回の内容と似ていて、lambdaを用いてQiitaのユーザー情報APIを実行しレスポンスをconsole.logで出力してみようと思います!ただし!今回APIリクエストを実行する際は既存のhttpsモジュールではなく、requestモジュールを使って見ようと思います!

## 前提

今回の作業は前回と同様にAWSアカウントを持っていることを前提とします。さらにlambda関数作成権限とIAMロール作成権限が必要です。

今回requestモジュールのインストールはローカルのPCを用いて作成します。ローカルPCでnpmコマンドが実行できるようにしておいてください。また、ローカルのNode.jsのバージ

元記事を表示

[過去記事]AWS lambda Node.jsの追加モジュールを使用せず他のAPIを実行してみる

## 今回作るもの

![private__Online_Whiteboard_for_Visual_Collaboration-1-1024×429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e93efa46-4472-86c2-880a-e3414044a6c9.png)

今回はlambdaを用いてQiitaのユーザー情報APIを実行しレスポンスをconsole.logで出力してみようと思います!

## 前提

今回の作業にはAWSのアカウントを持っていることを前提とします。また、lambda関数作成権限とIAMロール作成権限が必要です。

## 準備

### lambda

まずはブラウザからAWSにログインしコンソールを開き、lambdaのホームまで移動しましょう。
その後、左サイドバーの「関数」をクリックし、開いたページで「関数の作成」をクリックしましょう。

![関数_-_Lambda-1024×365.png](https://qiita-image-store.s

元記事を表示

[過去記事]AWS S3のバケットのCSVが更新・登録されたことをきっかけにLambda関数を実行してみよう!

## 前提

本記事の内容は以前に記載した下記記事実施直後の状態から実施してゆきます。

https://qiita.com/miriwo/items/7470659f070504e0fafe

## 今回つくるもの

S3の指定したバケットの指定したフォルダにCSVファイルがアップロード、もしくは既存のCSVが更新された時に下記で作成した「Hello for lambda!」を返すLambda関数を実行するようにしてみます!

https://qiita.com/miriwo/items/7470659f070504e0fafe

S3のCSVを登録・更新する作業は手作業で実施しようと思います。

![Cursor_と_private__Online_Whiteboard_for_Visual_Collaboration-1024×402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d4b777c0-b8e4-fdb2-420f-13e6a92018ae.png)

## 準備

##

元記事を表示

【AWS×Webアプリ】CloudFrontのキャッシュ削除(SAM)

## 目的
・AWS上の静的Webサイトホスティングを有効にしたS3をCloudFrontで公開。
・S3のコンテンツを更新した際に、CloudFrontのキャッシュ削除を行うLambdaを実装。

## 前提条件
・SAMを使用してAWS上にリソースを作成する。
・Pythonを使用してLambdaを実装する。

## 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637963/4052117a-cea8-9fa3-e301-6712765433d2.png)

## SAMテンプレート
“`template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Transform: AWS::Serverless-2016-10-31

Resources:
WebBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::Sta

元記事を表示

Instagram APIで自分の投稿へのコメントに自動返信するAWS Lambdaの実装

# Instagram APIを使用して投稿へのコメントに自動返信する機能

この記事では、Instagram APIを利用して、投稿へのコメントに自動でDMで返信する機能をAWS Lambdaを使って実装する方法を紹介します。Facebook MessengerのInstagram APIを活用し、コメントを解析して自動的にDMを送信するプロセスを詳しく解説します!

## 1. はじめに

Instagramの投稿に対するコメントに自動で返信する機能を作成することで、ユーザーとのエンゲージメントを高め、迅速な対応が可能になります。本記事では、その実装方法を詳細に説明します。

## 2. アーキテクチャの構成

### フローチャート

1. ユーザーがInstagramの投稿にコメント
2. Webhookを通じてコメントデータを受信
3. コメント内容を解析し、自動返信メッセージを生成
4. DMを送信

### 使用する技術スタック

– **プログラミング言語**: Python
– **サーバーレスプラットフォーム**: AWS Lambda
– **APIゲートウェイ*

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB編(第二回)

さて、今回は以下の記事に続けて第二弾DynamoDBのスタックをCDKで追加していく。

https://qiita.com/YokoYokoko/items/c1fecc3278197ca43050

まずは以下をimportに追加して`go mod tidy`を実行
“`
“github.com/aws/aws-cdk-go/awscdk/v2/awsdynamodb”
“`

さて、まずはコードの全体像からです。
今回は以前のコードの追加していますが、まあほとんど似たような箇所が多いので前回よりも理解は楽になりましたが、Dynamoの設定値があるのでそちらの方も踏まえて見ていこうと思います。追加などわかりやすいように改行や並び順が変だったりします。

ちなみに私のDynamoDBの知識は2年前にSAPを取得した時の枯れた知識と先日再度キャッチアップした時の以下の記事レベルです。ほとんど入門者です。

https://qiita.com/YokoYokoko/items/8f0a19b0da69dc28f512

“`
package main

import (
“lo

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる CDK編(第一回)

このシリーズでは、CDK*Lambdagolang*DynamoDBの構成で学習をしてみたい自分がその記録も残しつつ、私と同じような、とりあえずこのような構成の雰囲気を掴んでみたいという方向けに書いています。

# CDKとは
コードでクラウド インフラストラクチャを定義し、AWS CloudFormation を通じてプロビジョニングするためのオープンソース ソフトウェア開発フレームワークです。(公式)

まあ、簡単にいうとUI上でEC2とかS3とかをぽちぽち設定するんじゃなくて、コードで起動できるよってこと。管理もしやすいから便利だね。

# 何はともあれ触ってみよう。
とりあえずディレクトリを作成し、モジュールを初期化。
“`
mkdir first_prac_go
cd first_prac_go
cdk init –language go
“`
すると`go.mod`や他の必要ファイルが色々と作成される。
`cdk init –language go`では以下ファイルが生成されます。
“`
.
├── README.md
├── cdk.json
├── direc

元記事を表示

Inspector から Security Hub に統合した脆弱性通知について考える

# やりたいこと

![inspector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/89bce2f0-bc4f-391c-14a0-0f1640c75835.png)

以下のページで紹介されている改善後の構成で、

1. 脆弱性が検出されると EventBridge から Lambda1 を起動し、DynamoDB に脆弱性情報を格納する。この時 DynamoDB の パーティションキーとソートキーで重複をチェックし、既にレコードが存在する場合はスキップし、レコードが存在しない場合は DynamoDB に格納する

2. EventBridge Scheduler で 1 日に 1 回だけLambda2 を起動し、DynamoDB から、まだ通知が行われていない脆弱性を取得し Slack へ通知する。Slack への通知が完了すると DynamoDB に格納されている脆弱性のステータスを NEW ⇨ NOTIFIED に更新する

この 2 つを行う。

https://note

元記事を表示

OTHERカテゴリの最新記事