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

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

SESで受信したメールを、Lambdaで適切に変換し、件名や本文を取得する

# はじめに

SESでメールを受信し、Lambdaを使用して、Dynamodb等にメール情報を書き込む、という処理がありました。
SESのメール受信機能は、リージョンが限られており、また、メール情報を適切に変換し、件名や本文を取得するのに苦労したため、その点を中心に記載します。

![スクリーンショット 2022-05-25 0.18.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/0e072ab6-64c3-ede6-2d3d-290a4aa9707e.png)

# 事前構築
– Route53でドメインの設定済み。仮にドメインを`hoge.com`とします。
– 受信メールで使用するドメインは、今回、サブドメインを使用する想定です。`mail.hoge.com`
– 送信元は、Gmailを想定
– メールによって、MINEタイプの書き方が異なります。

# SESの受信メール設定
受信メールで使用するドメインは、`mail.hoge.com`です。

受信

元記事を表示

[AWS Puppeteer on Lambda ] ロングスクロールページをスクショする

## 背景
Lambda上でPuppeteerを動かして,
指定したWebページをスクショする機能がある.

Webページの中にはものすごく長いページ(ロングスクロール)が存在する.
このようなページをスクショしようとすると下記のエラーが発生して処理が終わる.

https://github.com/puppeteer/puppeteer/issues/5341

今回, Lambda上で動くPuppeteerにおいて,
これを乗り越えてものすごく長いページでもスクショができる方法がわかったので,
同じように長いページをスクショしたい勢に向けて贈る.

## 対応方法

### Lambdaのエフェメラルストレージを増やす

最近更新されたコメントによってエラーの詳細が明らかになった.

つまるところ, /tmpディレクトリの容量が足りてないらしい.
https://github.com/puppeteer/puppeteer/issues/5341#issuecomment-1118387787

Lambdaは最近, /tmpディレクトリの容量増やせるようになったので下記を参考に

元記事を表示

SNSに飛んできたアラートをTypetalkに投稿する

AWSでインフラ構築をしていて、リソースモニタリング時のアラートとアプリログを何らかの形で通知してほしい。という依頼がありました。
* CloudWatchでリソース監視&アラート設定をして、しきい値を超えたらSNSに通知する
* ログはCloudWatchLogs(?のAgent)でログを吸い上げてサブスクリプションフィルターでSNSに通知する
* SNSのサブスクリプションでメーリングリストを指定して関係者に配信する

という流れをひとまず作りました。こんなイメージ。

