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

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

【AWS】Amazon EFSを作成して、EC2とLambdaから使用する

Amazon EFSを作成し、EC2にマウント、Lambdaからアクセスできるようにしてみました。
# 前提条件
– VPC、EFS、EC2は同一リージョンに作成する(今回は東京リージョンを使用)
– LambdaはEFSに到達できるVPCに接続する必要がある
– プライベートサブネットが作成済みの状態から開始する
– EC2へSSH接続を行うためのキーペアが作成済みの状態から開始する

## この記事のゴール
– Amazon EFSを作成し、LambdaからEFS内のファイルを操作する
– EC2にEFSをマウントし、EFS内のファイルを操作する

以下の構成をイメージしています。
![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620994/c52c837e-aeef-5991-f56a-9b8ab492f950.png)

## この記事で扱わないこと
– VPCの作成方法
– パブリックサブネット、プライベートサブネットの作成・設定方法
– EC2インスタンスへのSSH接続方法

#

元記事を表示

Doker Desktop for Windows を利用した AWS lambda ローカルPC開発環境構築

## 環境
* Windows 10 Pro 20H2
* docker desktop Version 3.1.0(51484)

## docker desktop インストール

* [Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
Get Docker よりインストーラーをダウンロードして実行

ちなみに、私のPCではインストール実行後、以下の問題が出て解決するまで時間がかかりました。

* [\[Docker\] "Timed out waiting for the lifecycle-server to start"によりサービスが起動しない – Qiita](https://qiita.com/ktz_alias/items/f617c526a18de9b3f0f7)

## amazonlinux 起動
* docker desktop 起動後、PowerShell より以下のコマンドを実行

“`

元記事を表示

Lambdaでメッセージを編集してSNS Publishする一例

# Lambdaのコード

 ヒアドキュメントと変数、`json.dumps`を利用した一例です。
 SecurityHubの通知を例にして作成しています。

“`py:lambda_function
from __future__ import print_function
import json
import boto3
import os

sns = boto3.client(“sns”)
def lambda_handler(event, context):
message = event[“detail”][“findings”][0]
msg = “””
Security Hubにより検知した違反内容
セキュリティ基準コントロール:{standards_control_arn}
タイトル:{title}
説明:{description}
セキュリティステータス:{status}
重要度:{severity}
修復手順:{remediation_text}({remedeation_url})

元記事を表示

Lambdaで異なるリージョンにSNS Publishするときはリージョンを指定する

# Lambdaで異なるリージョンにSNS Publishする

 LambdaではPython3.6を使用しています。
 バージニア北部リージョンから、東京リージョンのSNSにPublishします。
 バージニアのLambdaコードはこちら。

“`py:lambda_function
from __future__ import print_function
import boto3
import json
import os

def lambda_handler(event, context):
region = os.environ.get(“REGION”)
sns = boto3.client(“sns”, region_name=region)
print(region)
print(sns)
response = sns.publish(
TopicArn=os.environ.get(“SNS_ARN”),
Subject=”テスト”,
Message=”Lambdaで異なるリ

元記事を表示

Bubble用のAPIを AWSで Lambda と API Gateway を使って作成する

# 概要
– Bubble の API Connector から呼び出す先のAPIを作成する
– サンプルとして、名前と回数を受け取り、挨拶を返すAPIを作成する
– Bubbleからのパラメタは`queryStringParameters`に入る
– AWSを使う
– Lambdaを使うと、サーバのことを考えずにコードを実行できる
– API Gatewayを使うと、APIの構築、デプロイ、管理ができる。URLを割り当ててくれる。
– (本番運用の際はセキュリティを考慮する)

# Lambda関数の作成(Python)

## 関数の作成
– Lambdaの画面を開く
– 「関数の作成」ー「一から作成」
– 以下で作成
– 名前: greeting
– ランタイム: Python 3.8

![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/d849335d-ed83-61ed-bf64-e021e0aee439.png)

元記事を表示

AWS Lambdaで列車運行情報を定期的にLINEへ通知してみた【Python】

# 背景

近年、電車の運行情報は各事業者が、メール通知サービスや公式twitterアカウントなどで発信していたり、公式アプリでも情報がリアルタイムに見れたりしますね。
しかし、twitterや公式アプリは利用者側が情報を見に行く手間がかかります。メール通知サービスは、メールが多い人はすぐにメールボックス内に埋もれてしまい、情報が取り出しにくいというデメリットも潜在します。
そこで、LINEで定期的にプッシュ通知できるようにしてみました。

電車の運行情報だけでなく、他のことにも応用できると思いましたため、ここにまとめます。

先人たちの知恵をお借りするなどして解決できたことを、この場をお借りして感謝するとともに、大変恐縮ですが**自分のメモ**として、こちらへまとめておきます。

 
◆◆◆◆◆◆◆◆◆◆◆

今回は、特に以下の記事が大変参考になりました。
また、執筆者の [@nsuhara](https://qiita.com/nsuhara)様 には何度も質問させていただき、都度ご丁寧に回答いただきましたことを、大変感謝しております。この場をお借りして御礼申し上げます。

– [

元記事を表示

Node.js+AWS Lambda+DynamoDBで作るLINEBot

先日、[X-HACK勉強会](https://x-hack.connpass.com/)でLINEBotの作り方を学びました。

勉強会ではおうむ返しをしてくれるBotを作ったのですが、自分がほしいBotを作ってみよう!と思いアレンジして作ってみました。

# 電車発車時刻を送ったら準備開始時間と家を出る時間を教えてくれるLINEBot

**家から駅が近い・電車が数分おきに来る都会の人には完全不要Botです。**

![IMG_CFDC000E4F39-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311806/0ee8d915-4901-5611-7a5e-970ddf43d39a.jpeg)

## 機能
– 電車発車時刻を送ると準備開始時間・家を出る時間を返信してくれる
– 準備時間を変更する(デフォルトは30分)
– 家から駅までの時間を変更する(デフォルトは15分)
– 現在の設定されている準備時間・家から駅までの時間を確認する

## 作ろうと思ったきっかけ
数ヶ月前に引っ越しをして

元記事を表示

API Gatewayで作成したデフォルトのエンドポイントをカスタムドメイン化する

## 概要

API Gatewayで作ったAPIのエンドポイントはデフォルトの状態だと次のような感じになっている。

“`
https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com
“`

このままだと視覚的にわかりづらいため、任意のドメインに変更したい。

## 前提

Route53に変更希望の独自ドメインがすでに登録済みである事。
参照: [AWSだけで独自ドメインを取得して自分のWebページを公開するまで](https://qiita.com/ymzk-jp/items/ae115ed6d0fd2d383cec)

## Lambda関数を作成

![スクリーンショット 2021-02-07 16.12.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/9907200d-a14b-5e43-72fe-4ecbea4985c9.png)

まず、適当な値を返すためのLambda関数を作成する。

![スクリーンショッ

元記事を表示

AWS Lambdaを直列に動かす SQS編

# はじめに
この記事は、社会人2年目 AWS、python初心者が勉強したことをまとめたものです。
間違っている点、改善点等ございましたご指摘いただけると大変ありがたいです。

# この記事について
2つのLambdaを直列に動かす方法について記載します。
直列に動かすとは、Lambda1が正常終了した後Lambda2を動かすことを指しています。

Lambdaを直列に動かす方法として以下の二つが浮かびました。

* Step Functionsを利用
* SQSを利用

過去にStep Functionsを利用した方法を紹介したので、
本記事ではSQSを利用した方法について紹介します。

[AWS Lambdaを直列に動かす Step Functions編](https://qiita.com/sushilike86/items/5fb3b28c92c27bcd2a49)

# 構築するシステム

メッセージの送受信を行う非常にシンプルな構成です。

func1がキューにメッセージ `func1 is done!!!` を送信します。
func2がメッセージをキューイングし、メッ

元記事を表示

AWS Lambda@Edge 概要

* AWS Lambda@Edgeの概要情報をまとめる。

## AWS Lambda@Edgeとは

* CloudFrontのエッジサーバーでコードを実行するLambda関数。
* ユーザーに近いロケーションでコードを実行することでアプリケーションのパフォーマンスを向上させる。
* CloudFrontのイベントをトリガーとしてコードを実行する。

## 用語・概念

### トリガー

![lambdaedge_concept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/ef292e7c-f06a-48cf-7003-96b29527377f.png)

* Lambda関数の実行タイミング。
* 関数実行したいタイミングに応じて、選択する。

| | Viewer | Origin

元記事を表示

シンプルに動かせるLambda(Python)のローカル環境を5分で作ってみました

今回Lambda関数のテストをローカル環境でできないかなと調べていまして、Amazonが公式に公開しているdockerイメージ(aws-lambda-python)を使用すれば簡単に動かせるらしいということを知りました。

ただ、これを説明しているサイトだとイメージの作成、ポートの指定とかコマンド直打ちでやってるのが多くてめんどくさい(みんなバラバラのイメージ名、ポート番号だと正直めんどくさい)なあと思ったので、このあたりをdocker-composeで簡単かつ自動で動くようにしちゃおうというものです。

「aws-lambda-python 使い方」とか調べても出てこなかったので、参考にしていただければ幸いです。

## 環境

* Windows 10
* Docker for Windows
* Git Bash

## 前提

上記がすべてインストール済みであること。

## 今回のディレクトリ構成

“`
proj/
├ app.py
├ docker-compose.yml
└ Dockerfile
“`

## 方法

app.pyに実行する内容を

元記事を表示

【Ruby】Googleカレンダーから予定を取得してSlack通知を飛ばしてみる

## この記事を読むとできるようになる事

![スクリーンショット 2021-02-06 12.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/2d074c74-63a7-ca5e-d86b-5cd1476beaf4.png)

こんな感じでその日の予定をGoogleカレンダーから取得してSlack通知を飛ばす事ができます。

## 目指す構成

![Untitled Diagram(6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/42e16299-8888-3bf6-e844-9bd7cce2ce25.png)

① CloudWatch EventsでLambdaを起動。
② API経由でGoogleカレンダーから予定を取得。
③ Slackに通知を飛ばす。

## 使用技術

– Slack
– Google API
– AWS
– Lambda
– CloudWa

元記事を表示

block、proc、lambdaの話

今までRubyの世界にblock、proc、lambdaはいつても避けられない話と思うので、今回はも一回雑談させていただきます。

# block

blockを含めたメソッドは下記のような書いていきます。

“`
def method(*args, &block)

end
“`

## 実験
### 引数みたいな`&block`は実際に引数ではなく、声明のような物となります。

“`
[20] pry(main)> def method(&block)
[20] pry(main)* end
=> :method
[21] pry(main)> method(1)
ArgumentError: wrong number of arguments (given 1, expected 0)
from (pry):21:in `method’
[22] pry(main)> method()
=> nil
[23] pry(main)> method() { p ‘hello’ }
=> nil
“`

上記の結果によって、`&block`は引数でないことを判明しま

元記事を表示

AWS Lambdaを直列に動かす Step Functions編

# はじめに
この記事は、社会人2年目 AWS、python初心者が勉強したことをまとめたものです。
間違っている点、改善点等ございましたご指摘いただけると大変ありがたいです。

# この記事について

2つのLambdaを直列に動かす方法について記載します。
直列に動かすとは、Lambda1が正常終了した後Lambda2を動かすことを指しています。

Lambdaを直列に動かす方法として以下の二つが浮かびました。

* Step Functionsを利用
* SQSを利用

**Step Functionsを利用する利点は、Lambda関数を一切変更する必要がない点です。**
SQSを利用する場合は、一つ目のLambdaの返り値でSQSを呼び出す必要があるため、場合によっては変更が必要です。

本記事ではStep Functionsを利用した方法について説明します。

# 構築するシステム

Function1が正常終了したらFunction2を開始させるという極めてシンプルなワークフローです。

![image.png](https://qiita-image-store.s3.a

元記事を表示

Lambdaでスクレイピングしようとしたら、requests, bs4がなくて苦労した

AWS lambda でスクレイピングを使った簡単なアプリを作りたいと思い、以下のようなimport文を書いた。

“`py
import requests
import bs4
“`

“`
No module named ‘requests’
“`

lambdaのテストすると、上記のようなエラーメッセージが表示された。解決策としては、必要なライブラリを一つのフォルダに入れて圧縮し、それをlambdaのコンソール画面操作でアップロードするという方法。

– 苦労した点
– レイヤーに追加してもimportエラー(なぜ!)
– アップロードするとlambda_function.pyが消える(!!)

# レイヤー使えなかった

関数用意。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/7412058c-5ea2-bfd3-6e9c-1a797c48b841.png)

レイヤー用意。

![image.png](https://qiita-image-

元記事を表示

AWS Lambda がコンテナイメージをサポートしたので YOLOv5 を hosting してみた

どうも [@kazuneet](https://twitter.com/kazuneet) です。
初投稿です。[こちら](https://zenn.dev/gokauz/articles/72e543796a6423)にも同様の内容を記載しております。

## ことのあらまし
2020年末に AWS Lambda でコンテナイメージがサポートされました。
[AWS Lambda の新機能 – コンテナイメージのサポート](https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/)

この記事を見た AWS Lambda 至上主義であるあなたの上司がある日突然、

「今まで ML の推論環境として EC2/ECS/EKS/SageMaker を使って立てっぱなしにするのを黙認していたが、もう許さないよ?」
と言ってくることがあるかもしれません。

あるいはあなたの配偶者が、「つけっぱなしのリソースはもったいないと思わないんですか?」と言いながら「バッチ推論は起動時間がいつも遅いから嫌

元記事を表示

【AWS】Amplify + AppSync + Lambda + Aurora ServerlessでAPIサーバを作る備忘録

# やりたい事
個人開発で、管理画面的なwebサービスを作りたかった。

– テーブル設計をしたところ、50以上のテーブル構成・・・
– データを更新する上での条件も結構ありそう・・・

と、なかなか複雑な感じになってしまった。

今まで使っていた、firestoreなどのNoSQLだと厳しそうなのと、今後を見越して
いろんな問題に耐えられる構成にしておきたいなというのもあり、いろんなパターンで技術検証というほど細かくやっていないが、
少し作っては動かしてというのをしてみた。
最終的に今回備忘録としてまとめる構成は、採用はしないが、規模がちょっと大きくなってきたりしたら、検討したいと思えるような構成に感じてる。

なので、忘れないように備忘録として自分用にまとめておく。

# 全体構成
考えていた構成はこんな感じ。

– NoSQLは厳しかったので、RDBはマスト条件
– 管理画面からは一発でデータ取れればいいなという事で、GraphQL(AppSyncがそれ)
– コードは出来るだけ書きたくない(時間かけたくない)ので、awsとか既存のサービスを組み合わせる
– etc…

!

元記事を表示

AWS Lambda(python)によるAmazonSQSの送信と受信サンプル

AWS Lambda(python)でAmazonSQSの送信と受信を行ってみます。
エラーハンドリング等は行っていないシンプルなサンプルです。

## AmazonSQSのキュー作成
今回は単純な送受信を行うだけなので特別な設定は不要です。
以下の設定で作成します。(記載なしの値はデフォルト)

| 項目 | 設定値 |
|—|—|—|
|名前|SampleQueue|
|タイプ|標準|
|アクセスポリシー|指定された AWS アカウント、IAM ユーザー、ロールのみを選択|

## SQSメッセージ送信用Lambda関数の作成
メッセージ本文と2つの属性を送信します。

“`SQSSendMessage.py
import boto3

def lambda_handler(event, context):
sqs = boto3.resource(‘sqs’)
queue = sqs.get_queue_by_name(QueueName=”SampleQueue”)
sqsresponse =queue.send_message(

元記事を表示

AWS Lambda とは?

## 勉強前イメージ

トリガーベースでなにか実行するようなやつ。
うまく言葉で言えない。

## 調査

### AWS Lambda とは?

サーバレスでコードを実行することが出来る。
サーバレスなので、EC2インスタンスを立てることもなくすぐに始められる。
費用は使った分だけ。
スケーリングも自動。

### 特徴

– イベントをトリガーにして、処理が実施される
– API Gatewayと組み合わせると簡単なwebサービスを作れる

### Lambda には無料枠がある

– 月間100万リクエストまで
– 1GBの関数を月間40万秒まで無料で実行可能

### Lambda で使える言語

主な言語は以下。
カスタムすれば他の言語も使用できるみたいです。

– Python 2.7, 3.6, 3.7
– Node.js 6.10, 8.10, 10.x
– Ruby 2.5

## 勉強後イメージ

やりたいことがあるので、軽くLambdaを調べてみた。
大体イメージと合ってたけど、lamdaだと思ってたらlambdaだったのか。。。

## 参考

– [AWS L

元記事を表示

CloudWatch Logs のサブスクリプションフィルタを使って特定文字列を検知したログをEメール通知する

# はじめに
**CloudWatch Logs** へ保存したログを、サブスクリプションフィルタを使って特定の文字列を検知し、その内容を **SNS** を使ってEメール通知するということを行いました。
また、今回の設定は全て **aws-cli** を利用して行っています。(確認として管理コンソールの画像も載せてます)

# 構成
まず、クライアントから **CloudWatch Logs** へログを送ります。
すると **サブスクリプションフィルタ** の検知をトリガーに **Lambda** が実行されます。
実行された **Lambda** が **SNS** を通してクライアントへ **Eメール** を送信します。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/fdf0b468-568a-d662-9309-7c3130bca5aa.png)

# 設定
今回は **aws-cli** を利用して作成します。設定は構成図の番号の流れで行っていきます。

元記事を表示

OTHERカテゴリの最新記事