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

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

レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話

こんにちは、家庭では休日の料理担当をしている二児の父です。

山本ゆりさんやリュウジさんなど有名レシピ作家さんのレシピをよく参考にするのですが、ブログ記事、Instagram、Youtubeなど皆さん複数のチャネルにレシピを公開してて探しにくいなぁと常々思っていたため、チャネル横断でレシピを検索できる、制作期間わずか3日の[トイアプリ](https://couch-potato.vercel.app/yuri-yamamoto)を公開してTwitterでお知らせしました。

すると山本ゆりさんご本人がリアクションしてくださり(!)、フォロワー数100人ちょっとだった自分のツイートにいいね!が止まらない状況に。これに気を良くして、さらに**近所のスーパーで安くなってる食材を調べて、関連レシピを検索できる機能**を追加してLINE Botにしてみたよ、という話です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201783/607570ad-0bfd-f3e9-b08d-685ee3d

元記事を表示

AWS lambda pythonでライブラリを読み込むまで

### AWS lambdaとは?
AWS環境下においてサーバーレス(EC2などを起動しない)でプログラムを実行できるサービス

### lambdaを使う利点

EC2と違って、サーバーレスなのでサービスを実行する時のみ課金される。
(コストを抑える利点がある)

### lambdaの使い方

AWSコンソールにてlambdaへ移動。

![lambda説明資料1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/e502c9dd-f276-2464-a76b-6eb03afcf351.png)

右上の関数を作成ボタンをクリックして、関数を作成する画面へ飛ぶ。

関数の作成画面へ移行すると、関数の作成方法を求めてきます。

今回はユースケースなど使わず、一から作成を選択。

![lambda説明資料2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/6c27e496-909c-9b00-

元記事を表示

40 代おっさんLambdaを使ってS3と連携

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 構成図

![lambdaS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/6488bc11-1f6d-5b4e-9a8f-c5a13d71d8d7.png)

## Lambda関数を作る

### LambdaのGUIコンソールを開く

関数の作成をクリック

一からの作成をチェックを入れて

関数名を入れて

ランタイムにpython3.7を入れる(今回はpython使用するため)

アクセス権限は
基本的なLambdaアクセス権限で新しいロールを作成にチェック

できたら関数の作成をクリックしてください。

### コードを確認

‘statusCode’: 200
が return するようになっていると思います。
上にprint(event)を追加

“`

元記事を表示

S3バケットにあるgzipファイルを加工して再度gzipで出力

大したことない作業のようですが、若干つまりどころがあったので残しておきます。

## やりたいこと
とあるS3バケットにあるgzipファイル(中身はjson)が生成されるたびに一部加工して、別のバケットに再圧縮して出力したい。
図を書くほどのものでもないんですが、こんな構成になります。
![Blank diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852059/6b84716b-cd55-0cff-954b-e9ba1f9df0f3.png)

## どうやるか
Source BucketからSQSに通知してLambdaを呼び出すところは一般的な設定なので割愛します。
gzipを取り扱えるnpmパッケージは有名どころだと[node-zip](https://www.npmjs.com/package/node-gzip)などがありますが、zlibだけで出来ましたので今回のようなシンプルなケースだと外部パッケージは不要でした。
解凍・加工・再圧縮を行うLambdaは下記のようにな

元記事を表示

40 代おっさんLambdaを使ってみる

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## lambdaを使う

lambdaの作成画面に行ってください。

作成を押してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/85ca853c-5b13-9ada-3d44-f0b5f629862b.png)

左から

・一からの作成

・設計図の使用
あらかじめAWSで設計されているもの使用できる

・コンテナイメージ

・Serverless Application Repository

### 設計図の使用を選ぶ

hello-world-pythonと入れる

テンプレートが表示されるのでチェックボックスにチェックを入れて、左下の設定をクリック

### 関数名に名前を入れる

関数名をhello-pythonにしました(わかる名前で

元記事を表示

lambdaをローカルで動かしてみよう

今回はlambda上に実装したアプリケーションをローカルで動かす方法を紹介します。
言語はpython3.8です。

## この記事の流れ
1. AWS SAM CLI のインストール
2. アプリの作成(lambda)
3. ローカルで挙動確認

## 1. AWS SAM CLI のインストール
下記、リンクを参考にインストールを行なってください。
[AWS SAM CLI のインストール](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)

## 2. アプリの作成(lambda)
ターミナルを立ち上げ、lambdaのプロジェクトファイルを作成するディレクトリに移動して下記コマンドを実行してください。

“`zsh
sam init
“`

 SAMテンプレートの作成が始まり、いくつか選択を要求されますので、下記を選択をしてください。
 ・ 1 – AWS Quick Start Templ

元記事を表示

CloudWatchAlarmの発砲テスト方法

# これは何?
CloudWatchAlarmからSNSへ連携されてLambdaがトリガーされる仕組みを作っていたのですが、
アラート発生のテストで毎回CPU使用率を上げるなど面倒だったが簡単な方法を見つけたのでメモです。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html#cpu-usage-alarm-cli

https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/set-alarm-state.html

## CloudWatchAlarmテストコマンド
``をテストしたいCloudWatchAlarm名に変更して実行します。

“`
aws cloudwatch set-alarm-state –alarm-name –state-value ALARM –state-reason “test”
“`

##

元記事を表示

Lambda/SAM ログ出力方法 メモ

* Lambdaでのログ出力をsam cliを使って試したのでメモとして残しておく。

## 事前準備

* sam プロジェクト作成

“`shell
sam init
“`

※ランタイムはPython3.8を選択。

## コード

* `template.yml`

**ログレベル**を環境変数として設定する

“`yaml

Environment:
Variables:
LOG_LEVEL: !Ref LogLevel

Parameters:
LogLevel:
Type: String
Default: INFO
“`

* `app.py`

“`python
import json
import logging
import os
import requests

def lambda_handler(event, context):
logger = logging.getLogger()

# ログ

元記事を表示

40 代おっさんLambdaのイベントソースとlambda関数を学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## イベントソース

### イベントソースとは

lambda関数が呼び出されるきっかけとなるもの
lambda関数にはハンドラーなるものがあり、それでイベント受け取る

#### lambda関数を呼び出すタイプ

・同期
・非同期
・ストリーム
がある

イベントソースにより呼び出しのタイプが異なる。
それにより、aws側でリトライを実行されるのか、ユーザー側でリトライを実装するのかで変わる

## 最後に

またこの記事は AWS 初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。

元記事を表示

amplifyで発生した Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME の対処

# amplifyで発生した `Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME` の対処

– amplify cli version: 7.6.3
– AWSコンソール操作 : 2022/03/05 時点

amplify pushをしたところ以下のエラーが発生した

“`markdown
Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME
“`

このメッセージ単体だけで調査したところAWSの以下の記事が引っかかるが、解決の方法の一部でしかなかったので対処方法を残す。

[https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-stack-export-name-error/?nc1=h_ls](https://aws.amazon.com/premiumsupport/knowledge-center/cloudformatio

元記事を表示

40 代おっさんLambdaの概要、料金、主な連携サービスを学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## Lambda

### Lambdaとは

サーバーレスコンピューティングサービス
サーバーなしでコードを実行できるサービス

#### サポートしている言語

Java,Go,PowerShell,Node.js,C#,Python,Ruby

#### メリット

・基盤となるインフラに依存せずコードを実行
・イベントに応じてコードを実行する
・自動スケーリング
・エッジで実行可能

### 料金

リクエスト数と実行時間で決定

#### 無料枠

リクエスト数:100万件まで無料
実行時間:40万GB-秒まで無料

#### 課金

リクエスト数:100万件あたり0.20USD
実行時間:GB-秒あたり0.0000166667USD
(メモリ1GB割り当ての場合)

### lambdaに連携できるサービス

・Cognito:ウェブアプリケーションおよびモバ

元記事を表示

SAMで構築したLambdaのエラーをSentryに通知する

# 概要

AWS SAM(AWS Serverless Application ModelにてStepFunctionsを利用したバッチを作成しています。
各Lambdaで発生した例外をSentryへ通知したかったため、調べてやってみました。

共通的にソースコードを変えずに設定する方法が見つからなかったので、
1つ1つのLambda handlerのソースを修正する方法になってしまいました。
※知っている方いたら教えてください。

# 設定方法

まずはSentryにてプロジェクトを作成しdsnを取得してください。

次に[公式](https://docs.sentry.io/platforms/node/guides/aws-lambda/)にも書いている通り@sentry/serverlessを追加します。
(Lambda Layerを使用することもできます。詳しくは後述)
“`sh
yarn add @sentry/serverless

or

npm install –save @sentry/serverless
“`

実際のソースコードへSentryへの通知設

元記事を表示

jest.mock + prototypeでDynamoDBをMock化した

# そもそもやりたかったこと
SQSから受け取ったメッセージを lambdaで加工し、
その情報を使ってDynamoDBからItemをGet、指定のURLへItemの内容をaxiosを使ってPostする仕組みを作っていました。

テストコードを記述するにあたり DynamoDB.DocumentClient.get部分をMock化したいと思いました。
ググると[aws-sdk-mock](https://www.npmjs.com/package/aws-sdk-mock) とか、[aws-sdk-client-mock](https://www.npmjs.com/package/aws-sdk-client-mock)とか情報が出てくるのですがうまくMock化できず詰まりました。
aws-sdk-client-mockはそもそも使っているAWS SDKがv2だったので使えなそうと思い断念。

最終的に jest.mock + JavaScriptのprototypeの組み合わせでうまく行ったので、備忘のため記述します。

# 環境
lambda: typescript(4.1.3)

元記事を表示

AWS LambdaからTwilio Functionsに値を渡す

# これはなに?
AWSLambdaからTwilio Fnctionsへ値を渡すときに使用した例です。

例えばですが、CloudWatchAlarmの発生をトリガーにLambdaが動き、
LambdaからTwilio Functionsが呼び出されSMSの通知内容でアラート名をお知らせするなど行えると思います。

## Lambda側
下記にて紹介されているコードを転用して作成しております。
今回はCloudWatchAlarmよりアラートが上がった際のアラート名を連携するようにしています。

https://qiita.com/mobilebiz/items/406461282a23d2e056a6#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%BA%96%E5%82%99

“`index.js
exports.handler = function (event, context, callback) {
const crypto = require(‘crypto’);
const

元記事を表示

別のLambdaを同時に呼び出して実行する方法【備忘録】

## 背景
Lambdaを使って日付ごとにデータをスクレイピングすることがあった。
大量のデータであったが、繰り返し文で日付を変えながら行うプログラムとしていたため、非常に時間がかかった。

そこで、①実行指示Lambdaと②スクレイピングLambdaに分けてプログラムを作成し、①にて変数を入れ替えながら②に指示するような構成にすることで、Lambdaの同時実行が可能になったので、備忘録として記載する。

参考記事については複数層に分けて大量のLambda実行を可能としているが、今回はわかりやすさ優先で、(親)と(子)の2層構造でLambdaを同時実行してみる。

## イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/49578015-605e-e696-d64f-c0bab0855d94.png)

## 親Lambda

“`Python:parent

import json
import io

client = boto3.client(‘lambda

元記事を表示

Docker+AWS Lambdaのローカルテスト環境を作成する

## 概要

Lambdaのローカルテスト環境をDockerで作成しました。本記事ではPythonで書いています。
公式ドキュメントを読んでも上手くいかなかったので、記事にします。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html

## 用意するもの

– Dockerコマンドを実行できる環境

## 構築手順

### ディレトリ構成

“`
(プロジェクトルートディレクトリ)/
├── Dockerfile
├── requirements.txt (不要なら作成しなくて良い)
└── app.py
“`
### ファイル作成

“`Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.8

COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt .

RUN pip3 install -r requirements.txt –target “${LAMBDA_TA

元記事を表示

Presigned URLの発行と取得したURLを使用して画像ファイルをGET/PUTする。

## 目的
コンテンツをサーバー上にアップロード・ダウンロードして配信するというユースケースがある。コンテンツを保持しておくサービスとして、AWSにS3というサービスがあるのでそれを利用する。

## 環境
– AWS Lambda Python 3.9

## Lambdaコード
“`python
# — coding: utf-8 —
import boto3
from botocore.client import Config
import os

REGION_NAME = os.environ[‘REGION_NAME’]
S3_BUCKET_NAME = os.environ[‘S3_BUCKET_NAME’]
DURATION_SECONDS = os.environ[‘DURATION_SECONDS’]
KEY_NAME = os.environ[‘KEY_NAME’]

s3 = boto3.client(‘s3′, config=Config(signature_version=’s3v4’))

def lambda_handler(event, cont

元記事を表示

LambdaPermissionとは何か

# はじめに
Former2でCloudformationテンプレートを作っていたらLambdaPermissionなるものが生成された。
“`yaml
LambdaPermission:
Type: “AWS::Lambda::Permission”
Properties:
Action: “lambda:InvokeFunction”
FunctionName: !GetAtt LambdaFunction.Arn
Principal: “apigateway.amazonaws.com”
SourceArn: “**************”
“`
身に覚えがないぞ。

# 結論
* コンソールから手動で作成するときは自動で生成されるもの。
* Lambda関数にトリガーをセットする際、トリガーからのInvocateを許可するリソースベースポリシー。つまりこいつがないとトリガーが機能しない。

## 公式を確認
_The AWS::Lambda::P

元記事を表示

lambdaについて

## はじめに

has_manyで使われるクエリをカスタマイズしたかったので、その方法を調べたところ、初めて見る記述だったので、調べてみました。
以下に例を示します。Postに関連するlikeを作られた逆順(新しい順)で取得するための記述です。

~~~ruby:author.rb
class Post < ApplicationRecord has_many :likes, -> { order(created_at: :desc) }
end
~~~

## has_manyのスコープ
Railsガイドでは、次のように説明されています。

>has_manyで使われるクエリをカスタマイズしたい場合があります。スコープブロックを用いてこのようなカスタマイズを行えます。

引用:[has_manyのスコープについて](https://railsguides.jp/association_basics.html#has-many%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%

元記事を表示

Cloud Watch Alarm + SNS + LambdaでECS・Fargateのリソース状態をSlack通知する(Terraform)

# 本要件の流れ

1. Cloud Watch Alarm発動
2. SNSへメッセージを送信
3. トリガーを検知しLambdaが起動
4. LambdaからSlackへ通知を送信

# 前提

– ECSでなにかしらのアプリケーションを構築済み

# Webhookの取得

まずは実装の前にwebhookが必要なので、事前設定を行います。

[https://slack.com/apps](https://slack.com/apps) へアクセスし、

アプリを検索する > カスタムインテグレーション > Incoming Webhook

で設定の編集を行い、webhookを追加するslackのチャンネルを登録してください。

するとwebhookのurlが発行されるので、それを控えておきます。

「対象のチャンネルにWebhookを追加し、URLを取得する」ということができれば良いです。

色々と記事は出回っているのでググってもらえれば助かります。

# 実装

最初に取得したwebhookのurlは変数で渡せるようにしておきましょう。

develop/variables

元記事を表示

OTHERカテゴリの最新記事