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

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

AWS Lambda でカスタムレイヤーを追加する方法

# 概要
– Lambdaで何かしらの処理を行いたい時、デフォルトだとインストールされていないパッケージを使う場合は、レイヤーをアタッチする必要がある
– Lambdaを使うとき、基本的に必要になる作業なので、自分のやり方を備忘として残す

# 手順
## 1. ローカルで必要なパッケージをまとめる
– レイヤーに含めたいパッケージを仮想環境にインストール
“`shell-session
python3 -m venv venv
source venv/bin/activate
pip install package-name
“`

– 「__pythonという名前__」のディレクトリにパッケージを詰めてzipファイルにする
– __pythonという名前である必要がある__(任意ではないことに注意)
– 仮想環境の具体的なpathはそのときのローカルの状況次第
“`shell-session
mkdir -p layer/python
cp -r venv/lib/python3.10/site-packages/* layer/python/
cd laye

元記事を表示

【Provisioned Concurrency】IoT CoreからのLambda実行でエラーが出たので解消してみた

## 経緯
IoT CoreからIoTルールアクションでLambdaを実行していたが、コールドスタートが気になりSAMテンプレートでProvisioned Concurrencyを適用。

## Provisioned Concurrency適用時の設定
### IoTルールのSQLステートメントとSAMテンプレート
“`ruby:SQLステートメント
SELECT
aws_lambda(“arn:aws:lambda:ap-northeast-1:111111111111:function:hoge-func:Live”, {“payload”: *})
FROM
‘topic/subtopic’
“`
“`ruby:SAMテンプレート(Lambda部分)
hogeFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub hoge-func
CodeUri: src/handler
Role: !GetAtt LambdaH

元記事を表示

Qiitaの最新記事を教えてくれるアレクサスキルを作ろう Alexa X Lambda X Golang 

# 1.はじめに

## 1.1目的
golangと、lambdaを使ってアレクサスキルと作りたくなったのでやってみる。

## 1.2環境

Windows(GitBash)
Go Version 1.22.0

## 1.3前提条件
– Amazon 開発者アカウントの作成を事前に行う。下記リンクより、Amazon開発者アカウントの作成を元に準備してください

