- 1. ①NiceHashマイニング収益をAWS Lambda×SNSでメール通知する
- 2. AWS Lambda + API Gateway POSTのパラメータ取得でハマった
- 3. AWS BatchでJavaのコンテナをLambda経由で起動する時にシステム環境変数を渡す
- 4. いまさらSlackとLambdaとDynamoを連携させてみた
- 5. AWS Lambda matplotlibでグラフ作成、S3にアップロードする
- 6. 【SeverlessFramework 公式サンプル】Lambda + DynamoDB + SeverlessFrameworkでTODOリストAPIをデプロイしてみる
- 7. AWS Lambdaでファイルを作成・編集しS3にアップロードする
- 8. 【APIGateway+Lambda】APIキーを必要とするAPIでアクセス制限
- 9. 【APIGateway+Lambda】AWS外からのパラメーターを使用する
- 10. OpenCVをAWS Lambda + Python + Serverless Frameworkで動かす
- 11. LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年
- 12. この令和時代にサーバーレス知らないのはヤバみ
- 13. DynamoDBからCSVをエクスポート&データ登録 Lambda APIGateway
- 14. SAMをつかったサーバーレスな郵便番号APIを紹介!
- 15. コピペで出来る!LambdaとAPI Gatewayを使って簡単にAPIを作る手順
- 16. LambdaからS3を利用する
- 17. Python AWS Lambda でmultipart/form-dataのファイルをS3にアップロードする
- 18. Amazon API GatewayのLambda Authorizerのレスポンスに注意
- 19. Lambdaから同一アカウントの異なるリージョンのLambdaを呼び出す
- 20. 【boto3】LambdaでS3のディレクトリ削除
①NiceHashマイニング収益をAWS Lambda×SNSでメール通知する
#目次
– [1.背景](#1-背景)
– [2.構成/構築手順](#2-構成構築手順)
– [2-1.Lambdaの構築](#2-1lambdaの構築)
– [2-1-1.IAMロールの作成](#2-1-1iamロールの作成)
– [2-1-2.Lambda関数の作成](#2-1-2lambda関数の作成)
– [2-1-3.ソースコードのデプロイ](#2-1-3ソースコードのデプロイ)
– [2-1-4.レイヤー作成](#2-1-4レイヤー作成)
– [2-1-5.タイムアウト値の延長](#2-1-5タイムアウト値の延長)
– [2-2.APIによる収益情報取得](#2-2apiによる収益情報取得)
– [2-3.EventBridgeによるトリガー定義](#2-3eventbridgeによるトリガー定義)
– [2-4.S3バケットへの書き出し・読み込み](#2-4s3バケットへの書き出し読み込み)
– [2-5.Amazon SNSによるメール通知](#2-5amazon-snsによるメール通知)
– [3.
AWS Lambda + API Gateway POSTのパラメータ取得でハマった
フロントエンドからPOST通信でアクセスするAPIをLambda+APIGatewayで作っていた時にハマった話を備忘録
申し込みフォームで登録後に完了メール送信を行うロジックを作っていた。
“`react
const onSubmit = async () => {
const params = {
to: email,
name: name,
email: email,
tel: tel,
zipcode: zipcode,
address: prefecture + ” ” + address,
message: message,
};const res = await axios.post(
“https://sample/send”,
params,
{
headers: { “Content-Type”: “multipart/form-d
AWS BatchでJavaのコンテナをLambda経由で起動する時にシステム環境変数を渡す
# この記事の対象
Spring Boot
EC2コンテナ
AWS Batch
AWS Lambda (node.js 14)# 概要
Spring Bootで作成したバッチアプリケーションをAWS Batchに登録。
ジョブをLambda関数経由で呼び出す際にコンテナ起動パラメータを渡す方法です。# なんでそんなことを?
Batch用に作成したJavaコードに、共通処理が多いため、複数のジョブ起動が実装されており、システムプロパティ(@ConditionalOnPropertyアノテーション)を利用して、実行時に起動するジョブを選択できるようにしました。その際に、Lambda関数側でJavaのシステムプロパティを渡す方法です。
# 詳細
サンプルはAWS Lambda(node.js 14)です。“` sample.js
const AWS = require(‘aws-sdk’);module.exports = async function (param) {
var batch = new AWS.Batch({
httpOpti
いまさらSlackとLambdaとDynamoを連携させてみた
いまさらですが、LambdaとDynamoを触ってみたのでまとめておきたいと思います。
APIGateway/Lambda/Dynamoなど触ったことのない人の助けになれば幸いです。今回やってみたことは以下です
![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/874795/9dc00dfa-cf71-da91-4903-8555f830003e.png)
1. SlackのAppにメッセージを送信
2. Slackのevent apiでAPI Gatewayのエンドポイントにリクエストを送る
3. Lambdaで、飛んできたリクエスト内容をDynamoDBに保存
4. Lambdaで登録した旨をSlackに返信## 作成手順
以下の順序で作成を行います1. Lambda関数の作成
2. API Gatewayでエンドポイントを作成
3. Slackのevent APIの設定と、メッセージの送信
4. CloudWatchでログを確認する
4. Lambdaでのメッセージ処理
AWS Lambda matplotlibでグラフ作成、S3にアップロードする
# lambda
権限の問題によりtmpディレクトリ下に保存する。
“`lambda_function.py
import matplotlib.pyplot as plt
import boto3def upload():
fig = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
fig.savefig(‘/tmp/sample.png’)
client = boto3.client(‘s3’)
client.upload_file(
‘/tmp/sample.png’,
‘lambda-upload-test-0227’,
‘sample.png’
)def lambda_handler(event, context):
upload()
return 0
“`## matplotlibのインポート
こちらの記事を参考にmatplotlibのARNをレイヤーに追加する。
https://qiita.com
【SeverlessFramework 公式サンプル】Lambda + DynamoDB + SeverlessFrameworkでTODOリストAPIをデプロイしてみる
みなさん、アウトプットしてますか?
**「アウトプットされない知識は脆弱性」**、や **「インプットしてアウトプットしないのは知的な便秘」** というパワーワードもあるので、アウトプットします。
SeverlessFramework 公式サンプルを試してみたので、その手順について書いておきます。
## 目的
– DynamoDBが必要になってきそうだから、触って慣れておきたい。
– CURDはやってみたことのある経験が欲しい。##ステップ
### 1. テンプレートを探す。
https://www.serverless.com/examples/ という公式の、examples をあさり、Lambda + DynamoDBのテンプレ見つけて立ち上げます。
今回は、最終更新が6ヶ月前だった、[AWS | Typescript REST API With DynamoDB
](https://www.serverless.com/examples/aws-node-typescript-rest-api-with-dynamodb)を使います“`
$ npm
AWS Lambdaでファイルを作成・編集しS3にアップロードする
# サンプルコード
– Body・・・ファイルに書きたい内容
– Bucket・・・アップロード先のバケット
– Key・・・アップロードしたときのファイル名“`lambda_function.py
import boto3def upload():
client = boto3.client(‘s3′)
response = client.put_object(
Body=’Hello from Lambda!’,
Bucket=’my-bucket’,
Key=’sample.txt’,
)def lambda_handler(event, context):
upload()
return 0
“`# サンプルロール
既存のラムダロールに追加する。
“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: “s3:PutObject”,
【APIGateway+Lambda】APIキーを必要とするAPIでアクセス制限
APIはすでに作成されておりデプロイ状態にある前提とします。
まずは**使用量プラン**をクリック
![スクリーンショット (160)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/ab8d8948-cf4a-e5fc-6f26-70f29f3d710a.jpeg)**作成**
↓![スクリーンショット (161).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/f3a042a1-3675-5b4f-d1f2-475af1aa4b9e.png)
作成に必要な設定を行います。
このリクエスト数を越えてしまうと
429 Too Many Requests というエラーが出てアクセスができなくなります。![スクリーンショット (162).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53644
【APIGateway+Lambda】AWS外からのパラメーターを使用する
## 先ずはLambda関数を作成
今回は与えらえた値を返すだけの**test_return_valuables**という
シンプルな関数をPythonで作成します。![スクリーンショット (154).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/f28ce3f9-7fd9-00d7-2747-81e75bcfb34e.png)
## APIGatewayでAPIを作成
![スクリーンショット (150)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/0b50e9a4-5a7d-4902-6a0e-88b12bd91e7c.jpeg)
**REST API**を選択し構築。
さらにメソッド作成で**POST**を追加します。
![スクリーンショット (158).png](https://qiita-image-store.s3.ap-northeast-1.amazona
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出力する必要が出てきたため、簡易的な実装を行いました。メモがてら記事に。尚、DyanmoDBのScan操作については1回のリクエストにつき、最大1MBまでしかデータを取得できないので、それ以上のデータをダウンロードしたい場合、別の実装を行う必要があります。# 構成と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-2
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ですがやり方調べるのに時間がかかったり、冗長なやり方を多く見かけたので記事にしておきます。