- 1. Lambdaの説明とlambdaのlayersの作り方
- 2. 【AWS CDK】API GatewayからLambdaを通さずに直接DynamoDBにアクセスしGetItemするAPIを作ってみた
- 3. SpringBoot(+MyBatis)を用いてLambda + APIGatewayのAPIを製造する
- 4. Lambda Node ランタイム v12 → v14 update 備忘録
- 5. SQS、SNS、SNS+SQSからのイベントを比較してみた
- 6. Lambda 関数で EC2 インスタンス作成時にエンコードされた認証メッセージが出力された時の対処方法
- 7. Lambda boto3 の run-instances でEBSボリュームを暗号化した時の嵌り
- 8. Amazon Lambda デプロイ&アップデート用のスクリプト(PowerShell)のテンプレ作ってみた
- 9. S3トリガー(オブジェクト作成イベント)によるLambda実装の注意点
- 10. AWS Lambda(Python)にインストールされているライブラリ一覧
- 11. APIGateway+Lambdaでミドルウェアを使う
- 12. common-lispにおけるpackageとsymbolとintern
- 13. SESで受信したメールを、Lambdaで適切に変換し、件名や本文を取得する
- 14. [AWS Puppeteer on Lambda ] ロングスクロールページをスクショする
- 15. SNSに飛んできたアラートをTypetalkに投稿する
- 16. 【AWS】【CloudWatch/Lambda】ログ監視のメール通知
- 17. LINEグループにBotからメッセージ送信する
- 18. 【Todo整理】S3にCsvUpload > Lambda起動 > Upしたファイル取得 > RDSへ登録
- 19. Lambdaでのアクセス許可追加方法の備忘録
- 20. 【公式ハンズオン】Node.js+Prismaを、Serverless Frameworkを使用してAWS Lambdaにデプロイする
Lambdaの説明とlambdaのlayersの作り方
## lambdaとは
AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。インフラストラクチャのプロビジョニングや管理をすることなくコードを実行コードを書いて、.zip ファイルやコンテナイメージとしてアップロードするだけです。
### サーバーレス
サーバーではなくて、その場でコードを実行する環境です、trigger(s3,SQSなど)で実行しても良い、定期実行もCloudwatchイベントからでも出来ます、サーバーと違って使ってる分だけを支払いします。同時実行も1秒で1000件まで出来ますのでインフラが楽です。
### 使い方
Lambdaを作るには割と簡単です!名前と言語とアーキテクチャを選べたらもうコード修正とテストが出来ます。
名前はエンドポイントになりますので気をつけてお名乗りください。
環境としては色々の言語は出来ます。
![Screen Shot 2022-05-27 a
【AWS CDK】API GatewayからLambdaを通さずに直接DynamoDBにアクセスしGetItemするAPIを作ってみた
DynamoDBから値を取ってきて返すAPIを作成するにあたり、Lambdaを通さずに直接DynamoDBから値を取れることを知ったので試してみました。
## 作るもの
API GatewayからLambdaを通さずにDynamoDBに直接アクセスし、API Gateway + DynamoDBでgetItemするAPIを作成します。
今回は、`GET books/{title}`を叩くと以下のような形でDynamoDBに保存されている値を整形して返却してくれるようなAPIを作成していきます。“`
{
“title”: “how_to_book”,
“price”: 1000
}
“`## 構成
シンプルな構成です。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699394/f6843e74-d9fa-7672-cdd6-c58da1869fb4.png)## 環境
“`
cdk –version
2.10.0 (build e5b301
SpringBoot(+MyBatis)を用いてLambda + APIGatewayのAPIを製造する
SpringBootをLambda関数に実装してAPIGatewayでクライアント側から呼び出すAPIを製造する機会があり、何回か障壁にぶち当たったので、簡単な手順や注意点を備忘録としてまとめておくことにしました。
今回はMyBatisをORマッパーとして採用しましたが、JPAなどでも問題なく同様の手順で製造できるかと思われます。
バックエンド中心の話になります。今回はAWS CodeStarでLambda+SpringBoot環境を自動生成しています。
参考URL:https://qiita.com/ogu1101/items/b30a5ccbc28085462dff# pom.xml
Codestarで自動生成されるJavaプロジェクトを使用したため、最初から何点か依存するライブラリの記述は書かれていましたが、私の方で以下を追加しました。#### SpringBootのバージョンについて
今回自動生成されたプロジェクトのSpringBootのバージョンが2.0.3でしたが、2.3.0までアップグレードできることを確認しました。
2.4.0以上になると、デプロイ時に失敗
Lambda Node ランタイム v12 → v14 update 備忘録
# はじめに
Lambda Node ランタイム v12が2022/04でサポートが終わるため、v14に更新しないといけないProjectが存在していました。
その際の手順として備忘録を残したいと思います。
ただ、本記事ではv14へ上げるというよりは、ランタイムのバージョンを上げる際にどういうことをやったのかを記載したいと思います。# 環境
– ローカル環境端末
– macOS Big Sur
– AWS SAM CLI
– Docker
– Lambda ソース環境
– AWS SAM で構築を実施
– ApiGateway & Lambda(TypeScript)を構築
– TypeScriptのためwebpackで実行ソースを作成(トランスコンパイル)している
– 利用しているnodeModules群はすべて最新のVersionに更新済み# 手順
私の環境での対応としては以下の流れで実施しました。
1. AWS SAM Template.yamlでNodeRuntimeのVersionを更新
2. AWSアカウントにデプロイを実施
3. AW
SQS、SNS、SNS+SQSからのイベントを比較してみた
## はじめに
業務でLambdaと組み合わせてSQSやSNSをよく使うのですが、イベントを正しくハンドリングする必要があります。
イベントの構造についてドキュメント等があるかもしれませんが、検証した方が早いと思い、自分で検証環境を作って確認してみました。## 概要
以下によるイベントの構造をLambdaでログ出力して検証します。
– SQS
– SNS
– SNS + SQS## 設定
### Lambda
以下のLambdaを作成し、イベントをログ出力します。
“`index.js
exports.handler = async (event) => {
console.log(`event: ${JSON.stringify(event)}`);
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`### IAM
LambdaがSQSの
Lambda 関数で EC2 インスタンス作成時にエンコードされた認証メッセージが出力された時の対処方法
権限が足りないのは明かです。ただ、Action, Resource がわからないので、対応できません。
エンコードされたメッセージをデコードすることにより、対応ができました。
“`
$ aws sts decode-authorization-message –encoded-message
“`関数を作成した時に作成した Lambda の実行ロールに、最小特権のベストプラクティスに則り、一つ一つ出力されたものを追加していきました。
“`
…(snip)…
“Effect”: “Allow”,
“Action”: [
“ec2:“,
…(snip)…
],
“Resource”: [
““,
““,
““,
…(snip)…
]
“`なお
Lambda boto3 の run-instances でEBSボリュームを暗号化した時の嵌り
Lambda 関数で boto3 を利用時、run-instances を使用して EC2 マシンを作成する際にEBSボリュームを暗号化する設定を入れると、インスタンス起動してすぐに Terminate されてしまいました。
“`
…(snip)…
response = client.run_instances(
BlockDeviceMappings=[
{
‘DeviceName’: ‘/dev/xvda’,
‘Ebs’: {
‘VolumeSize’: 20,
‘VolumeType’: ‘gp3’,
‘KmsKeyId’: ‘xxxx-xxxx-xxxx-xxxx-xxxx’,
‘Encrypted’: True
Amazon Lambda デプロイ&アップデート用のスクリプト(PowerShell)のテンプレ作ってみた
“`json:trust-policy.json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “lambda.amazonaws.com”
},
“Action”: “sts:AssumeRole”
}
]
}“`
deploy.ps1
“`powershell:deploy.ps1
#メモリはデフォルト
#Layer不要の場合
$NAME = “LAMBDANAME”#Deploy用
Write-Output “————————————————————-”
$TIMEOUT = 60
$REGION = “us-east-1”
$ROLENAME = “ROLLNAME”
$HANDLERPATH = “main.FU
S3トリガー(オブジェクト作成イベント)によるLambda実装の注意点
# 概要
Lambdaの開発時にS3トリガーとした実装を求められることもある。本記事は、S3トリガーを実装するときに注意すべき点を記載しておく。# 実装イメージ
S3バケットのオブジェクトをトリガーにLambda関数が呼び出される
![s3_lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54819/a885b981-92a8-88f9-ebe7-b69e7ad06f94.png)# S3トリガーによるイベントタイプ
– オブジェクトの作成イベント
– オブジェクトの削除イベント
– オブジェクトの復元イベント
– 低冗長化ストレージ (RRS) オブジェクトのイベントロスト
– レプリケーションイベント
– S3 ライフサイクルの有効期限イベント
– S3 ライフサイクルの移行イベント
– S3 Intelligent−Tiering 自動アーカイブイベント
– オブジェクトのタグ付けイベント
– オブジェクト ACL PUT イベント馴染みのあるイベントはオブジェクトの作成イ
AWS Lambda(Python)にインストールされているライブラリ一覧
# AWS Lambda(Python)にインストールされているライブラリ一覧
## 概要
AWS Lambdaはサーバーの管理を必要としないプログラム実行環境です。
API GatewayやCloudWatch Eventsなどをトリガーとして設定することで、非常に簡単かつ手軽にコードを動かすことが出来ます。
扱えるプログラミング言語としては、PythonやNode.js, Goなどメジャーな言語はだいたいサポートされていますが、ググって出てくる情報の多さからPythonが使われることが多い印象です。そこで、Lambdaに用意されているPython実行環境にはじめからインストールされているライブラリとそのバージョンを調べたので、調べ方と合わせてまとめました。
## 調べ方
簡単です。
標準モジュールのpkg_resourcesを使うことで、その環境にインストールされているライブラリを一覧表示することができるので、これをLambada自体で実行するだけです。“`python
import pkg_resourcesdef lambda_handler(
APIGateway+Lambdaでミドルウェアを使う
# 背景
Go言語でlambdaを使ってサービス提供するときに、複数エンドポイント共通の処理を入れたくなった。
各エンドポイントに共通の処理を書き込むと、可読性が下がるためミドルウェアとして実装してみた。参考:
https://github.com/mefellows/vesper
https://github.com/aws/aws-lambda-go/blob/main/lambda/handler.go# 前提
`APIGatewayProxyRequest`と`APIGatewayProxyResponse`を利用している。
# 実装
いろいろと既存実装の制約あって`reflect`を利用してごちゃごちゃしているけど、実行速度考えたらできる限り`reflect`使わないで、エンドポイントのハンドラーの引数を`APIGatewayProxyRequest`、戻り値を`APIGatewayProxyResponse`に限定してあげた方がいいかも。
“` go
type LambdaFunc func(context.Context, events.APIGate
common-lispにおけるpackageとsymbolとintern
# common-lispにおけるpackageとsymbolとintern
[Lisp で作る Scheme まとめ : セマンティックウェブ・ダイアリー](http://blog.livedoor.jp/s-koide/archives/1895647.html)
最近common-lispの単体テストをいろいろと書いているのですがなかなかスッキリと書けません。いろいろ試行錯誤する中で、ちょっと大事なこと?に気づいたので記事にしてみます。
初心者が初心者の方に向けて書いている内容となります。当たり前だろ!と言う方には向かない記事ですのであしからず。。。次の記事に行ってくださいませ。
## 別のパッケージにある超便利な関数を使いたいのだが。。。
説明を簡単にするため、超簡単なサンプルを改変していく感じで進めたいと思います。
cho-benri関数が :pkg1 というパッケージにあります。自分は :cl-user にいて、cho-benri関数を利用したいと思うという設定です。。。
cho-benri関数は、リストを受け取り ‘b というシンボルを見つけると、’bbb
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-1118387787Lambdaは最近, /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 TextSendMessagechannel_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(_ _)mUploadした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.htmlhttps://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