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

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

Lambda で CloudWatch Logs のログを自動で S3 にアーカイブする、をちょこっと便利にした。

AWSで各種クラウドサービスのログを、CloudWatch Logで保管することができます。CloudWatch Logではログの保管日数を指定することができます。手動であればS3へログをエクスポートすることもできます。S3も保管したデータの保管日数を指定することができます。

となると、以下のような処理を自動で実装したいもの。
・各種ログをCloudWatch Logに保管する。
・ある程度の日数が経過したら、S3にログをアーカイブする。古いログはCloudWatch Logから自動削除。
・必要なだけS3で長期保管する。必要な保管期間を過ぎたログは、S3からも自動削除。

しかし定期的に自動でS3へログをエクスポートする機能はありません。何度もググりましたが、皆さん同じ悩みをお持ちです(笑)

という事で、「CloudWatch Log」「S3」「エクスポート」「自動」といった用語でググれば、Lambdaで実装されている事例・記事が多く見つかります。本当に助かります。

# 【参考】
私がお世話になった記事です。

https://qiita.com/tamura_CD/items

元記事を表示

AWS Step Functions で簡易的なジョブ管理ステートマシンを作成してみる

AWS で簡易的なジョブ管理をしてみよう、という試みです。

# 概要

AWS 上でジョブ管理するにはどうしたら良い?という話がありましたので、自分なりに少し考えてみました。普通に考えれば、例えば以下のようになるかとおもいます。

* Cloud Watch Events、場合によっては Event Bridge を使ってジョブを起動する
* ジョブの流れは Step Functions で様々なフロー制御を組み込んで作成
* Step Functions から Lambda 関数、ECS RunTask、AWS Batch などを順次呼び出す
* ログは Cloud Watch Logs に格納
* 問題発生時には SNS から SES や Slack 連携などでアラートを発報する

ただですね、今回は以下のような制約をつけて考えてみました。

* 数人の小さなチームで、スケジュールがかなり厳しい中で開発する必要がある
* AWS に詳しいのは自分だけで、他のメンバーはこれから学ぶ必要がある

こういった状態ですと、いまから AWS を学んでもらうのは効率が悪いです。期間も短いこと

元記事を表示

LambdaでSecretsManagerからシークレット情報を取得してみた

# はじめに
Githubから流出したソースコードに認証情報が含まれていて
問題になったというセキュリティーインシデントを見かけることがあります。
ソースコード内には認証情報をベタ書きせずに扱う事が大切です。

Lambdaで認証情報を参照したい時のベストプラクティスとして
SecretsManagerから値を取得する方法があります。
ハンズオンとして行ってみたので記事に残したいと思います。

# 環境
Lambdaのランタイム:Python3.9

# SecretsManagerでシークレット情報を作成する

SecretsManagerでは目的に応じたシークレット情報の作成が可能です。
今回は汎用的に使用できるように「その他のシークレットタイプ」でユーザー名とパスワードを作成しました。

![スクリーンショット 2022-09-15 20.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242298/799c0ed3-2f56-be8c-a09d-8462878114e9.png)

元記事を表示

Node.jsランタイムのLambdaでNodeモジュールを使いたいときにやったこと

## はじめに
こんにちは。フリューでサーバサイド開発をしています、kitajimaです。最近CDKに入門しました。
弊チームでは先日、API Gateway + Lambdaの構成をCDKで構築し、APIを実装する機会がありました。その際Node.jsで書いたLambdaスクリプト単体をアップロードしたところ、`”Unable to import module”`が発生しました。
この記事ではその際対応したことを紹介させていただこうと思います。
同じようにNode.jsランタイムのLambdaを初めて構築してみたい方の参考になれば幸いです。

※本記事と同様の内容を弊社テックブログでも掲載しております。
https://tech.furyu.jp/lambda-node-modules/

## 環境
– AWS CDK v2
– CDK実装 TypeScript
– Lambdaランタイム Node.js 16.x
– Lambdaスクリプト実装 TypeScript

