Lambda関連のことを調べてみた2023年09月15日

Lambda関連のことを調べてみた2023年09月15日
目次

Amazon EventBridge Schedulerのイマイチだったところ

## はじめに

本記事はAmazon EventBridge Schedulerのイマイチな部分を説明する予定でしたが、
投稿日時点では改善されていて良い機能になっているという内容になります

検証をすることにした経緯も書いていますが、結論だけ読みたい方はスキップしてください

## Amazon EventBridge Schedulerを検証することになった経緯

とある業務システムを構築している際に、指定の時間になったらLambdaを実行する機能を実装することになりました。
繰り返し実行するのではなく、1回のみ実行することになります
簡単に説明すると、スマホのアラームのように、WEB画面から時刻を入力し、その時刻になればLambdaを実行させるシンプルな機能です

時刻の登録は画面から行うため、AWSコンソールでポチポチ設定することができません
WEBアプリとして一連の流れを実現させる必要がありました

アーキテクチャとしては、本記事の投稿時点では、Amazon EventBridge Schedulerが発表されていますが、それ以前に実装を行なったため、Amazon Even

元記事を表示

AWS Secrets ManagerとLambdaを使ってローテーションする際に「シークレットをローテーションできませんでした」とエラーが出た時の対象法

## 概要
AWS Secrets Manager内でキーローテーションの設定をしてうまくいかなかった際に下記画像のように
`シークレットをローテーションできませんでした`
としか表示されずに困ったのでその原因と対処法について解説します

![スクリーンショット 2023-09-13 14.14.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/dac7b8c9-abd6-b85b-a218-26262ce69bc4.png)

## 原因
結論から言うとリソースベース(今回だとSecerts Manager)のポリシーステートメントが足りてなくてローテーションができませんでした

リソースベースのポリシーステートメントについては下記の通りです
> 関数は、その実行ロールから AWS リソースに対する許可を受け取ります。AWS SDK を使用して AWS のサービスを呼び出すには、そのサービスの API オペレーションへのアクセスを許可するポリシーをロールに追加します。
Lambda コ

元記事を表示

サーバレス環境構築(APIGateway+Lambda)

# はじめに
Cloudfront + S3 + APIGateway + Lambda を使い、初めてサーバレス環境を構築しました。
自身の備忘録として記述しますが、どなたかのお役に立てたら光栄です。
(不足が多々あるかと思いますがご容赦ください!)

※本記事は以下の「サーバレス環境構築(CloudFront+S3)」に続く作業となります。
 https://qiita.com/mtsunezawa/private/4c1cdfa8f569d5523d2b

## 構成について
* CloudFront Functions を利用し、特定のIPアドレスのみアクセスを許可
* 静的コンテンツは S3 Bucket へ保存
* 動的コンテンツは API Gateway を利用
* Lambdaはデフォルトの”Hello Lambda” を利用

元記事を表示

ServerlessFramework を使い AWS Lambda Python のローカル開発

Serverless Frameworkを使い AWS Lambda のPython用のローカル環境の作成と実行について記載した内容です
AWSマネジメントコンソールでプログラミング・コーディングするのでなく、ツールを使い開発者体験をよくしていきたい。

