- 1. OpenCVをAWS Lambda + Python + Serverless Frameworkで動かす
- 2. LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年
- 3. この令和時代にサーバーレス知らないのはヤバみ
- 4. DynamoDBからCSVをエクスポート&データ登録 Lambda APIGateway
- 5. SAMをつかったサーバーレスな郵便番号APIを紹介!
- 6. コピペで出来る!LambdaとAPI Gatewayを使って簡単にAPIを作る手順
- 7. LambdaからS3を利用する
- 8. Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする
- 9. Amazon API GatewayのLambda Authorizerのレスポンスに注意
- 10. Lambdaから同一アカウントの異なるリージョンのLambdaを呼び出す
- 11. 【boto3】LambdaでS3のディレクトリ削除
- 12. [AWS] CloudWatch Logsを監視し、Slackに通知するLambda関数の例
- 13. PyTorch on Lambda で MNIST の推論を実行する API を作成する(AWS CDK)
- 14. 画像をAPI Gateway+Lambdaで受け取って Pillow で処理する(AWS CDK)
- 15. 【AWS】Amazon EFSを作成して、EC2とLambdaから使用する
- 16. Doker Desktop for Windows を利用した AWS lambda ローカルPC開発環境構築
- 17. Lambdaでメッセージを編集してSNS Publishする一例
- 18. Lambdaで異なるリージョンにSNS Publishするときはリージョンを指定する
- 19. Bubble用のAPIを AWSで Lambda と API Gateway を使って作成する
- 20. AWS Lambdaで列車運行情報を定期的にLINEへ通知してみた【Python】
OpenCVをAWS Lambda + Python + Serverless Frameworkで動かす
OpenCVをAWS Lambda + Python + Serverless Frameworkで動かしてみました。
先日、[PillowをLambdaで動かす](https://suzuki-navi.hatenablog.com/entry/2021/02/02/163647)記事を書きましたが、このときと違って、OpenCVはyumでインストールの必要なshared objectに依存しているのでだいぶ面倒でした。
# 手順概要
1. serverless-python-requirements インストール
2. Pythonサンプルコードを記述
3. requirements.txt と serverless.yml と Dockerfile にOpenCV動作に必要な事項を記述
4. あとはデプロイOpenCV特有は3のみです。
# 手順詳細
## serverless-python-requirements インストール
AWS Lambda + Python + Serverless FrameworkにPythonのパッケージをインストールする方法
LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年
[昨年同じ記事](https://qiita.com/umihico/items/64fcf159f68ebd866170)を書きましたが、完全に過去の遺物と化しており、現在の手順はまるで違います。LaravelをコンテナにしてLambdaにデプロイする記事は見つからないので、書きました。
デモサイトとgithubは以下です。
https://w0qw04g8sj.execute-api.ap-northeast-1.amazonaws.com/
https://github.com/umihico/laravel-lambda-docker-bref### curlでプロジェクトが作成できる
パスが動的に設定可能で、そのままアプリ名となります。この場合`larademo`というフォルダが作成され、配下に展開されます。
“`bash
curl -s https://laravel.build/larademo | bash
“`### docker-composeがデフォルトでパッケージされている。
即座にコンテナ内でcomposer, phpコマンドを使わせてくれ
この令和時代にサーバーレス知らないのはヤバみ
## はじめに
皆さま。ごきげんよう。
僕が愛して止まないデヴィ夫人の冒頭挨拶から本記事はスタートすることにします。タイトルが「見たらわかる失礼なやつやん」で大変申し訳ないと思っております。よくあるただの煽り文句を使いました。
僕も最近までサーバーレス知りませんでした。## Serverless とは
サーバー管理が不要なアーキテクチャです。
自前でサーバーを用意/管理するとなると様々な課題と向き合うかと思います。例えば、OS設定や容量管理、負荷管理、ランニングコスト、アイドル時のリソース管理、アクセス制御、セキュリティ管理などキリないですが、サーバーレスアーキテクチャを利用することで、そんなものは気にしなくて良くなり、プログラムロジック(本質)の開発に注力することができるかと思います。熱盛ですね。
現代では、モノリシックよりもマイクロサービスなどの疎結合な特性を持つアーキテクチャが注目されていると思いますが、その一部として、サーバーレスアーキテクチャを導入するという形も考えられると思います。
## [Serverless Framework](https://ww
DynamoDBからCSVをエクスポート&データ登録 Lambda APIGateway
# 記事の内容
ローカル上のCSVファイルにあるデータをDynamoDB上に登録する。また現在時点のDynamoDBのデータをローカルにCSV出力する必要が出てきたため、簡易的な実装を行いました。メモがてら記事に# 構成とDB外観
## 構成
構成は以下の通りです。DynamoDBへアクセスする度にログが残るよう、ClaoudWatchと連携しています。![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323251/a77be9a6-9d1f-378f-30c7-32b1ec93aaf5.png)
# DB外観
テーブル名が`kokyaku`パーティションキーが`id`となっています。今回はサンプルとして予め2件のデータを登録した状態でスタートします。![スクリーンショット 2021-02-23 2.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323251/a1a19ae5-04
SAMをつかったサーバーレスな郵便番号APIを紹介!
# SAMをつかったサーバーレスな郵便番号APIを紹介!
## はじめに
郵便番号から住所を検索するAPIってなんで無料で存在しないんだってよく思います。(ほんとにないかはよく調べてないので知りませんが。)
なので簡単にデプロイして公開して自動更新までしてくれるアプリケーションをSAMをつかって作成したので紹介します。
またSAMのチュートリアルに丁度いいくらいの量だと思いますので、ぜひ[実装解説](#実装解説)も見てみてください。
この記事で紹介しているソースコードはこちらです。
https://github.com/Cohey0727/zip-code-app### 構成について
日本郵便株式会社は郵便番号と住所を紐づけたCSVファイルを公開しています。https://www.post.japanpost.jp/zipcode/download.html
ですがCSVファイルのままだとWeb画面などで利用するのは難しいです。
そこでLambdaでファイルをダウンロードして検索可能な状態でDynamoDBに格納する関数とそれをAPIとして公開する関数、定期的にそれらを更新するイベ
コピペで出来る!LambdaとAPI Gatewayを使って簡単にAPIを作る手順
散々既出ですが、自分の備忘録を兼ねてメモを残しておきます。
## 構成
Webクライアント – API Gateway – Lambda (Python) – S3
S3上にあるjsonオブジェクトを単純に返すだけのシンプルなAPIです。
## S3にjsonを配置する
Bucket名は何でも良いですがグローバルでユニークである必要があるので適当な数字をつけるなど工夫して下さい。
今回は“`test-lambda-api-12345“`としました。(※1)![b1511a8403885c4bf3f5877875cee810.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229008/717354c4-829d-511b-fe2c-e638aab2eab4.png)
以下のようなjsonを作り、“`hello.json“`という名前でBucket上に保存します。
“`
{
“greeting”: “Hello, World!”
}
“`![58babbdd034
LambdaからS3を利用する
# はじめに
[チュートリアル: Amazon S3 で AWS Lambda を使用する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)で公開されているチュートリアルを試しながら、LambdaからS3を利用した時のメモになります。
(Cloud9の環境構築は[Cloud9_環境構築2021](https://qiita.com/mokoberu/items/7810eab2b2852f10cac9)にまとめています。)## S3にアップロードされる画像のサムネイルを作成する
1. IAM コンソールの [Roles] ページを開きます
1. [ロールの作成] を選択します
1. 次のプロパティでロールを作成します
1. [信頼されたエンティティ] – [AWS Lambda]
1. [Permissions (アクセス許可)] – [AWSLambdaExecute]
1. ロール名 – lambda-s3-roleチュートリアルにあるサンプルを準備します。
“`conso
Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする
# Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする
##### 概要
AWSのLambda経由でmultipart/form-dataできたものを、S3にアップロードする。
##### 小言
clientでそのままS3に送る実装や、Blob化してファイルを送信しているのはよく見るが、めんどくさいし通常のApiならmultipart/form-dataを利用する方が多く(~~多いと思ってる~~)、なんでClientがApiとLambdaで変更しないといけないか不思議に思ったため。##### Dependent
– [multipart/form-dataをLambdaで利用する](https://qiita.com/Gma_Gama/items/858f32181ef288ba8d8d)
##### Result
– [レポ](https://github.com/Ntakuya/sam-multiple-form-data-sample/tree/feature/multipart-form)
## TL
Amazon API GatewayのLambda Authorizerのレスポンスに注意
API GatewayのLambda Authorizerでハマったので、原因調査の覚書。
## 症状
Lambda Authorizerで認証すると、アクセス許可しているはずなのに、認証失敗する。
サーバーからは500番のステータスコードが返される。
サーバー側のログを見る限り、リクエストはLambda AuthorizerのLambdaまでしか到達できていない。AuthorizerのLambda関数から返しているポリシーは下記のとおりであった。
“`json:Authorizerのレスポンス
{
“principalId”: “52e60f29-a7c8-4665-99ea-1ec8f7fecb81”,
“policyDocument”: {
“Version”: “2012-10-17”,
“Statement”: [
{
“Action”: “execute-api:Invoke”,
“Effect”: “Allow”,
Lambdaから同一アカウントの異なるリージョンのLambdaを呼び出す
# 構成
![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/27d13986-824f-ddbc-f33a-9422b8bcdf4a.png)
# 呼び出し先の設定
コードは適当です。
“`py:呼び出し先
def lambda_handler(event, context):
test = “呼ばれたよ!”
return test
“`Lambdaからの呼び出しを許可するためのアクセス許可を付与します。
同一アカウント同一リージョン間でのLambda呼び出しでは必要ありませんが、異なるリージョン間で呼び出す場合は必要になるようです。
異なるアカウント間でLambdaを呼び出したことはありませんが、おそらく今回のようにアクセス許可を付与する必要があると思います。
ただしこのポリシーは全てのアカウントからLambdaを使用できてしまうので、ソースアカウントを指定したポリシーを使用した方がいいでしょう。“`json:リソースベース
【boto3】LambdaでS3のディレクトリ削除
LambdaからS3のディレクトリ削除、正確にはS3にはディレクトリがないので同一prefixのオブジェクトの削除をするやり方です。
“`python:delete_objects.py
def lambda_handler(event, context):
s3 = boto3.resource(‘s3’)
bucket = s3.Bucket(‘your_bucket_name’)
bucket.objects.filter(Prefix=”insert/prefix/name/”).delete()
“`上記コードのバケット名とPrefixを環境に合わせて変更しましょう。またLambdaのロールにS3への削除権限が必要なのでそれも付与しておきましょう。
tipsですがやり方調べるのに時間がかかったり、冗長なやり方を多く見かけたので記事にしておきます。
[AWS] CloudWatch Logsを監視し、Slackに通知するLambda関数の例
# 概要
Lambdaを使用してCloudWatch Logsを監視し、Slack通知を作ったときのLambda関数のソースの共有です。以下の解説は省略します。
– CloudWatch Logsへログの出力
– Lambda関数の登録方法
– Slack Incoming Webhookの設定# Lambda関数(Python3)
LaravelのログをJSON形式にしたものを処理しています。
ご自身の環境に合わせて修正してください。“`python
# -*- coding: utf-8 -*-
import base64
import json
import urllib.request
import zlibdef lambda_handler(event, context):
# print(“Received event: ” + json.dumps(event, indent=2))
data = zlib.decompress(base64.b64decode(event[‘awslogs’][‘data’]), 16+zlib.
PyTorch on Lambda で MNIST の推論を実行する API を作成する(AWS CDK)
# はじめに
Docker イメージが Lambda で実行できるようになり、イメージも 10GB までとなったため、機械学習の推論 API のロジックを Lambda で実行できるかを試してみました。
今回は PyTorch で作った MNIST のモデルを置いてみます。## 環境
– Python 3.8
– PyTorch 1.6.0 CPU
– PyTorch 1.1.8## API Gateway + Lambda で画像を受け取る
まずは、API なので画像を受け取って Lambda で処理できる形まで持っていく必要があります。こちらは長くなったので別記事に記載します。以下の記事の内容が完了していることを前提とします。
[画像をAPI Gateway+Lambdaで受け取って Pillow で処理する(AWS CDK) – Qiita](https://qiita.com/ou-mori/items/f0045028b64e0263c3dd)## モデル作成
この記事で詳細は解説しませんが、以下のように別途ディレクトリーを作成して PyTorch モデル
画像をAPI Gateway+Lambdaで受け取って Pillow で処理する(AWS CDK)
# はじめに
API Gateway + Lambda で Post された画像を Pillow で処理したかったため、AWS CDK で環境構築してみました。
## API Gateway + Lambda(AWS CDK)
### プロジェクト初期化
AWS CDK では API Gateway と Lambda を構築します。今回は Python で構築します。
プロジェクト初期化コマンドは以下の通りです。作成するディレクトリー名は任意です。今回は `qiita-aag-image` としています。“`zsh
$ mkdir qiita-aag-image
$ cd qiita-aag-image
$ cdk init –language=python
“`### インフラコード
qiita_aag_image ディレクトリーに qiita_aag_image_stack.py が作成されているため、編集します。API Gateway や Lambda の Id は好きな名前をつけてください。
また、今回想定する画像形式は png とします。こちらも状況
【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 ossns = 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 osdef 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)様 には何度も質問させていただき、都度ご丁寧に回答いただきましたことを、大変感謝しております。この場をお借りして御礼申し上げます。– [