Lambda関連のことを調べてみた2020年01月31日

Lambda関連のことを調べてみた2020年01月31日

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

元記事を表示

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 boto3

def 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 main

import (
“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 を作りました。

## できたもの

こういう感じで本田翼さんの笑顔の画像を送ると

iOS の画像 (1).png

幸福度合いをポイント化して返してくれます。

iOS の画像.png

元記事を表示

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 datetime

def lambda_handler(event, context):
envName = str(event[‘env-name’])

instanceType = ”
currHour = datetime.now().hour + 9

if currHour > 24:
currHour = currHour – 24

print(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公式より
スクリーンショット 2020-01-24 14.17.37.png
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html

2020/2/3を持ってLambdaのランタイムNode.js8.10の更新が終了します。
これに伴い、Node.js8.10で実装しているLambdaのランタイムを10.xにバージョンアップをしま

元記事を表示

画像から人物の性別、年齢を推測するLine botを作ってみた

# 概要

lineを使って、送信した画像から
性別、年齢予想、表情分析を実施するbotを作成しました。

こんな感じ
スクリーンショット 2020-01-23 22.38.40.png
スクリーンショット 2020-01-23 22.40.02.png

画像を送ると、分析した結果が返ってくる(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
Qiita用の構成図.png

##MediaLive
Output Groupで「Archive」を選択します。

##S3
tsファイルを置くフォルダと
mp4フ

元記事を表示

DynamoDBでPromiseが使えた(Lambda Node.js)

# はじめに

Lambda(Node.js)でDynamoDBに接続し、値を取得したいときに、
非同期であるために、自分でPromiseで返す関数を作成していた。

コード

“`javascript

/**
* データの挿入を行う。
* @param ddb
* @param params
* @returns {Promise}
*/
exports.addItem = function (ddb, params) {
return new Promise(function (resolve) {
ddb.putItem(params, function (err, data) {
if (err) {
console.log(“PUT失敗”, err, err.stack);
} else {
console.log(“PUT成功”);
resolve(data);

元記事を表示

Lambda + API GatewayでCORSを有効にしているのにCORSでエラーになる

Amazon Pinpoint を使用するために、[チュートリアル: E メール設定管理システムの設定](https://docs.aws.amazon.com/ja_jp/pinpoint/latest/developerguide/tutorials-email-prefs.html)をやってみたら、[ステップ 6: ウェブフォームを作成してデプロイする](https://docs.aws.amazon.com/ja_jp/pinpoint/latest/developerguide/tutorials-email-prefs-part-6.html)で引っかかったので。

## API GatewayでCORSは有効になっている
API Gatewayのメソッドレスポンスではこんな感じで設定済みなのに、いざ違うドメインから実行しようとするとブロックされてしまう。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260487/df29519c-640f-b9ec-239e-1145590f6c

元記事を表示

ServerlessでさくっとWebサイトを構築する

社内ユースのちょっとしたツールや検証用に画面があると便利だなということで、ServerlessでWebサイトを作ってみました。

今回はR&Dの成果物について、エンジニア以外のメンバーからフィードバックしてもらう目的でWebサイトを作成します。プロダクション環境に導入する際は、アーキテクチャ面でいろいろ考慮する必要がありそうですが、とにかく動けばいいといったものであれば本当にさくっと作れました。

# 1.構成
![composition.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551923/60e15ae2-eed9-2165-f940-dc6a30ed173e.png)

– S3
– API Gateway
– Lambda
– DynamoDB

全てAWSのサービスを利用します。社内ユースということで、S3、API GatewayへのアクセスはIPアドレスで制限します。

# 2.Lambda
Pythonで書こうと思ったのですが、外部ライブラリをLambdaで利用するにはローカルでP

元記事を表示

ElixirでAWS LambdaでGithubActionsで継続デプロイ

# はじめに

「Elixirで簡単にAWS Lambdaの開発ができるようになれば、もっとElixirが流行るのでは?」

そんな想いから、Elixirで実装されたAWS Lambdaの関数をGithubにプッシュすると、Github Actionsが自動でビルドしAWSにデプロイしてくれる仕組みを試してみました。

# ElixirでAWS Lambda

AWSの公式としてElixir用のAWS Lambdaランタイムは用意されていないので、ElixirでAWS Lambdaを動かすためには、Elixirで実装したコードを動かすためのカスタムのAWS Lambdaランタイムを用意する必要があります。

また、Elixirでは1.9から`mix release`でElixirやErlang不要で実行可能なパッケージを作成することができるのですが、このパッケージを実行するためには、パッケージを実行する環境で作成する必要があり、AWS Lambdaの場合は、Amazon Linuxの環境でビルドする必要があります。

つまり、ElixirでAWS Lambdaを動かす場合、Amazon

元記事を表示

【AWS】API GateWay + LambdaでSlakcアプリケーションの認証を行う方法

SlackのEventをAPI GateWayで処理し、Lambdaを起動しています。
APIのアドレスが漏れた場合、攻撃を受ける可能性が有る為、API GateWayで何かしらの対策ができないかと思い記事を書こうと思いました。

# Slackの認証方法について
以下の2種類があります。

– リクエストのBody内の文字列を利用した認証
– Signing Secretを用いた認証

# リクエストのBody内の文字列を利用した認証

## SlackのEvent APIについて
Eventが発生すると、下記のようなJSONが発行されます。

“`json:Slackのイベント
{
“token”: “XXYYZZ”,
“team_id”: “TXXXXXXXX”,
“api_app_id”: “AXXXXXXXXX”,
“event”: {
“type”: “name_of_event”,
“event_ts”: “1234567890.123456”

元記事を表示

OTHERカテゴリの最新記事