業務でBacklog、Typetalkを使ってるのですが、Typetalkの方にもアラートを投げてほしい。という要望が出たのでそちらも対応することにしました。
Amazon Chatbot( https://aws.amazon.com/jp/chatbot

元記事を表示

【AWS】【CloudWatch/Lambda】ログ監視のメール通知

# この記事でやったこと
CloudWatch のログ監視でメールを飛ばした際、ログメッセージを記載して飛ばす。
以下は「error」を2件検知して、メールを飛ばしたメールの本文。
“`
検知したメッセージは以下

May 20 09:33:21 ip-10-0-1-121 ec2-user[1786]: 2022年 5月 20日 金曜日 09:33:21 JST error
May 20 09:33:25 ip-10-0-1-121 ec2-user[1789]: 2022年 5月 20日 金曜日 09:33:25 JST error
“`

# 目次
1. [この記事でやったこと](#この記事でやったこと)
1. [実装背景](#実装背景)
1. [LambdaのPythonスクリプト](#lambdaのpythonスクリプト)
1. [Pythonスクリプトの補足1](#pythonスクリプトの補足1)
1. [Pythonスクリプトの補足2](#pythonスクリプトの補足2)
1. [Pythonスクリプトの補足3](#pythonスクリプトの補足3)
1. [Pytho

元記事を表示

LINEグループにBotからメッセージ送信する

LINEグループにプログラムからメッセージを送りたい、と思ったことはありませんか?
SlackやChatworkに比べると手順がやや複雑で手間がかかったので、備忘も兼ねて設定手順を記事に残します。
もし何かの参考になれば幸いです!

# 完成形

“`python:example.py
import os
from linebot import LineBotApi
from linebot.models import TextSendMessage

channel_access_token = os.getenv(‘LINE_CHANNEL_ACCESS_TOKEN’)
group_id = os.getenv(‘LINE_GROUP_ID’)
msg = ‘Hello World!’

line_bot_api = LineBotApi(channel_access_token)
line_bot_api.push_message(group_id, TextSendMessage(text=msg))
“`

pythonでメッセージ送信する一例です。
`チャネルアクセスト

元記事を表示

【Todo整理】S3にCsvUpload > Lambda起動 > Upしたファイル取得 > RDSへ登録

# 初めに
※雑なTodo整理・所感まとめです。詳細は各種公式サイトをご覧下さいm(_ _)m

Uploadしたcsvの情報を非同期な感じでデータベースに登録したくなったので、AWSの勉強がてら色々設定してみました。

## インフラ準備
* いずれterraform化したい
* 所感、結構むずい。(主にVPN⇄RDS周りで)
* 自分がAzure出身なので、慣れてないのもある
* 恥ずかしながらCIDRってなんやっけ…??みたいになった
* インフラ準備だけで1.5Dayぐらいかかった

S3,Lambda以外は下記ブログが非常に参考になりました、ありがとうございます!

https://photo-tea.com/p/aws-ec2-to-rds-connection/

### VPC,EC2作成
登場人物は`VPC`,`Subnet`,`ルートテーブル`,`インターネットゲートウェイ`,`ネットワークゲートACL`,`セキュリティグループ`,`EC2`

(ちゃんとした構成図は書く気がないので省略、すみません)
以下概要

* PublicSubn

元記事を表示

Lambdaでのアクセス許可追加方法の備忘録

# Lambdaでのアクセス許可追加方法
わざわざIAMに行かなくても、Lambda関数の設定>アクセス権限>実行ロール>ロール名から、許可ポリシーで適宜アクセス許可を追加することができる
![スクリーンショット 2022-05-22 13.30.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449478/f7168afb-9142-89fc-4020-5617dd596f67.png)

![スクリーンショット 2022-05-22 13.31.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449478/7a8d2405-2d11-7e30-3242-97808a5408e4.png)

参照
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-intro-execution-role.html

https://techblog.nhn-te

元記事を表示

【公式ハンズオン】Node.js+PrismaをServerless Frameworkを使用してAWS Lambdaにデプロイする

:::note
この記事は、Prisma公式の「Deploying to AWS Lambda」の和訳(意訳)です。
翻訳元とライセンスについてはページ下部に記載しています。
:::

このハンズオンでは、Serverless Frameworkを使用して、AWS LambdaにサーバレスなNode.jsのREST APIをデプロイする方法をお伝えします。

AWS LambdaはAWSのサービスの一つで、これを使うとサーバ管理不要のサーバレス環境でコードを実行できます。一方で、REST APIをLambdaにデプロイするためには、S3でファイルをホスティングしたり、API GatewayでAPIをHTTPで公開する必要もあります。

Serverless Frameworkを使えば、CLIでワークフローを自動化し、AWSリソースのプロビジョニングも行うことができます。

今回作成するREST APIでは、Prisma Clientを使用してデータベースのレコードの取得・作成・削除を行います。具体的には、それぞれの関数はRESTリソースのエンドポイントを表し、Prisma Client

元記事を表示

Lambdaで絶対にエラーならないレイヤーの作成方法

# 背景
Lambda関数でS3のファイルをSFTPサーバへ転送したいです。調べたところ、paramikoライブラリーの利用を決めたより、Lambdaのparamikoレイヤーを作成する必要があります。

# 現象
requestsライブラリーなどのレイヤーを作成した方法のように、「`pip install paramiko .`」コマンドを使って、ライブラリーをインストールして、Zipファイルを圧縮して、レイヤーを作成しても、関数でparamikoを使う時にエラーになります。
原因を推測すると、paramiko自分自身の依頼が複雑で依頼しているライブラリーはLambdaの後ろに存在するEC2サーバ上にはインストールしてないかと思っていますね。なせならば、コマンドを実行する端末環境はLambda後ろのEC2サーバと違うでしょう。

# 解決方法

### 1、ローカルにDocker をインストールする

[Docker Download and install](https://docs.docker.com/desktop/#download-and-install)を参照してくださ

元記事を表示

Lambda から直接ステータスコードを返す

# 問題
こんな感じで ステータスコード 400 を return する Lambda を書くとする。

“`jsx
exports.handler = async (event, context) => {
let response = {
statusCode: ‘400’,
body: JSON.stringify({ error: ‘Bad Request’ }),
};

return response;
};
“`

しかし、API Gateway を介してこの Lambda にアクセスしてみると、なぜかステータスコード 200 が返ってくる。
これは Lambda のレスポンスが API Gateway によりラッピングされてしまうことが原因。
なので、Lambda のレスポンス内容をもとにマッピングテンプレートを利用し API Gateway 側でレスポンスコードを指定する必要があった。
でも面倒なので、Lambda で直接ステータスコードを設定したい。

# 対処
`callback` にレスポンス内容を渡してあげれば中身が

元記事を表示

ECRへのPUSHをトリガーにECSのローリングアップデートを行う

# ■Lambda

ローリングアップデートを行うための処理を作成

### ▼Lamdaを作成する際の選択値

| 項目 | 値 |
| — | — |
| name | test ※仮でtestとします |
| 関数の作成 | 一から作成 |
| ランタイム | Node.js 16.x |

### ▼コード

:::note alert
Node.js での現時点でのSDKサポートは v2 になります
※ 最新版を使用したい場合は自身でデプロイを行う必要があります

https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
:::

“`index.js
const aws = require(‘aws-sdk’)

// async は付けないでください
exports.handler = (event, context) => {
const ecs = new aws.ECS({region: event.region});

// 環境変数は「Lambda」の「設定」

元記事を表示

英語の長文がスラスラ読めるようになる「トレーニングアプリ」を作ってみた。。。

# ■まえがき
皆さんはスラッシュリーディングとサイトトランスレーションという言葉を聞いたことがありますか?
私はスラッシュリーディングは知っていたのですが、先日、サイトトランスレーションという長文読解の速読トレーニング法を知り、AWSやプログラムの勉強も兼ねてWEBアプリ化してみました。↓
[Slash Reading & Sight Translation](https://16sw92fztg.execute-api.ap-northeast-1.amazonaws.com/Prod/input/)

しかし、出来上がった画面を見るとデザイン力がなさすぎることに気づかされる。。。
(´;ω;`)

## 用語説明
・サイトトランスレーション(Sight Translation)
 英文を「チャンク」と呼ばれる意味のかたまりごとに区切り、前から訳していくトレーニングの方法([引用元](https://englishhub.jp/method-2/sight-translation#:~:text=%E3%82%B5%E3%82%A4%E3%83%88%E3%83%88%E3%

元記事を表示

AWS Lambda における Python 3.6 のサポート終了

# 課題
皆さんにもこんな通知が届きましたよね。
>「AWS Lambda における Python 3.6 のサポート終了」

今回、ご丁寧に一覧表示する為のコマンドラインまでプレゼントされています。
ただ、クラウドエンジニアな私達は世界中に駆け回っているわけなので、一定のリージョンを調べるだけではダメなのです。

ということで今回は単にリージョン全てをチェックする sh をどうぞ。

# 解決
## AWS公式
>次のコマンドは、AWS CLI [3] を使用して、特定のリージョン内の Python 3.6 を使用しているすべての関数を一覧表示する方法を示しています。お客様のアカウント内のこうした関数すべてを確認するには、リージョンごとに次のコマンドを繰り返してください。

“`
aws lambda list-functions –function-version ALL –region us-east-1 –output text –query “Functions[?Runtime==’python3.6′].FunctionArn”
“`

## カスタマイズ版

元記事を表示

【python】S3上のcsvファイルから、dynamoDBのするAWS lambdaのサンプルコード

こちらでスプレッドシートをcsvに変換してS3に保存したので、csvからdynamoDBのテーブルを作成しました。

https://qiita.com/at_sushi/items/8b71927e72ac2a7465d5

サンプルコード

“`python
import os
import boto3
import pandas as pd

s3_client = boto3.client(“s3”)
dynamodb = boto3.resource(“dynamodb”)
table = dynamodb.Table(“任意のテーブル名”)

def lambda_handler(event, context):
bucket_name = os.environ[‘bucket_name’]
prefix = os.environ[‘prefix’]

s3 = boto3.client(‘s3’)
obj = s3.get_object(Bucket=bucket_name, Key=prefix)
df = pd.read

元記事を表示

Amazon EventBridge の 使い方

Cloudwatch alertを使って、[EC2のオートリカバリ](https://qiita.com/kazwata/items/feea966dbb4b76eedc37)や、SNS -> lambdaを介してSlack通知など、便利に使っていたのですが、連携できるサービスが限られているため、EventBridgeを使ってみます。

# EventBridgeとは
EventBridgeは、AWS外のSaaSやAWSサービスで発生した様々なEventを受け取って、LambdaやStep Functions などの指定したターゲットにEventを連携することができるサーバレスのマネージドサービスです。EventBridgeという名称そのままな感じですが、Eventソースとターゲットの自由度がかなり高いので、アイデア次第で色々できそうな感があります。

# EventBridgeの設定方法
「Cloudwatch alertのイベントを受け取って、lambdaに連携する」というEventBridgeを作成してみます。まずは、Amazon EventBridge > ルール > ルールを

元記事を表示

【Serverless Framework】S3アップロードしたらLambda実行できるようにする。

# この記事のゴール
・Serverless Frameworkの基本的な使い方を学ぶ。
・ESLint × PrettierでTypeScriptのソースコードを自動整形できるようにする。
・S3アップロードイベントで実行されるLambda関数を作成してみる。
  → 実用性がありそう&応用が効きそうなケース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653955/4885ce4b-1d1e-a113-691f-91daed51734d.png)

# もくじ
o1. Serverless Frameworkプロジェクト基盤作成
o2. S3アップロード時にLambdaが発火するようにする。
o3. CSVファイル読込
o4. mysqlインポート

# ソースコード
https://github.com/daisuketakakuwa/serverless-practice

# o1. Serverless Frameworkプロジェクト基盤作成

## プロジェクトフォルダ

元記事を表示

AWS Lambda(EC2のシェル)を毎月営業日◯日に実行したい

### AWSのカレンダー機能を使って、毎月の営業日◯日目にEC2のシェルを実行する(Lambda関数を実行する)

AWS EC2上に構築したHulftの集信コマンド(utlrecv)を「月初〇〇営業日」に実行したい
…といった問題に当たりました。

以下の機能を使って実装しました。
・AWS Systems Manager(Change Calendar)機能
 → (シェル や Lambda)を実行した日時を管理
・Amazon EventBridge機能
 → Calenderの状態を確認し、条件を満たしたら、ssm経由でLambda関数を実行する
・AWS Systems Manager(ssm)機能
 → Lambdaから(EC2のシェル)をキックする

(※きれいに作る場合、Calenderに祝日や土日を設定して、その日が営業何日目かを判断したりする必要があると思いますが…今回は、実行する日時のみをCalenderに登録し、定期的にメンテナンスする前提で作成しました)

### ①カレンダーの作成
まずはカレンダーを作成します。
![image.png](https:/

元記事を表示

Slack AppでリクエストURLにLambda(Node.js)の関数URLを指定してYour URL didn’t respond with the value of the challenge parameterが出た時の対応

## はじめに

Slackアプリの Event Subscriptions -> Enable Events -> Request URLでURL設定時にタイトルのエラーが出た場合の対応方法を整理します。

## エラー内容

“`
Your URL didn’t respond with the value of the challenge parameter.
“`

– 内容としては`challenge` パラメータを指定してレスポンスを返していない、という意味です。

## 結論

Lambda(Node.js)の場合、以下のようなコードを書けばOKです。
`challenge` のみを含むレスポンスを返却するのがポイントです。

“`index.js
exports.handler = async (event) => {
// TODO implement
console.log(`event=${JSON.stringify(event)}`);
const event_body_json = JSON.parse(event.body)

元記事を表示

【Rails 6】ActiveJob + S3 + Lambda + Slack で実現する非同期 CSV ダウンロード

## 概要

– 大容量の CSV を出力をしようとした際、レスポンスが返ってくるまでの待ち時間が苦痛
– 最悪、タイムアウトエラーになりかねない
– とりあえずレスポンスだけ先に返しておき、実際の CSV 出力処理はバックグラウンドで非同期処理するみたいな事がしたい
– ActiveJob + S3 + Lambda + Slack を使う事でそれが実現できそう

軽めの CSV 出力であれば何ら問題無いのですが、サービスの運用が長続きしてたくさんのデータが蓄積すると、それらを一気に出力するのはなかなか骨が折れたりします。

実際、自分が担当しているサービスでも先日ついに処理に時間がかかりすぎてタイムアウトエラーになるといった事象が発生しました。

もちろん、 SQL の見直しだったり根本的な部分においては他にも色々やるべき事はあるかもしれませんが、とりあえず手っ取り早く対応するために非同期での CSV ダウンロードを実装してみました。

### 同期処理の場合

![同期.gif](https://qiita-image-store.s3.ap-northeast

元記事を表示

ClickUpのイベントをLambdaで取得してみた

## はじめに
業務でClickUpを使用していますが、タスクのコメントが追加された際にSlackに通知できるようにしたいと思いました。
まずは、Lambdaでイベントを受け取る方法についてまとめました。

## 準備
### Lambda
– 関数を作成する
– 今回は簡易性のためにAPI Gatewayは使わずに関数URLを使う

### ClickUp

– 以下に記載の順序でAccessトークンを取得する

> Finding your token:
> Navigate to your personal Settings
> Click Apps in the left sidebar
> Click Generate to create your API token
> Click Copy to copy the key to your clipboard

https://docs.clickup.com/en/articles/1367130-getting-started-with-the-clickup-api

– 以下コマンドでWebhookを作

元記事を表示

OTHERカテゴリの最新記事