- 1. Lambdaにライブラリを乗せるときにLayersを使ったら便利
- 2. DynamoDBのチュートリアルを読み解く【5: トリガーを作成してテストする】
- 3. LambdaバージョンをAWS CDKで構築する際にハマったエラー
- 4. (AWS) API GateWay + Lambda でAPIを実行してみた。
- 5. DynamoDBのチュートリアルを読み解く【4: Lambda 関数を作成してテストする】
- 6. Amazon S3 と AWS Lambda を使って PPAP を回避します。
- 7. LambdaのNode.js 12.xでimageMagickを使用する
- 8. EC2(インスタンス)が削除されて残ってしまったボリュームの削除
- 9. AWSマネージドでEC2サーバ群の1台にcronする
- 10. AWS Lambda + LINE Notify で帰宅時に傘を忘れないようにLINEへ通知する
- 11. [新機能] AWS BackupがEC2のバックアップに対応しました
- 12. Go lambda のデフォルト環境変数
- 13. よくある表情解析LINE Botを作った
- 14. Lambda関数に手を加えず、API GatewayのLambdaプロキシ統合を切り替えられるか
- 15. Serverless Frameworkで行うLambdaのコールドスタート対策
- 16. 【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる
- 17. Elastic Beanstalk 指定時間だけインスタンスタイプを上げる
- 18. Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応
- 19. 画像から人物の性別、年齢を推測するLine botを作ってみた
- 20. MediaLiveで出力したアーカイブファイルをMP4に自動変換する
Lambdaにライブラリを乗せるときにLayersを使ったら便利
Lambdaにデプロイするときライブラリも一緒にデプロイする場合があると思いますが、いざデプロイするとちょっとした修正がコンソール上でできず、ちょっとめんどくさかったです。
それについてぼやいたらLayersを使えばどうかとアドバイスをもらったので、その備忘録。## デプロイする関数
APIをちょっとたたく関数。言語はPython。## LambdaのLayers機能
公式。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
ライブラリをレイヤーとして取り込め、共通ライブラリとして利用できる。
そのためLambda関数にライブラリを取り入れる必要がない。
他のユーザが公開してるLayerも使えるらしい。## そのままデプロイすると
ライブラリだけで4.5MBでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452110/5c17653e-7869-eb74-e0b
DynamoDBのチュートリアルを読み解く【5: トリガーを作成してテストする】
# はじめに
今回も[DynamoDBのチュートリアル](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)を実施しました。
最後はLambdaでのトリガー作成です。(バックナンバー)
[1.DynamoDB テーブル作成](https://qiita.com/kkino1985/items/f9091c1e1efb35009ce7)
[2.IAMポリシー/ロール作成](https://qiita.com/kkino1985/items/a087bc3077f36b4b1e21)
[3.SNSトピック作成](https://qiita.com/kkino1985/items/f40d950cfd6d464635fa)
[4.Lambda関数作成/テスト](https://qiita.com/kkino1985/items/4850f4bba7b8418c2cc8)# 5.1 トリガー作成用ARN情報取得
今回はDynamoDB
LambdaバージョンをAWS CDKで構築する際にハマったエラー
## 概要
Lambda functionとそのバージョンの発行をAWS CDKにて構築する際に「Lambdaコード更新と発行されるバージョン番号の関係」を正しく理解できず、エラーに悩みました。
そこで、AWS CDKでLambda functionとそのバージョンを発行する場合の挙動について検証しました。
本記事では、これらの検証結果とその解説を記述しています。
## サンプルコード
以下GitHubにて公開しています。
[YoshinoriSatoh/o-aws-lambda-version-cdk](https://github.com/YoshinoriSatoh/o-aws-lambda-version-cdk)
## Lambda Version
Lambda versionについては、以下参考記事でも説明されています。
[https://qiita.com/quotto/items/4c364074edc69cb67d70](https://qiita.com/quotto/items/4c364074edc69cb67d70)
また、公式ドキュメント
(AWS) API GateWay + Lambda でAPIを実行してみた。
# Amazon API GateWay を使って、Lambdaで作成した関数を実行してみました。
<大まかな手順>
– AWS Lambdaで関数作成
– Amazon API GateWayで API作成
– APIを実行して、レスポンスを取得`LambdaとAPI GateWay作成のリージョンは「東京 (ap-northeast-1)」に設定して進めますので、事前にリージョンをご確認ください。`
## AWS Lambdaでの設定
ではさっそく始めます。
まず、Lambdaで関数を先に用意します。Lambdaのコンソール画面にて、左側のメニューから「`関数`」→「`関数の作成`」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/05145779-fe1c-061c-2221-bb54f4d18242.png)—
関数作成ページが表示されるので「`一から作成`」にチェック→`関数名`入力→`ランタイム`選択→「`関数を作成`
DynamoDBのチュートリアルを読み解く【4: Lambda 関数を作成してテストする】
# はじめに
引き続き[DynamoDBのチュートリアル](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)を実施しました。
今回はLambdaです。(バックナンバー)
[1.DynamoDB テーブル作成](https://qiita.com/kkino1985/items/f9091c1e1efb35009ce7)
[2.IAMポリシー/ロール作成](https://qiita.com/kkino1985/items/a087bc3077f36b4b1e21)
[3.SNSトピック作成](https://qiita.com/kkino1985/items/f40d950cfd6d464635fa)# 4.1 Lambda用Javascriptファイル作成
javascriptは専門外なので深入りはしませんが、使われているメソッドをピックアップします。
‘use strict’;
var AWS = r
Amazon S3 と AWS Lambda を使って PPAP を回避します。
みなさん、PPAP をご存知ですか?
以前、流行した、ペンパイナポーアッポーペン ではなく…>PasswordつきZIP暗号化ファイルを送ります
>Passwordを送ります
>Aん号化(暗号化)
>Protocolのことです。
https://www.jaipa.or.jp/event/isp_mtg/asahikawa_190912-13/190913-3.pdfつまり、社外に添付ファイルを送る際に使われるプロトコルです。
このプロトコルにはいろいろと問題があるといわれています。
例えば、パスワードを送り忘れたら受信者はいつまでたっても開けません。
受信者はパスワード入りメールがくるまで待ってないといけません。
そして、そもそも、メールでパスワードを送ってよいのかしら。。。そんな PPAP を使わないで済む仕組みを Amazon S3 と AWS Lambda で作りました。
## 予備知識
Amazon S3 には事前署名 URL というものを生成する機能があります。
これを使うことで、期間を指定して(執筆時点で最大7日)、URLを知ってる人だけが
LambdaのNode.js 12.xでimageMagickを使用する
# 初めに
Webアプリケーションから画像をアップロードする際にS3にファイルをputし、Lambdaでサムネイルを生成して公開用のバケットに保存する処理を構築していました。(前任者が・・・)
新たに同じようなシステムを構築するのに参考にしようとLambdaの関数のコンソールにアクセスすると以下のメッセージが表示されていました。
![FireShot Capture 494 – createRecipeThumbnail – Lambda_ – https___ap-northeast-1.console.aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412592/e29157a3-ee88-059c-e56c-df23b0e98485.png)
Node.js 8.10を使っているので変更しないといけないよう。(把握しとけよ)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html# 対応
EC2(インスタンス)が削除されて残ってしまったボリュームの削除
#問題
複数ボリューム持ちのAMIからインスタンス作成時、「終了時に削除」にチェックを忘れると、インスタンスを終了してもボリュームが迷子になって残る。
存在監視より定期的に掃除しましょう。#lambda
“`python:python3.8
import json
import boto3def lambda_handler(event, context):
client = boto3.client(‘ec2′, region_name=’ap-northeast-1’)res = client.describe_volumes(
Filters = [
{‘Name’: ‘status’, ‘Values’: [‘available’]}
,{‘Name’: ‘tag:lambda’, ‘Values’: [‘delete me’]} #status条件だけで足りない時
]
)
#print(res)for vol in re
AWSマネージドでEC2サーバ群の1台にcronする
AutoScalingなどEC2冗長化されたシステムにて、いい感じに1台だけからバッチしたい。
そう思ったときにサクッと出来る仕組みがなかったので作ってみました。## 要件とアイデア
やりたいことは次のような要件です。* EC2内でコマンド実行したい
– サーバ内ミドルウェアに依存した処理やDB接続などを行う場合、Lambdaでやるとsecretsや通信経路などややこしくなります。
* AutoScaling環境など、複数のEC2があるけど1台だけで実施したい
– 集計をしてDBに書き込むなどのようなバッチだと複数台から同時実行されると困ります。
* crontab置きたくない
– AutoScalingではcrontabを1台だけ有効など難しく、また全部に置いて排他を行うのもややこしい。これらを以下のようにAWSサービスを組み合わせれば解決できそうです。
* CloudWatch EventsのタイマーでLambdaを発火させる
* LambdaにてEC2リスト取得&1台だけ選ぶ
* 同Lambda内から、選んだ1台に対してSSM RunCommandでコマ
AWS Lambda + LINE Notify で帰宅時に傘を忘れないようにLINEへ通知する
# はじめに
誰でも一度は、会社や学校に傘を置き忘れてしまった経験ありますよね?
もし翌日に雨が降ったら傘がなくて絶望です。。。そこで、**帰宅時に傘を忘れないようにLINEに通知してくれるシステム**を作りました!
# 完成物
![IMG_1366.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329009/8ac2cb08-a85c-9824-ec7f-b11fd69200e6.png)
以下の記事で紹介されている、雨だったら朝に傘を持つように通知するシステムをベースにさせていただきました。
[Python + AWS Lambda + Line Notify で自動で毎朝Lineに本日のお天気を通知してみた。](https://qiita.com/Yougurut/items/6c5f2bd6f3f29b1ae465)
上記に追加する形で実装し、**雨だったら朝に傘を持つように通知** + **帰宅時に傘を持ち帰るように通知** という二段構えで雨の日をサポートします!
# シス
[新機能] AWS BackupがEC2のバックアップに対応しました
*AWS Backup* で *EC2* の *AMI* が対応されたと聞き、すぐに確認しました。
それまでは、Lambdaでバックアップを日次で取得していましたが、Lambdaの管理の煩わしさや、万が一バックアップが取れていなかった時の不安から解放されそうです。
では、確認していきましょう?# AWS Backup
>[AWS 公式 AWS Backup](https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/whatisbackup.html)ざっくりいうと、AWS内の特定リソースのバックアップを、AWSマネージドで管理できるサービスですね。
基本的には、バックアッププランというものを作成して、ターゲットとなるリソースを指定することで、各サービスの
Go lambda のデフォルト環境変数
# はじめに
`AWS SDK for Go`をLambdaで使用する際に特に設定無しで使用できるので
多分アクセスキーとか環境変数にセットされているんだろうなーと思いつつも
実際に試したわけではないので検証してみました。# 検証
## 検証コード“`Go
package mainimport (
“context”
“fmt”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-lambda-go/lambdacontext”
“log”
“os”
)func init() {
log.Print(“init start”)
showAllEnv()
log.Print(“init end”)
}func Handler(ctx context.Context) (string, error) {
log.Print(“handler start”)
if lambdaCtx, ok := lambdacontext.FromContext(ctx); ok {
log.P
よくある表情解析LINE Botを作った
Qiita を筆頭にいろんなエンジニアの方が既に作っているもので何番煎じか分かりませんが、個人的にサーバレスアプリケーションを作るのが好きなのと、Golang に慣れることを目的として LINE チャネルに画像を送ると表情解析してメッセージを返してくれる Bot を作りました。
## できたもの
こういう感じで本田翼さんの笑顔の画像を送ると
幸福度合いをポイント化して返してくれます。
Lambda関数に手を加えず、API GatewayのLambdaプロキシ統合を切り替えられるか
# はじめに
AWS APIGatewayとLambdaを使ったサーバレスのシステムで、Lambdaプロキシ統合を使用することで、API Gateway側で、Lambda側へ渡すパラメータを細かく設定することなく、Lambda側でコントロールすることが出来るメリットがあります。
このLambdaプロキシ統合を使った連携を前提に開発を行う場合、Lambdaでは、この仕様に沿ったインプットとアウトプットを実装をする必要があります。
参考までに、Lambdaプロキシ統合を利用する場合、Lambdaでは以下のようなインプットに対応した実装が必要です。
リクエストが以下のような場合
“`sh
curl -XPOST \
-H “X-Param-Header:2” \
-d ‘{“param”: 3}’ https://YourApiDomain/xxx?param=1
“`Lambdaに渡されるパラメータ(*event*)は
“`json
{
“httpMethod”: “POST”,
“headers”: {
“X-P
Serverless Frameworkで行うLambdaのコールドスタート対策
# 概要
AWS Lambdaで発生するコールドスタートを軽減させる為の対策を実施します。以前私が書いた、[Serverless FrameworkでLambdaのコールドスタート対策を行う](https://qiita.com/keitakn/items/d1c524a97dc844cb02cc) の2020年版です。
[Serverless FrameworkでLambdaのコールドスタート対策を行う](https://qiita.com/keitakn/items/d1c524a97dc844cb02cc) は少し前までのベストプラクティスでしたが今後はこの記事の方法が推奨されるようになってくると思われます。
# 対象読者
– [Serverless Framework](https://github.com/serverless/serverless) でAWS Lambdaの開発を行っている方# Lambdaのコールドスタートについて
[こちら](https://qiita.com/keitakn/items/d1c524a97dc844cb02cc#%E3%82
【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる
「困ったら大体lambda(とS3)」「lambda イズ 仙道」、AWSの基本ですね()
ただ彼は基本的に固定IPを持ちません。仙道同様、気まぐれです。
今回はそんな彼に**固定IPを付与する方法**をまとめます。
また、結果として**VPC&サブネットへ所属させる方法**にもなります。
# どんな時に役立つか
例えば– 申請式で特定IPからのアクセスしか認められないサービスとの連携
– インスタンス内で動くIP制限付きサイトの死活監視
– プライベートサブネット内のインスタンスと通信※インスタンスそのものの監視はcloudwatchでどうぞ
# 構成図
以下の形です。
![lambdaから外へ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488789/4b7a4f6f-eaf0-a254-287c-d4c18e82e4a6.png)
# 手順
手順的には大まかに以下の形です。
1. lambdaをVPC内のプライベートサブネットに設置
2. lambdaのロールにvpc、eniに関する権限
Elastic Beanstalk 指定時間だけインスタンスタイプを上げる
#改善
12:00~13:00のみ負荷のかかるElastic Beanstalkの環境がある。
インスタンスタイプの調整で費用を抑える。
PMから指示がなくてもインフラはそうする。#lambda_function.lambda_handler
“`python:python3.8
import json
import boto3
from datetime import datetimedef lambda_handler(event, context):
envName = str(event[‘env-name’])instanceType = ”
currHour = datetime.now().hour + 9if currHour > 24:
currHour = currHour – 24print(currHour)
if(currHour == 11): #11時代に上げる
instanceType = ‘c5.xlarge’
elif
Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応
# はじめに
今回、LambdaランタイムNode.js8.10のサポート終了に伴い、Node.js10.xへアップデートを行いました。
結構詰まった部分などが合ったので、その備忘録として残します。## LambdaランタイムNode.js8.10のサポート終了について
以下、AWS公式より
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html2020/2/3を持ってLambdaのランタイムNode.js8.10の更新が終了します。
これに伴い、Node.js8.10で実装しているLambdaのランタイムを10.xにバージョンアップをしま
画像から人物の性別、年齢を推測するLine botを作ってみた
# 概要
lineを使って、送信した画像から
性別、年齢予想、表情分析を実施するbotを作成しました。こんな感じ
画像を送ると、分析した結果が返ってくる(3人まで同時に写っててOK)
ソースコードは[こちら](https://github.com/vesono/photo_recog_line_b
MediaLiveで出力したアーカイブファイルをMP4に自動変換する
#はじめに
MediaLiveでライブ配信を行う際、アーカイブを残しておくことがあるかと思います。
2020年1月現在では、MediaLiveのアーカイブ出力はtsファイル形式のみ対応しています。tsファイルはVLCなどの動画プレイヤーを使わないと再生することができないため、
利用しやすいmp4ファイルに変換する必要があるという機会に何度か遭遇しました。そのときに構築した自動でmp4に変換する仕組みを簡単に記載しておきます。
##ざっくり構成図
MediaLive -> S3 -> Lambda -> MediaConvert -> S3
##MediaLive
Output Groupで「Archive」を選択します。##S3
tsファイルを置くフォルダと
mp4フ