## 状況再現
そのときのインフラ構成の一部を再現したものはこちらです。Constructは`aws_lam

元記事を表示

スマートスピーカーを使って日々の健康状態を記録してみた

## はじめに
ウェアラブル端末はヘルスケア目的としても活用が可能で、利用者は睡眠や運動などのデータを連携アプリから確認して日々の健康管理ができます。

これらのデータに加えて、スマートスピーカーからも主観的な健康状態を記録し観察することで、もっと確実な健康管理ができるのではないかと考え、この仕組みを作ってみることにしました。

## 完成イメージ
決まった時刻になると、Amazon Echoが3つの質問を対話形式で行います。全ての質問に答えると、バックエンドのデータベースに回答した健康情報を登録します。
![完成イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506008/d5d50014-4281-5d85-0f57-9d7fe04c66a1.png)

## 概要
今回紹介するAlexaスキルを作るには以下の3つの実装と設定が必要です。
本記事では、初めてAlexaスキルを作成することを想定し、事前準備として必要なアカウント登録方法から順に記載していきます。

– Alexaスキルの設定

元記事を表示

EventBridgeとLambdaを使用したバッチ処理

## 概要

EC2インスタンス1台構成で動かしていたWebアプリを、AutoScalingを用いてEC2複数台で運用にするようにしました。
今までEC2インスタンス内にcronを仕込んで、日次や月次の定時処理を行わせていましたが、インスタンスが複数台になることで、バッチ処理が重複して行われるようになりました。

#### 構成図
[![Image from Gyazo](https://i.gyazo.com/bbd624f944a3e49a0fb81971c28fc4fa.png)](https://gyazo.com/bbd624f944a3e49a0fb81971c28fc4fa)

### 対応案

対応案として、ざっくり以下の二つがありました。

#### 案1
AutoScalingしないタスクサーバーを1台用意して、バッチ処理はその子に任せる。

#### 案2
インスタンス内のcron契機でのバッチ処理はやめて、EventBridgeを利用したLambda契機でアプリにリクエストを送りバッチ処理を行う。
リクエストはELBによりインスタンス1台に振り分けられるので、

元記事を表示

[AWS Lambda Powertools Python]API GatewayレスポンスのJSONシリアライズエラーに対応する

# 概要

[AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/) [^1] を使うとAPI Gatewayのリソースマッピングが直感的に記述できます。
また、dictなりlistなりをreturnしておけば良い感じのJSONテキストにしてくれる等、とても便利です。

[^1]: [AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/)

このレスポンスをJSONに変換してくれる部分で少し困ったので、対応した内容を記録します。

# 準備

AWS Lambda Powertools をインストールします

“`
$ pip install aws-lambda-powertools
“`

# サンプルハンドラーコード

リクエスト `GET /info` に対して、`name` と `created` 要素を返すシ

元記事を表示

.NET 6とVS CodeでAWS Lambdaする

## 前提
– AWS CLI設定済み

## 環境構築

### VS Code
– C# for Visual Studio Code
C#開発環境

### dotnet系
– .NET6 SDK
公式からインストーラー落としてきて入れる。
https://dotnet.microsoft.com/ja-jp/download/visual-studio-sdks

– lambda開発用のテンプレート
“`powershell
dotnet new -i Amazon.Lambda.Templates
“`

– デバッグツール
“`powershell
dotnet tool install -g Amazon.Lambda.TestTool-6.0
“`

– デプロイツール
“`powershell
dotnet tool install -g Amazon.Lambda.Tools
“`

## やってみる

### プロジェクト作成
“`powershell
dotnet new lambda.EmptyFunction –name MyFunctio

元記事を表示

LocalStack ローカル環境でAWSを使おう