## はじめに
– [Dockerで Serverless Framework 環境構築](https://qiita.com/seiichi_akiba/items/d42bda576f3fc6ac5117) の記事のようなことをします
– https://qiita.com/ssugimoto/items/ebe5b2ab5efbb6c6e541 の記事はdev container(旧、リモートコンテナ)を使った場合として位置づけていますので、今回の内容とは異なります
– [Developing inside a Container](https://code.visualstudio.com/docs/devcontainers/containers)ではなく(.devcontainer/devcontainer.jsonを使わ

元記事を表示

AWS Lambda ( Node.js 18.x ) で AWS System Manager (SSM) パラメータストアのSecureStringの値を利用する

# 公式

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ps-integration-lambda-extensions.html

# SSM ( AWS Systems Manager ) のパラメータを作成しておく

ここでは

“`
testparam
“`
というキー名で登録する

# Lambda関数を作成する

AWS上のlocalhostの固定のポートにGETリクエストするという仕組みのようだ

– URLパラメータとしてSSMのパラメータ名を渡す `name=testparam`
– 秘密値のDecryptのために `withDecryption=true` をURLパラメータとして渡す

リクエストヘッダに `AWS_SESSION_TOKEN` を付与する必要があるが
これはLambda実行ではデフォルトで設定される環境変数のようだ
なので自分で何かを設定する必要はない

## コード例

`index.mjs`

“`js
export const handler

元記事を表示

SEO対策の一貫で画像の動的リサイズシステムを実装した

こんにちは。サーバーサイド/webフロントエンジニアをやっている @kapibara です。
今回は https://www.sakeai.com/ のSEO対策をするにあたって画像の動的リサイズシステムを実装したので、そちらについて紹介しようと思います。

# モチベーション
Sakeaiはユーザーが飲んだ日本酒の口コミを投稿するプラットフォームです。アプリでは口コミを投稿/閲覧することができ、Webでは投稿された口コミを閲覧することができるようになっています。

当然、口コミを表示する際にはユーザーがアップロードした画像も一緒に表示するわけですが、近年のスマホの進化によりユーザーがアップロードする画像の解像度はとても高いです。Webでこれをこのまま表示してしまうと画像のレンダリングに時間がかかり、SEO観点で非常によろしくあ

元記事を表示

AWS – Terraformで作成した Lambda関数で実行時エラー ( lambda_handler is undefined or not exported ) ( node.js )

# エラー

Lambda実行時にこんなエラーが起こる (node.js)

“`
index.lambda_handler is undefined or not exported
“`

スクリプトは

“`js
export const handler = async(event) => {
// …
}
“`

# 解決

– ファイル名を index.js / index.mjs にする
– 関数名を lambda_handler にする

で解決した

“`js
export const lambda_handler = async(event) => {
// …
}
“`

ファイル名と関数名を揃える必要があるみたいだ

# Terraform

Terraformではhandlerをこのように指定していた

“`
resource “aws_lambda_function” “xxx” {
handler = “index.lambda_handler”
}
“`

# チャットメンバー募集

何か

元記事を表示

AWS Lambdaのruntimeがgo1.xになっているLambdaをprovided.al2に変更する

## AWSからの変更

Lambdaは、2023年12月31日に予定されているAmazon Linux 1のサポート終了に伴い、`go1.x`ランタイムを廃止します。

AWSから記事が出てます:
https://aws.amazon.com/jp/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/

> 現在、LambdaでGoを使用するお客様は、`go1.x`ランタイムを使用するか、`provided.al2`ランタイムを使用することができます。今後、`go1.x`ランタイムは、現在2023年12月31日に予定されているAmazon Linux 1のサポート終了に合わせて非推奨となる予定です。

それで生のGoファイルのサポート無きなります。それで生のGoファイルを利用してるLambdaが使えなくになりますので移行する必要があります。

## 移行する方法

Goのruntimeが全部なくなりますのでruntime

元記事を表示

Windows&Docker開発環境で作ったImageをそのままAWS Lambdaにのせる方法

## はじめに

この記事では、ローカル環境(Windows&VSCode&Docker開発環境&Python)で開発したImageをそのままAWS Lambdaで動かせるようにする方法を載せています。
例として、S3にファイルをアップロードすることを目指します。
Windows環境で確認しています。
未確認ですが、前提条件以外の部分は多分Macでも同じかと思ってます。

## 背景
– ローカル環境のWindows環境&Pythonで動いても、それをAWS Lamdbaにのせるのが大変。それに無事にAWS Lamdbaにのせることが出来ても、改修しにくい。
⇒ ローカルで出来たことをLambdaにそのまま反映したい!!
– プログラムによってはzipしてAWS Lambda Layer作らないといけないのが大変
⇒ Layerとか作りたくない!!

そんなわけで、希望が叶う手順を作りました。
環境を作るまではちょっと大変です。

## 目次
– [環境](#環境)
– [前提条件](#前提条件)
– [参考サイト](#参考サイト)
– [構成図](#構成図)
– [フォルダ構成](#

元記事を表示

AWS CDK(Typescript) で LambdaEdge を使う

# 想定

1. クロスリージョンスタック(複数リージョンのスタックを連携)
2. [NodejsFunction](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs.NodejsFunction.html)を使っている(ts で書いたハンドラーをそのままデプロイできる construct)

# 結論

“`cdk.ts
#!/usr/bin/env node
import * as cdk from “aws-cdk-lib”;
import “source-map-support/register”;
import { LambdaEdgeStack } from “../lib/lambda-edge-stack”;
import { SampleStack } from “../lib/sample-stack”;

const app = new cdk.App();

const account = process.env.CDK_DEFAULT_ACCOUNT;

exp

元記事を表示

ねえ、みんな幸せ?~ハピネススカウターを使わせていただいてカスタムした~

発端はこちら

https://qiita.com/keeey999/items/7ce7c4bc342ca2ec7319

うお~つくってみてえ~と思いきっかけを待っていましたが、なかなか~~余興を頼んでくれる友人の調達が難しく~~そのタイミングがなく時が経ってしまっておりました。
実際作るとなってもAWSもLINE BotもPythonも触ったことがないのでハードル高すぎよな~なんて思ってました。

その2年後、独自で作成し解説記事を投稿してくださった神が現れます

https://qiita.com/ymd65536/items/f1d50596cdd1d76d1c7b

しかし自分が余興を頼まれることもなく時は過ぎ、ひょんなことから自分の式(格式ばったものでないですが…)を開催することになりました。
久しく開発もしていなかったですがこれはやるしかないなと、重い腰を上げました。

# 準備編

基本は上記記事を参考に作成し、不明点はChatGPTに質問しながら進めました。
ChatGPTがなかったら諦めてたと思います、わからなすぎですAWS。
PythonもPHPと似てるらし

元記事を表示

Step FunctionでLambdaでスポットリクエストを実行し、ElasticIPを付け替える(EC2スポットインスタンス自動化5)

# 背景(再掲)
個人向けに最低費用で運用するため、Ec2をスポットインスタンスで使用しているが、時々スポットリクエストが中断される。その都度、再度スポットリクエストで立ち上げなおしているが、この処理を自動化したい。

# 大まかな流れ(再掲)
スポットインスタンスの中断はイベント通知されるので、それをトリガとして、立ち上げ処理を行う。

全体の流れは第1回参照。本記事はスポットリクエストの中断イベントから対象の情報を取得する部分が対象。

# 記事の全体
1. [AWS BackupでEC2のAMIが作成されるので、その最新のAMI IDをイベントから取得してParameterStoreに登録する。](https://qiita.com/silv224/items/0c1d157d34cd8ffb651b)
1. [AWS Lambda(python)でLINEへ通知する。](https://qiita.com/silv224/items/37453c8e7401f3a77d5f)
1. [AWS Lambda(python)でEC2スポットリクエストを実行する。](https://

元記事を表示

AWS Lambda(Python,boto3)でElasticIPを付け替える(EC2スポットインスタンス自動化4)

# 背景(再掲)
個人向けに最低費用で運用するため、Ec2をスポットインスタンスで使用しているが、時々スポットリクエストが中断される。その都度、再度スポットリクエストで立ち上げなおしているが、この処理を自動化したい。

# 大まかな流れ(再掲)
スポットインスタンスの中断はイベント通知されるので、それをトリガとして、立ち上げ処理を行う。

全体の流れは第1回参照。本記事はスポットリクエストの中断イベントから対象の情報を取得する部分が対象。

# 記事の全体
1. [AWS BackupでEC2のAMIが作成されるので、その最新のAMI IDをイベントから取得してParameterStoreに登録する。](https://qiita.com/silv224/items/0c1d157d34cd8ffb651b)
1. [AWS Lambda(python)でLINEへ通知する。](https://qiita.com/silv224/items/37453c8e7401f3a77d5f)
1. [AWS Lambda(python)でEC2スポットリクエストを実行する。](https://

元記事を表示

Lambda(python)でEC2スポットリクエストを実行する(EC2スポットインスタンス自動化3)

# 背景(再掲)
個人向けに最低費用で運用するため、Ec2をスポットインスタンスで使用しているが、時々スポットリクエストが中断される。その都度、再度スポットリクエストで立ち上げなおしているが、この処理を自動化したい。

# 大まかな流れ(再掲)
スポットインスタンスの中断はイベント通知されるので、それをトリガとして、立ち上げ処理を行う。

全体の流れは第1回参照。本記事はスポットリクエストの中断イベントから対象の情報を取得する部分が対象。

# 記事の全体
1. [AWS BackupでEC2のAMIが作成されるので、その最新のAMI IDをイベントから取得してParameterStoreに登録する。](https://qiita.com/silv224/items/0c1d157d34cd8ffb651b)
1. [AWS Lambda(python)でLINEへ通知する。](https://qiita.com/silv224/items/37453c8e7401f3a77d5f)
1. [AWS Lambda(python)でEC2スポットリクエストを実行する。](https://

元記事を表示

AWS Lambda(python)でLINEへ通知する (EC2スポットインスタンス自動化2)

# 背景(再掲)
個人向けに最低費用で運用するため、Ec2をスポットインスタンスで使用しているが、時々スポットリクエストが中断される。その都度、再度スポットリクエストで立ち上げなおしているが、この処理を自動化したい。

# 大まかな流れ(再掲)
スポットインスタンスの中断はイベント通知されるので、それをトリガとして、立ち上げ処理を行う。

全体の流れは第1回参照。本記事はスポットリクエストの中断イベントから対象の情報を取得する部分が対象。

# 記事の全体
1. [AWS BackupでEC2のAMIが作成されるので、その最新のAMI IDをイベントから取得してParameterStoreに登録する。](https://qiita.com/silv224/items/0c1d157d34cd8ffb651b)
1. [AWS Lambda(python)でLINEへ通知する。](https://qiita.com/silv224/items/37453c8e7401f3a77d5f)**←今回の内容**
1. [AWS Lambda(python)でEC2スポットリクエストを実行する。

元記事を表示

Lambda(python)でAWS Backupの最新イメージ(AMI)情報をパラメータストアへ登録する(EC2スポットインスタンス自動化1)

# 背景
個人向けに最低費用で運用するため、Ec2をスポットインスタンスで使用しているが、時々スポットリクエストが中断される。その都度、再度スポットリクエストで立ち上げなおしているが、この処理を自動化したい。

# 大まかな流れ
スポットインスタンスの中断はイベント通知されるので、それをトリガとして、立ち上げ処理を行う。

### ①普段の処理

1. 起動時に使用するAMIの最新IDを取得しておく。
1. バックアップ(AWS Backup)でAMIが作成された際、CreateImageイベントが発生。
1. EventBridgeでイベントを拾い、Lambda関数にて該当のAMIのIDを取得し、ParameterStoreへ保存しておく。

### ②中断イベント発生時の流れ

1. スポットインスタンスの中断イベントが通知される。
1. EventBridgeでイベントを拾う。
1. イベントに連動して、Step Functionsへ連携。
1. Step Functions内で以下の流れを作る。
1. ParameterStoreから最新のAMI IDを

元記事を表示

Lambda関数をローカル実行時に発生した「Error: Running AWS SAM projects locally requires Docker. Have you got it installed and running?」を解決する方法

ローカル環境からAWS Lambda関数を動作テストしようとして際、エラーが発生したのでその解決策を紹介します。

# 環境
– mac(intel)
– vscode
– docker
– aws-sam-cli

# 状況
“`
$ sam local invoke -e イベントファイル名 実行したい関数のID
Error: Running AWS SAM projects locally requires Docker. Have you got it installed and running?
“`

# エラー内容
AWS SAMローカル実行機能を使用するにはDockerが必要で、インストールされていないか、実行されていないというエラー

# 解決方法
## 1.Dockerインストール
そもそもDockerがインストールしてない場合は、公式サイトからダウンロードしてインストールしてください。

## 2.Docker起動
Dockerアプリケーションを起動状態にしてください。

## 3.シンボリックリンクを利用
私はこれで解決しました。
“`
sudo ln –

元記事を表示

[Lambda] go1.xからprovided.al2へのマイグレーション

先日、LambdaのRuntimeに関する通知がありましたね。
現在関わっているプロジェクトでは、SAMやServerlessFrameworkを活用しています。
年末の提供終了に合わせてRuntimeを変更していきます。

https://aws.amazon.com/jp/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/

## 何が起こる?
届いたメールによると…

– 2023年12月31日
– AmazonLinuxAMIのメンテナンスサポート終了
– Lambdaでの Go 1.x ランタイムのサポート終了
– provided.al2 ランタイムを使用してGo言語をサポート
– provided.al2 ランタイムを使用すると、AWS Graviton2 プロセッサのサポート
– より小さなデプロイパッケージとより高速な関数呼び出しパスによる効率的な実装

## 対応

元記事を表示

【AWS】DynamoDB Streamのオススメの使いかた

# はじめに
髙橋愛理です! :frog:
AWSサーバーレス開発のチームリーダーやってます。

AWSを代表するNoSQL、DynamoDB。
現在行っている開発では、こいつを使ってサーバレス開発を行っています。

今回は、私が実際開発して感じた、DynamoDB Streamのメリット、デメリット、使用方法などをまとめてみました。

# DynamoDB Streamとは
DynamoDBは、AWSを代表するNoSQLです。
DynamoDBには、DynamoDB Streamという機能があるのですが、これは、**DynamoDBにデータの更新があった際、Lambda関数を起動して非同期で処理を行うことができる**というものです。

DynamoDB Streamで起動したLambda関数では、INSERT(作成)、MODIFY(更新)、REMOVE(削除)のイベントと、新旧のデータを受け取ることができます。

# メリット
私的に、DynamoDBを使用する一番のメリットって、**コンポーネント間連携に使える**ことと、**データ変更時に一律で行いたい処理を一か所にまとめること

元記事を表示

【データ基盤構築/AWS】AWSのEventBridgeでDMSが停止した時にSlackに通知を送るシステムを作る方法

# 今回の課題
AWSのDMSが停止してしまった時に、
Slackにアラート通知を飛ばすシステムの構築を行うことにした。

AWSのLambdaとEventBridgeを使用した。

## 実装手順
以下の手順で、DMSが停止してしまったときにSlackに通知が飛ぶように実装した。

### 1)Lambda関数を作成
#### 1)-1.Slackに通知を飛ばすコードを作成する
“`lambda_function.py
import json
import requests
import os

def send_slack_alert(type, title, text):

alert_channel = “[アラートを飛ばしたいSlackチャンネルのURLの末尾の10桁の文字列]”
mention_text = “”
alert_color = “#F30100”
WEB_HOOK_URL = “https://hooks.slack.com/services/*******************”

requests.post(

元記事を表示

OTHERカテゴリの最新記事