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

Lambda関連のことを調べてみた2022年08月31日
目次

ラズパイとAWS IoTを使った見守りシステム自作で学んだこと(9)S3にuploadした映像の視聴用web page

[(6)稿目](https://qiita.com/nsaito9628/items/8126fda477d61d542414)でuploadしたmp4ファイルの表示部になります。

mp4ファイルを閲覧する為のweb page Projectの構成と、ラズパイでイベント録画してS3にuploadした後にmp4ファイルを処理するLambda関数を説明します。

## web page Projectの構成
web page Projectの[リポジトリー内格納場所](https://github.com/nsaito9628/Monitoring-system-with-Raspberry-Pi-and-AWS)は/Monitoring-system-with-Raspberry-Pi-and-AWS/templateになります。

CloudFrontオリジン(兼mp4のupload先)として構築した[S3バケット](https://qiita.com/nsaito9628/items/312112486ce61ba396ae#origins3bucket)のrootにはindex.

元記事を表示

【AWS】LocalStackを使ってみる

2022/7/13にAWSの[LocalStackがバージョン1.0に到達してGAになった](https://localstack.cloud/blog/2022-07-13-announcing-localstack-v1-general-availability/)ので、簡単に使い方を確認したいと思います。
この記事では環境構築にコンテナを利用します。Docker, Docker Composeをご準備ください。

# 環境

OSはWindows11です。
(Docker, Docker Composeが使用できるならば、その他OSでも動作するように考慮しているつもりですが、動作確認ができていないです…。)
![env.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1166959/83061e13-d52e-ed8a-4697-311324f886fb.png)
“`bash:Windows
$ ver
Microsoft Windows [Version 10.0.22000

元記事を表示

コピペでできるCloudWatch LogsからSlackに通知するコード

Node.jsだと、レイヤーを導入するのが面倒なので、今回はPythonで。

1. 環境変数`WEBHOOK_URL`にSlackから生成したWebhook URLを設定してください。
2. トリガーのソースはCloudWatch Logsで、ロググループを指定しておきます。

従来のSlack Appを使わないIncoming Webhookはレガシーな方法のようです。1Webhook/チャンネルになったんですね。

https://qiita.com/kshibata101/items/0e13c420080a993c5d16

なので、今回はSlack Appを使うことを前提にしたコードです。
CloudWatch LogsのPayloadを全て出力するようになってます。

“`python
#!/usr/bin/python3.9
import urllib3
import json
import base64
import gzip
import os

http = urllib3.PoolManager()

def lambda_handler(event, con

元記事を表示

AWS Lambda を時刻起動する

EventBridgeの時刻起動ルールを作成して、指定時刻にAWS Lambdaを起動する方法を解説します。

## Lambda関数のアクセス権限を設定する

EventBridgeからLambda関数を起動できるよう、アクセス権限を設定します。

– [設定]から[アクセス権限]を選択します。

![image](https://user-images.githubusercontent.com/38905609/187126403-5a8ef77e-653d-4513-9d22-b136be7c2a3d.png)

– [アクセス権限を追加]を選択します。

![image](https://user-images.githubusercontent.com/38905609/187126658-ebfdeaea-677f-4eca-af19-14645c9b3346.png)

– ポリシーステートメントを指定します。

1. [AWS]のサービスを選択
1. サービスに[EventBridge]を選択
1. ステートメントIDは任意のIDを指定
1. プリンシパルは初期表示値

元記事を表示

Pulumiでチュートリアルを実施する。(APIGateway×Lambda)

### はじめに
AWSのプロビジョニングツールとして有名なPulumi。最近話題になってきているので、チュートリアルを実施します!!

### Pulumiとは
AWSやGCP、Azure等をデプロイするIaCツール。TerafformやCloudFormationが有名ですが、IaCツールとしてPulumiも有名です!!
![スクリーンショット 2022-08-28 21.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/2481e794-92be-f06e-b8a8-79ed00119463.png)

### 前提条件
AWS profileを事前に設定しておいてください。

### プロジェクトのセットアップ

“`shell:ディレクトリ構成
~/develop/purlumi/pulumi-lambda$ tree -I node_modules
.
├── Pulumi.dev.yaml
├── Pulumi.yaml
├── index.js
├── pack

元記事を表示

AWS lambda nodeをローカルでdocker開発して、イメージデプロイする

https://aws.amazon.com/jp/builders-flash/202103/new-lambda-container-development/?awsf.filter-name=*all

AWS lambdaの開発にSAMを使用していましたが、ローカルでdocker開発して、そのままデプロイできるようになったらしいので手順の確認。

dockerのイメージ生成→AWSのECRリポジトリにPUSH→AWS Lambda にECRからデプロイ。

https://qiita.com/rei-ta/items/e86546130d157561ba8e

Dockerfile
docker-compose.yml
package.json
app.js

Dockerfile

“`
FROM public.ecr.aws/lambda/nodejs:16
COPY app.js package*.json ./
RUN npm install
CMD [ “app.lambdaHandler” ]
“`

ecrイメージでのdockerを作成。public.ec

元記事を表示

AWS Lambdaに Funtion URLsを設定する

AppSyncから、cloudsearchを叩きたかったので、Lambdaに Funtion URLsを設定して、httpリゾルバで取得する形に。Lambdaリゾルバよりテストなどがしやすそうだったので。

ローカルでcloudsearchのLambda作成する形は以下。
https://qiita.com/rei-ta/items/e86546130d157561ba8e

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/2a6a1f95-3dc8-90a9-1745-5e6fa111b27f.png)

configurationから、Function URL (Lambda Function作成後の設定も可能)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/927cf5d2-ca9c-5536-2f11-ea9c0a4c45f9.png)

アクセス制御の

元記事を表示

コンテナイメージから作るLambdaをSAMでデプロイ

# はじめに

以前、Microsoft365の監査ログを取得するLambdaをコンテナで作りました。

https://qiita.com/a_b_/items/84d6ae3cf8a21b8b332c

これを以下のページを参考に、Cloud9上でAWS SAM CLIでのデプロイにチャレンジしてみました。

https://aws.amazon.com/jp/builders-flash/202107/new-lambda-container-development-4/?awsf.filter-name=*all

# 所感

– AWS SAM CLIを用いると、デプロイまでの手間が減る
– 特に、ECRの作成や管理を考えなくてよいのが大変助かる
– 上記ページでは作っていますが、現時点では不要のようです
– (Cloud9上の)AWS Toolkitのウィザードでも試しましたが、launch.json を使ったデバッグ実行がうまくいかなかった
– AWS SAM CLIのナビゲーションで十分便利なので、GUIのウィザードを使わなくてもよいかも

元記事を表示

FastAPI with Lambda + API Gatewayでサーバレスアプリケーションの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556658/6ec16fbf-ad49-b975-cf6a-642ab0476747.png)

## はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています!

技術の進歩は目覚ましいので、置いてかれないように新しい技術のキャッチアップにもいそしんでいます!
本記事では、FastAPI with Lambda + API Gatewayでサーバレスアプリケーションを作成する方法をご紹介します。
サーバレスアプリケーションには
– サーバーの管理が不要
– 使った分だけの支払いで済む
– 柔軟なスケーラビリティ

といったメリットがあり、新規サービスのプロトタイプ作成に向いていると思います。

本記事の手順通りに手を動かすと、さくっとREST APIを作れるようになりますよ!

## やりたいこと
FastAPIで作成

元記事を表示

Amazon S3 → Amazon SQS → AWS Lambda を連携する

# はじめに
S3のイベントをSQSキューに入れて、Lambdaに渡すまでの操作をまとめました。
![Screen Shot 2022-08-25 at 22.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/d23f455f-42ab-5fd7-4bf8-13b7129ad88a.png)

# やること
– Lambda関数の作成 → SQS権限設定
– SQSキューの作成 → Lambdaトリガー設定
– S3バケットの作成 → イベント通知設定

# 1. Lambda関数の作成

まずはLambda関数を作成します。

関数名:test-202208(任意のもの)
ランタイム:Python3.9

その他はデフォルト設定のまま「関数の作成」
![Screen Shot 2022-08-25 at 20.29.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1809963/0d5abe

元記事を表示

C#でラムダ式を書く

# 1. はじめに
* C#でラムダ式を書く方法を1から整理する。
* まずはラムダ式を使用しない書き方から初めて、最終的にラムダ式に書き換えるまでを行う。
* ラムダ式をいきなり覚えようとすると難しが、過去の遍歴を見ると理解しやすいと思う。

# 2. ラムダ式を使用しない場合
サンプルとして配列にある文字に対して、指定の長さのものだけを抽出する。

“`c#
// メイン処理
var values = new string[] { “1”, “22”, “333”, “4444”, “55555” };
var result = GetValue(values, 4);
Console.WriteLine(string.Join(“,”, result));

// メソッド
private string[] GetValue(string[] values, int len)
{
var result = new List();
foreach (var val in values)
{
if (val.Length >=

元記事を表示

保存したデータの分析

# データ分析との連携
S3内のオブジェクトやオブジェクトの中身に対し、**データ分析**を行う機能がある。
**S3 Select**と**Amazon Athena**は、CSVやJSONのような構造化されたテキスト形式のデータに対して、SQLのSELECT文を実行する**クエリ機能**。
**Amazon Redshift Specutrum**も同じ機能だが、大量のデータを処理できる。
# データ分析サービス
Amazon S3には、ログやIoT機器から収集したデータなど、後に分析したいデータも含まれるので、データ分析サービスとの連携が用意されている。
S3 SelectとAmazon Athenaは、S3バケットに格納したデータに対して分析するサービス。一方で、Amazon Redshift Spectrumは、S3バケット以外に置いたデータも分析できる。
## S3 Select
S3 Selectは、S3の機能で保存されている1ファイルのデータに対して、SQLを使って、集計や検索ができる機能。
CSVファイルやJSONの他、ログに使われるApache Parquetフォー

元記事を表示

なるべく手間をかけずにサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする(ログイン画面も自作しないパターン)

# 経緯
[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)でCognitoユーザーがAWSマネジメントコンソールにログインできるようにしましたが、ログイン画面さえも自作しないでできることが分かったので書き残しておきます。

具体的にはCognitoユーザープールのホストされたUIを使います。
ホストされたUIでは不満がありログイン画面のデザインや動きを自作したい場合は[前回の記事](https://qiita.com/yusuke-takagi/items/9e914c43cc4b80055fb7)のパターンやウェブアプリを自作すると良いでしょう。

# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない
– 運用チーム

元記事を表示

CloudFront導入とCognitoで認証した話

株式会社クラシコム テクノロジーグループの冨田です。

北欧、暮らしの道具店とクラシコムのコーポレートサイトにCloudFrontを導入しました。以前から画像についてはCloudFrontやimgixを利用し配信していました。今回はサイト自体を配信するようにしました。

# 背景

2022年8月に東証グロース市場へ上場しました。

– メディアへの露出が増えたため、突発的なアクセスがきても耐えられるようにしたい。
– 既に導入していた[CloudFront Security Savings Bundle](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/savings-bundle.html)でコストを抑えたい。

という動機からCloudFrontを導入しました。

# やったこと

## Cognitoによる認証

クラシコムの検証環境(ステージング環境)はALBでCognitoによる認証をかけており、社員のみアクセス可能にしていました。今回ALBの前段にCloudFrontを導入し

元記事を表示

AWSで遊ばない時間はNATゲートウェイを削除したい

# 背景
[AWSではじめるインフラ構築入門](https://www.seshop.com/product/detail/23455)を読んでAWSの再入門に励んでいるのですが、
NATゲートウェイのコストは馬鹿になりません。1円2円を求めてポイ活をしている私にとっては耐え難いレベルです。

使っている時間に課金されてしまうのは仕方ないとして、使っていない時間はNATゲートウェイを削除しておきたいものです。
ところがNATゲートウェイはルートテーブルなどの周辺機能にも影響を及ぼしており、手動で削除/起動するのは結構手間です。

そこで**AWS Lambda**を使ってNATゲートウェイの削除/起動を自動化してみます。

# 要件
要件は以下の通りです。
– NATゲートウェイの削除/起動や周辺機能の設定変更を自動化したい。
– 特定の時刻や曜日に自動起動するのではなく、オンデマンドで実行したい。手動でボタンをポチッとするイメージ。

# 前提
Lambda関数のランタイムは「Python 3.9」を選んでいますが、バージョンは大きな問題ではないでしょう。
CloudFormatio

元記事を表示

AWS Lambdaからteamsへ送信してみる

# 背景
* 新プロジェクトに夜間のバッチ処理の開始の時に、teamsチャネルへ送信する
* バッチ処理失敗の時も送信する

# 調査

* [HTML を使用してカードを書式設定する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/task-modules-and-cards/cards/cards-format?tabs=adaptive-md%2Cconnector-html#format-cards-with-html)
* [メッセージを作成して送信する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL)

# webhookを作成
* 参照: [送信 Webhook を作成する](https://docs.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-conn

元記事を表示

Serverless frameworkでGoをデプロイしたらPath errorが発生する

# はじめに

この記事は2022年8月にまとめていた「細かいつまずいたことをメモしておく(8月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

https://blog.mmmcorp.co.jp/blog/2020/06/07/aws-lambda-with-golang-gin/

https://zenn.dev/sti320a/articles/f60aa3ef305075

この記事をみて設定をしていたがいざデプロイすると以下のエラーが発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/982f825a-772f-921b-3286-d61806242e96.png)

# 解決方法

“`Makefile
build:
go mod download
env CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=”-s -w” -o bi

元記事を表示

なるべく手間をかけず(Amplifyも使わず)にサーバーレスでCognitoユーザーがAWSマネジメントコンソールへログインできるようにする

# 追記
この記事を書いた後、さらにログイン画面(HTMLをS3でホスティング)の自作も不要なことが分かったため、以下の記事を書きました。
CognitoでホストされたUIが許容できる場合はさらに簡単に実現できます。
https://qiita.com/yusuke-takagi/items/37a51b453673b77bda23

# 経緯
タイトルの通りで、私の関わっているサービスで最近わりと切実に実現する必要があったのですが、ググってみてもそのものズバリの情報がなかなか見当たらず、調査にけっこう時間がかかってしまったので他の方々や後の自分が迷いなく実現できるように書き残しておきます。

もっと良いやり方があるよという方は教えてください。

# 前提条件
– ユーザーにAWSマネジメントコンソールを使わせたい
– ユーザーはCLIでなく、ブラウザ(ログイン画面)でログインさせたい
– 事情があってAWS SSOに連携するIdPを使えない、使わない
– ログイン画面のためだけにウェブアプリを作りたくない
– サーバーの運用はなるべくしたくない
– IAMユーザーは発行したくない(

元記事を表示

Nuxt.js(3) で作ったアプリをAWS Lambda 1つで公開する

# 備忘録

“`nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: “aws-lambda”,
serveStatic: true,
},
})
“`

Lambda Functions URLを使用する
APIGateWayでもできるらしいのだが、自分の場合上手くいかなかった。
※.output/public/_nuxt配下のアセットの公開がAPI GateWayの場合UrlにStageの値が入る為、上手く折り合いをつけれなかった
解消出来たらよりいいのになと思っています。

https://github.com/nuxt/framework/issues/3586

“`serverless.yml
service: nitro-sample

provider:
name: aws
runtime: nodejs16.x
region: ap-northeast-1

package:
patterns:
– “!**”

元記事を表示

serverless frameworkで作成したAPIでLambdaに送信した値を取得。

# はじめに
Lambdaの引数から値を受信する方法を記載していく。
# メイン
dynamoDBになんやかんやするときに、使えるので書いてみた。
## パスから取得する
serverless frameworkでGETメソッドのAPIを作成するソースが以下になる。
API作成時のパスは、「https://{APIのId}.execute-api.{Resion}.amazonaws.com/dev/get/{id}」 のようになり、{id}の部分に渡したい値を書く。

“`functions.yml
function:
get:
handler: get.get
events:
– http:
path: get/{id}
method: get
# 統合サービスをLambdaにする
integration: lambda
“`
取得方法は、
“`get.py
def get(event, context):
# pathに{}で指定した値が入っている。
path = event[“pat

元記事を表示

OTHERカテゴリの最新記事