https://developer.amazon.com/en-US/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskil.html
– 事前に[AWSアカウント](https://aws.amazon.com/jp/register-flow/)の作成を行ってください
– [AWSCLI](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)が使える状態にする

# 2.Golangでソースを書き、La

元記事を表示

AWS_ALB+Lambda(Pyhton)でBasic認証

# 概要
AWSで何度かALBに対しBasic認証を行う機会があり、毎回調べながら試行錯誤して作っていたので備忘を目的に記載。
(個人的な感覚で、Node.jsの記事は良く見かけるが、Pythonの記事は見かけないので、いつも一苦労・・・)

# なんでPython?
個人的に、Node.jsよりPythonの方がバージョンのサポート期間が長いイメージなので、Pythonを使いたい。
参考:
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html

# 構成
こんな感じ。
![basic認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505716/221af1a1-5455-f176-c5f1-88aba89425d5.png)

Basic認証未済のリクエストはLambdaへ、Basic認証済のリクエストはEC2へ。

# AWS設定
以下の順序
1.Lambda作成
2.EC2作成
3.ターゲットグループ作成

元記事を表示

aws-lambda-powertoolsを利用してLambdaでAPIを作る

## はじめに
私たちのチームでは、企業が利用している人事システムなどのデータを取り込み、集計して、人的資本にまつわる様々な指標を表示したり、業界平均などと比較することのできるWebアプリケーションを開発しています。

WebアプリケーションのAPI(サーバーサイド)を、API Gateway + Lambda(Python)で構成しています。
その際に、 [aws-lambda-powertools](https://docs.powertools.aws.dev/lambda/python/latest/) を使って、とても便利だと感じたので、紹介します。

なお、この記事で紹介する aws-lambda-powertools の機能は、バージョン2.15.0時点のものです。

## 便利な点の紹介

この記事では、実際にアプリケーションで利用しているLambdaのソースコードを用いて、 aws-lambda-powertools の便利な使い方を紹介していきます。

“`python
from http import HTTPStatus

from _types.errors

元記事を表示

AWS Lambda入門:1分で理解するサーバーレスコンピューティング

# Lambdaとは 

Lambdaは、サーバーの準備や管理なしにコードを実行できるAWSのサービスです。これにより、アプリ開発者はサーバー管理に関する負担から解放され、開発に集中できます。

### AWS Lambdaの特徴
サポート言語: Java、Go、PowerShell、Node.js、C#、Python、Rubyなど幅広いプログラミング言語に対応。
処理のトリガー: ファイル処理、ストリーム処理、ウェブアプリケーション、IoTバックエンドなど、多様なトリガーでLambda関数を起動可能。
料金体系: 実行回数と処理時間に基づいてのみ料金が発生。コードが実行されていない時の料金はかかりません。
### 利点と制約
メリット: トランザクション量に応じて自動スケーリング、高可用性、起動時のみの課金など。

元記事を表示

API Gateway Lambdaプロキシ統合を有効にしてエイリアスごとに通信する方法

## はじめに
Lambdaプロキシ統合が以下の資料だとオフの状態の資料しかないので、Lambdaプロキシ統合をオンにした状態でもうまくいくのかについて確認します。
> c. [Lambda プロキシ統合] はオフのままにしておきます。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/amazon-api-gateway-using-stage-variables.html

## アーキテクチャ

今回のシナリオとして、あるAPIを公開中であり、Version2のbeta版の検証も実施するという想定になります。
バージョンについては、
– v1というAPIバージョンを現行版として公開中。
– v2betaを現在開発中でプレリリース版として公開中。

というシナリオで開発をすすめるという想定とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872532/e769e979-f700-5b

元記事を表示

Lambda Layer上でインポートするパッケージをローカルでインストール〜アップロードまで

## これは何?
今までインフラエンジニアで開発経験など無かったのですが, 趣味やサーバレスの検証も兼ねてLambda Layerを初めて自分で作成し実装した際にライブラリが異なることで`invalid ELF header`エラーが発生した際の対処法になります.

## 調査

Pythonで、momentoライブラリを導入してLambda Layerにアップロードした際に、 `invalid ELF header` エラーが発生しました.
(momentoについて詳しくは[こちら](https://docs.momentohq.com/ja/cache))

> https://docs.momentohq.com/ja/cache

これは、ローカルで実行しているPythonライブラリとLambdaで実行しているPythonライブラリが異なるため、ELF(Executable and Linking Format)ヘッダーの規定が異なりインポートエラーが発生しているものとなります.

“`toml
{
“errorMessage”: “Unable to impor

元記事を表示

【初心者】AWS Lambdaとサーバレス

# 目的
AWS Lambdaについての基本を知るため。
AWSを触る上で重要な概念であるサーバレスにも触れる。

# Lambdaとは
開発した関数をサーバレスに実行できるサービス。

## サーバレスとは

アプリケーション実行環境をマネージドサービスとして提供されたもの。

サービス使用者(私)は、サーバの構築やOSのバージョンアップなどの管理をする必要がない。
Lambdaでは関数さえあれば、サーバを意識することなく実行環境が構築できる。

## マネージドとは

サービス提供者(AWS)がインフラの管理や運用を含めてサービスとして提供する形態のこと。

## Lambdaの仕組み(簡素)

Lambdaは同時実行リクエストごとに、実行環境の個別のインスタンスをプロビジョニングします。

### LambdaをVPCにアタッチしていない場合
実行可能なAZで起動する。

### VPCにアタッチする場合
複数のAZでサブネットを指定することで高可用性を担保する。

## Lambdaにおける2つの実行方式(非同期・同期)

### 非同期実行
呼び出し元が処理結果を待機し

元記事を表示

最近 Hono で外部連携用の AWS Lambda 書いています

## AWS Lambda のハンドラは辛い

こんにちは!AWS Lambda初心者です!

[AWS Lambda](https://aws.amazon.com/jp/lambda/) と言えば、サーバレスかつ非常に安い価格で無限にスケールアウトできる処理を書けることで有名ですが[^1]、 [2022年04月の Function URL アップデート](https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/) でAPI Gatewayなど用いなくてもラムダ単体かつ無料でHTTPリクエストを処理できるURLを持てるようになり、かなりの神サービスになりました。

[^1]: 正直AWS内での広範な扱いを見ていると、AWSの便利なマクロ拡張関数といったほうが適切な気はします

弊社でも [Function URL](https://docs.aws.amazon.com/ja_jp

元記事を表示

デプロイ後にCloudFrontのキャッシュ削除をLambda関数で自動化する

## はじめに

S3+CloudFrontでホスティングされているプロジェクトでCodePipelineでS3へのデプロイ後にCloudFrontのキャッシュを自動で削除するLambda関数を作成しました。

備忘録として残します。あくまでも簡易的な実装例の1つとして参照してください。

## 概要

HTML/CSS/JavaScriptで構成されている静的サイト。
S3でホスティングしCloudFrontから配信している。
CI/CDがCodePipelineで自動化されている。
CloudFrontのキャッシュの削除を手動でマネジメントコンソールから行っていた。

## 実装
### 1. キャッシュ削除を行うLambda関数を実装
今回、Lambda関数はPythonで実装する。

“`bash
import boto3
import time
import os

# Lambdaのエントリーポイント
# HP本番環境のCloudFrontディストリビューションに対してキャッシュ削除を行う
def lambda_handler(event, context):
c

元記事を表示

【API Gateway】IPアドレスによるアクセス制限を実装・設定する方法

API Gatewayで実装したAPIにおいてIPアドレスによるアクセス制限をする必要が出てきたため、その方法を調査・実装した。

# 結論
API GatewayのLambdaタイプオーソライザーを作成し、特定のIPアドレスにのみ認可を与えることでアクセス制限をかけることができる。

# 実装内容
まず、オーソライザーの本体となるLamnda関数を実装する。

“`javascript
exports.handler = async (event) => {
if(event.authorizationToken){
// X-forwarded-forの内容がトークンに設定されるので、
// カンマで区切りで取得したIPアドレスの一番最初の要素がアクセス元のIPアドレスになる
ip = event.authorizationToken.split(‘,’)[0].trim();
}
else{
return generatePolicy(‘user’, ‘Deny’, event.method

元記事を表示

Lambdaのランタイムを更新する

# はじめに

ずいぶん前に作って放置したままだったLambda関数を久々に見たら、Lambdaのランタイムが古いもの(Ruby-2.7)でした。
そこでランタイムをGUI(管理コンソール)で更新するついでに、その手順を記事としてまとめてみました。

# 更新手順

* Lambda関数の詳細ページに入り、画面を下の方にスクロールさせると[ランタイム設定]という項目があります。
* ここで[編集]を押してランタイム設定の編集画面に入ります。

![lambda_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/f00255bd-fe31-d2c0-72d9-cad8c5055ecd.png)

* [ランタイム設定を編集]画面では、現在サポート対象のランタイムがリスト表示されるため、その中から所望のランタイムを選択します。
* ランタイムを選択したら、画面下部の[保存]を押します。

![lambda_002.png](https://qiita-image-store.s3.ap-n

元記事を表示

【Amazon Cognito】ログイン失敗とロックアウトを見分ける方法

Amazon Cognito のユーザー認証機能を使ってログイン機能を実装しているシステムで、連続で複数回ログインに失敗するとロックアウトが発生するが、単にログインに失敗しているだけなのか、ロックアウトが発生しているかが見分けがつかなかった。

そこで、今回はロックアウトを見分ける方法について調査結果を共有します。

# 結論
ログインに失敗した場合も、ロックアウトによる失敗もNotAuthorizedExceptionが発生するが、メッセージに違いがあるため、それを参照することで見分けることができる。

ログイン失敗の場合
“`
Incorrect username or password.
“`

ロックアウトによる失敗の場合
“`
Password attempts exceeded
“`

# 調査と検証
Cognitoでのイベント履歴はCloudTrailで確認することができる。
CloudTrail > イベント履歴でイベント名「InitiateAuth」でフィルタリングするとわかりやすい。
![スクリーンショット 2024-03-23 12.30.16.png](

元記事を表示

特定のページが更新されたら通知する仕組みを作ってみた

## はじめに
RSS対応のサイトだと、更新情報追いやすいけど、RSS非対応のページも追いたいよね。って人向けの記事です。
RSS対応しているサイトなら、RSSリーダーを使った方が早いです
また、Discordのチャンネルにも通知がしたかったので、メールとDiscord両方に通知を行っています。

Discord側にWebhook用のURLが必要ですが、本記事では紹介しません
参考サイトのZennの記事が細かく書かれていますので、そちらをご覧ください

なお、この仕組みは更新を検知したいサイトに確認リクエストを送ります。
高頻度で設定してしまうと、サーバーに負荷がかかる為、
**高頻度での設定**はしないようにお願いします

### 参考サイト
https://zenn.dev/lambta/articles/5edbda4ccb1ec6

https://qiita.com/Kalmari/items/bf07b8345054f4af605e

https://dev.classmethod.jp/articles/daily-check-for-non-rss-page/

##

元記事を表示

[Django REST Framework] Lambdaで定期的に実行するバッチ削除処理APIの作成方法を見てみよう!

# 概要
Lambdaで定期的に実行するバッチ削除処理APIの作成方法
# 目的
掲題の方法を説明する

# 使用技術

“`application/pyproject.toml
python = “^3.11.2”
Django = “^4.2.7”
djangorestframework = “^3.14.0”
pytest = “^7.4.3”
pytest-django = “^4.7.0”
“`

# 早速コードを見ていきましょう!
今回の削除する対象はSMS送信履歴とします

“`application/project/serializers.py
from rest_framework import serializers

class DeleteSmsSendHistorySerializer(serializers.Serializer):
“””SMS送信履歴削除用のシリアライザ”””

token = serializers.CharField(max_length=64)

“`

“`application/project/vie

元記事を表示

AWS SAM: 役割と機能をざっくりまとめてみた

こんにちは!Xyeerです
今日は、SAMの役割と機能について説明します。

## 経緯
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749163/d52c05cc-4442-a7af-270d-dea05d3673fc.png)

現在、上記のようなシステムを使っています。
Lambdaには、[Amazon Elastic Container Registry](https://aws.amazon.com/jp/ecr/)経由でアップロードしています。

**問題点**
・Lambdaにアップロードするまで、システムが問題なく動くかわからない。
・何度もソースコード修正するのに、毎回アップロードして確認するのが手間である。
### →ローカル環境で、Lambdaを使えるようにしたい

そんな思いで色々と調べていたら、サーバレスアプリケーションを簡単に定義、デプロイ、管理できるフレームワークであるSAMに出会いました。

## そもそも AWS SAMって何?
イベント駆動型のサー

元記事を表示

【AWS学習記録5回目】Amazon CloudFrontおよびAWS WAFを用いたアプリを構築してみた

## 概要

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-CF_WAF-2022-reg-event.html?trk=aws_introduction_page

をもとにAmazon CloudFrontおよびAWS WAFを用いた翻訳アプリを構築してみました
※ハンズオンの内容と全て一致していません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747730/72b371b6-1221-f56d-c08b-0e92e5e07328.png)

## CloudFormation
米国東部 (バージニア北部)リージョンに作成
“`waf.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
#======================
# WebACL
#======================
WebACL:

元記事を表示

AWS Lambdaの実装・運用で知っておきたかったこと

# 目的

AWS Labmdaの本格利用を検討して、調査・検証を行ったので、知見をまとめる。

書いてあること

– 運用関連のこと
– コードの実装関連のこと
– cost関連のこと

# 管理

AWS Lambaの運用周りの私見をまとめる。

コードで管理する前から運用してるものがあるので、それらも管理対象としたければ、
aws cli使うか、スクリプト書いて、自前でCICD組むか、lambrollを使っちゃうのが良さそう。

## AWS SAM

公式ではAWSSAMを使うことを推奨している模様。
https://github.com/aws/serverless-application-model

CloudFormationを利用するので、設定ファイルの書き方が独特で、調べにくいので、学習コストが高い。
既に運用済みのLambdaがあった場合、それをコードで管理できるようにする(terraform import的な)ことができなさそう。

テストコードはない

https://docs.aws.amazon.com/ja_jp/serverless-applica

元記事を表示

【2024年春Ver.】AWS Lambda Layerの作成方法をわかりやすく解説【Python3.12】

1年ぶりにAWS Lambdaでやってみたいことができて、新しいライブラリを入れるためにLayerを作ろうと[自分の過去記事](https://qiita.com/__DASHi__/items/268062f0dba0e93170f2)見ながらAWS Cloud9を久しぶりに開いてみたら、ちょいちょい変わっているところがあって「まあAWSだもんね、そうだよね」と勝手に納得していました。

この記事は、そんなAWS Lambdaを久しぶりに触った私が将来読んでも引っかからずに作業できるよう、AWS Lambda Layerを簡単に作成する方法を解説する備忘録です。

## 1. Lambda Layerとは

まずは、Lambda Layer(”Lambda”はラムダ、”Layer”はレイヤーと読みます)とは何?という話から。

**AWS公式サイトより**

> Lambda レイヤーは、補助的なコードやデータを含む .zip ファイルアーカイブです。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。(出典:[https://docs.a

元記事を表示

OTHERカテゴリの最新記事