# この記事は?
AWSのエミュレーションツール[LocalStack](https://github.com/localstack/localstack)を使って仮想のAWS環境を立ち上げ、その中にLambdaとS3をデプロイして動かしたときの備忘録

https://localstack.cloud/

# LocalStackとは?
Dockerコンテナ内でAWSのエミュレートし、その環境内にデプロイしたりできるツール
無料版では利用できるAWSサービスに制限があるものの、メジャーどころは大体抑えられている

:::note info
無料版で利用できるのは[このページ](https://docs.localstack.cloud/aws/feature-coverage/#aws-feature-coverage)にあるサービスのうち`(Pro)`がついていないもの
**Lambda**, **S3**, **DynamoDB**など主要なサービスはだいたい無料で使える
:::

https://docs.localstack.cloud/aws/feature-coverag

元記事を表示

Flutter × Firebase Cloud Messaging × AWS Lambdaでリモートプッシュ通知を送りたい(2022/08)

# はじめに
初投稿です。

Flutterでアプリ制作を行っていた際にプッシュ通知機能を実装しようとして色々調べた際、様々な情報が錯綜しており、どの記事が正しいのかが分からなくなって色んなことを試した結果、大口の沼にはまり込んでしまったため、自分用の備忘録として残します。

同じ問題に直面している人の助けとなれば幸いです。

# 前提条件
リモートプッシュ通知を送る方法は様々あると思いますが、今回はプロジェクトの要件として利用していたAWS Lambda(以下Lambda)からFirebase Cloud Messaging(以下FCM)を利用してAndroid端末にプッシュ通知を送っていきます。今回は、LambdaはNode.js(TypeScript)で実装します。

iOS端末にプッシュ通知を送る際は、Appleの開発者サイトやXCodeで追加設定が必要になるのですが、今回は割愛します。

この記事では以下のことを行っている前提で説明していきます。
– AWSアカウント・Firebaseアカウント作成済み
– Flutterプロジェクト作成済み

# 事前準備
### Fir

元記事を表示

AWS Lambdaとは

# AWS Lambdaとは
AWS Lambdaは、**データやリクエストのリアルタイム処理やバックエンドの処理を、自動的に実行する仕組み**。このような処理のために専用のサーバーを準備や管理する必要がない。必要なイベントに応じて自動実行される。常駐サーバーとは異なり、プログラムの実行時のみに課金される。
**Lambda関数**と呼ばれる形式の関数を用いますが、これは新しい言語ではない。
よく知られるプログラミング言語で書いたコードをもとに「Lambdaコンソール」などを用いてグラフィカルに作成できる。使える言語は、java,C#,Python,Ruby,Node.js,Goなどで、よくある目的のためのテンプレートも揃っている。
Lambda関数は、Lambdaサービスに保存される。
何かのトリガーで、特定のAWSリソースにおいて実行される。有名な例は、S3バケットに画像が置かれると、サムネイル実行関数が呼び起こされ、サムネイル作成関数が呼び起こされ、サムネイルを自動的に作成する例。
# Lambdaの用語
Lambdaは、プログラムのコードをLambdaサービスにアップロードして

元記事を表示

はじめてのAWS Lambdaを用いたLINEbot作成!

## 概要

サーバーレスコンピューティングを実現するAWSサービスであるAWS Lambdaを勉強するため、LINEbotアカウントを作成するために使うMessaging APIとHTTPリクエストを送るためのPythonプログラムを用いて、簡単なLINEbotシステムの構築を行います。

## AWS Lambda

一般的に、インターネット上でプログラムを実行させるためにはインターネット上にサーバーを準備し、実行環境やプログラムを用意する必要があります。この場合、プログラムを実行するためにサーバー構築やインフラに関する知識や操作の手間が必要です。

これに対し、サーバーやインフラを準備する事なくプログラムをデプロイし実行することを**サーバーレスコンピューティング**と呼ばれています。AWS Lambda(ラムダと呼びます)はサーバーレスコンピューティングを実現するAWSのサービスです。AWS Lambdaを利用することで、エンジニアはプログラム開発のみに専念し、インターネット上でプログラムの実行が可能になります。

### AWS Lambdaのメリット
Lambdaの利用によ

元記事を表示

Lambdaを利用してIAMユーザ作成を自動化してみた

AWSのサーバレスアーキテクチャを実際に触ってみたくて手始めにLambdaを用いてみることにしました。

【やりたいこと】
![実現イメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2840619/3d24e664-fae4-50d0-74da-c1ca12dad527.jpeg)

ExcelベースのIAMユーザの登録申請書の内容を基に申請書をS3へアップロードしたらLambdaが実行されて申請書に記載されているIAMユーザを自動作成する。

【使用環境】
boto3
Python3.9
pandasライブラリ

【実現方法】
Excelベースでの読み込みは私には難易度が高かったのでcsv形式に変換するVBAを作成(この部分の詳細は割愛)

csv形式で以下のフォーマットで記載することに決定
1カラム目,2カラム目,3カラム目
IAMユーザ名,IAMグループ,メールアドレス

IAMユーザを作成する際のパスワードはセキュリティの観点からランダムに自動生成したいです。

さて、方針が固まっ

元記事を表示

「terraformを利用してVPC内のlambda起動→VPC外(パブリック)に戻す」の注意点

結論:VPCを「なし」に設定する(できない場合がある) or 再作成してください
vpc_configを消してterraform applyしようとすると・・・こんなエラーが
“`
error deleting Lambda ENIs using Security Group (sg-XXXXX): error waiting for Lambda ENI (eni-XXXXX) to become available for detachment: timeout while waiting for state to become ‘available’ (last state: ‘in-use’, timeout: 45m0s)
“`
手動は良くないですが色々手動でいじって以下のことがわかりました

1.ENIはセキュリティグループが利用していて削除できない
2.セキュリティグループはこんなエラーで削除できない
“`
3 のネットワークインターフェイスが関連付けられています。 ネットワークインターフェイスを削除するか、異なるセキュリティグループに関連付ける
“`
![i

元記事を表示

ServerlessFrameworkでAPI GatewayとLambda資材をgit管理する

# はじめに

– プロジェクト名はとりあえず「test-lambda」にする
– AWSでLambdaに設定するロールを作成する
– 下記を参考にServerlessFreamworkのインストールとAWSの設定をする

https://www.serverless.com/framework/docs/getting-started

https://www.serverless.com/framework/docs/providers/aws/guide/credentials

## やること
– ディレクトリ構成を参考に必要なものを配置する
– serverless.ymlを書く
– 「sls deploy」でデプロイを行う
– デプロイに問題なければgitに入れて終わり

## ServerlessFreamworkのディレクトリ構成
“`
test-lambda
├─lambda(このディレクトリ下にlambdaの各関数を配置)
| ├─user
| | └─index.js
| └─user-regist
| └─index.js
├─model(APIGatew

元記事を表示

SAMのAutoPublishAliasでバージョンがうまく発行されないときの対処法

# はじめに
みなさま,こんにちは.
[株式会社オプティマインド](http://www.optimind.tech)にて,GISエンジニアをしている@tkmbnです.

# 概要
SAMを用いたLambdaのデプロイ時にAutoPublishAliasを利用すると,うまくバージョンが発行されないときがありました.
対処法をいろいろと探っていたところ,良さそうな対処法を見つけたので,ご紹介いたします.

# なぜ書いたか
SAMを用いて,Lambdaをデプロイしたが,以下のパターンのときに,うまくバージョンが発行されませんでした.
– Layerの中身のみ変更
– Lambdaの環境変数のみの変更

手動で,バージョンを発行し,エイリアスに設定をすれば,やりたいことはできるんですが,
CanaryDeployが適用できないのが課題でした.

# 本題
## 現状の環境
– SAM テンプレートの内容
– API Gateway
– Lambda (複数)
– 複数Lambda内で共通で利用するものを集めたLayer
– 環境

元記事を表示

StepFunctionsでLambdaの並列処理をしたかった話

### やりたいこと
1. DBに保存されているトークンを取得し、トークンごとに複数の外部APIを実行したい。
1. APIの実行でエラーとなった場合に全体の処理を止めたくない。
#
### StepFunctionsにおける並列処理
StepFunctionsには並列処理を行うTypeとして、ParralelとMAPがあります。

Parralelは同じ入力を使用してブランチごとに定義した処理を実行するのに対し、MAPは配列の要素ごとに同じ処理を実行するという違いがあります。

[Parallel](https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/amazon-states-language-parallel-state.html)
[MAP](https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/amazon-states-language-map-state.html)

今回はParallelとMAPを組み合わせて使うことにしました。
#
###

元記事を表示

API Gatewayを環境構築しながら学ぶ

「APIを実装する」ということが良く分からなかったため
一度環境構築してみることで理解を深めた際のメモです。
AWSの無料利用枠で試してます。
– **最終目標**

AWS API Gateway と AWS Lambda で `Hello Nodejs!` を出力する

## 1. Lambda関数の作成
API Gatewayを作成する場合、API Gatewayのバックエンドを指定しないといけません。
そのバックエンドをLambda関数としたいので、その関数※を作成します。
※API Gatewayからのデータを受け取り、そのまま返すLambda関数

– 関数の作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665304/6ecae22d-8e8b-30a2-1400-0a27e6efaaa6.png)

> – apiGateWayTestという関数名で作成
![image.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

AWS LambdaでStableDiffusionを動かしたい

# はじめに
StableDiffusionが衝撃的です。
使用するにはGPUが必要という要件があったためAWS AWS SageMakerで動かしていたのですが、色々と試すのにGPU付きのインスタンスは費用が若干気になるところ。
ですが先日、CPUのみで動作する「stable_diffusion.openvino」が公開されました。
動作要件を見ると「AWS Lambdaでも動きそう?」→「動いた!」ので、一先ずここに共有します。

本記事は以下に示す「stable_diffusion.openvino」をAWS Lambdaに移植したものです。

https://github.com/bes-dev/stable_diffusion.openvino

# 作成した画像サンプル
「墨田川」と「桜」のキーワードで作成した画像です。
AWS Lambda上で作成しましたが、1枚作成するのに4分前後かかっています。
![sd_2022-09-02-09-12-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

AWS CLI による Lambda Layer (Python) 作成・公開手順

# 手順

`python` という名称でディレクトリを作成します。(`python` でないと Lambda 上でライブラリをインポートできません)

“`sh
% mkdir python
“`

ターゲットディレクトリを `python/` に指定して、利用したい任意のライブラリをインストールします。

“`sh
% pip install -t python/ requests
“`

zip で固めます。

“`sh
% zip -r layer.zip python
“`

S3 上にアップロードします。`${BUCKET_NAME}` およびプロファイルは自身の環境に合わせて読み替えてください。

“`sh
% aws s3 cp layer.zip s3://${BUCKET_NAME}/layer.zip –profile main
“`

AWS CLI コマンド `publish-lambda-layer` [^1] を利用して Lambda Layer を公開します。

“`sh
% aws lambda publish-layer-ver

元記事を表示

OTHERカテゴリの最新記事