Lambda関連のことを調べてみた2019年12月11日

Lambda関連のことを調べてみた2019年12月11日
目次

AWS Lambdaでスクリーンショットを撮ってS3に保存

# はじめに

この記事は、[mohikanz Advent Calendar 2019](https://adventar.org/calendars/3884)の11日目の記事です。
去年は、[マイコンネタ](https://qiita.com/akikinyan/items/f5a27f6f7e4ea584f467)でした。
今年は、AWSで日頃便利に使わせてもらっている技術ネタについて書きます。

あるプロジェクトで、Webサイトを定期的にキャプチャして、S3に保存しておきたいなぁと言う事があり、それならばサーバレスで挑戦してみようと言うことになり、それをやってみたときの記事になります。
Lambdaは便利ですよね。何よりお安いですし。

# 必要な知識

– Python
– AWS Lambda
– Selenium

# 事前準備

headless chromeを使いますので、いくつか事前準備が必要です。

## Lambda Layers

Lambdaのファイルサイズ上限に引っかかるので、Lambda Layersにheadless chromeを用意します。
Gi

元記事を表示

Amazon SNS + SQSを使って30分で構築する、なんちゃってpub/subシステム

[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle) の11日目は[株式会社エイチームライフスタイル](http://life.a-tm.co.jp/)のWebエンジニア@kyntkが担当します。

最近はReact、TypeScriptでの開発や、Lambda、DynamoDBを使ったサーバーレス系のインフラを触っております。

## はじめに
今回はAmazon SNS、Amazon SQSを使用して、pub/subメッセージングを実現したいと思います。今まで使ったことはなかったのですが、pub/subやマイクロサービスアーキテクチャをこの機会に手軽に実装してみたいなと思い触ってみました。初めて触るサービスはまず料金が気になるところですが、今回の内容は**無料枠内**でできるので、気軽に手を動かしながらやってみてください。

初めて使ってみたので、どのように利用するとより有用なのかがまだ分かっていないので、もしご指摘がありましたらコメントいただき

元記事を表示

ぁmbだ

# 初めに
この記事は部活の[アドベントカレンダー](https://adventar.org/calendars/4410)として書かれています。
昨日は[Unitの記事](https://unit112358.hatenablog.com/entry/2019/12/09/000119?_ga=2.84458521.1411535617.1575556889-1110943558.1498307490)でした。

# 今回話すこと
今回はPythonのlambda式について話したいと思います。
その前にlambda式の基礎となってるlambda計算について軽く話したいと思います。
僕の理解も深くないです。たまによく主張が変わることがあります。
[ここまで](#ぁmbだ式)飛ばしていいよ。

# ぁmbだ計算
> ラムダ計算(ラムダけいさん、英語: lambda calculus)は、計算模型のひとつで、計算の実行を関数への引数の評価(英語: evaluation)と適用(英語: application)としてモデル化・抽象化した計算体系である。

[wikipedia](

元記事を表示

golangでslackbotを作る

以前からGAS→Rubyと書き換えてきた鉄道の遅延情報教えてくれるslackbotをgolangで書き換えて運用を始めたので、紹介させてください。

https://github.com/yuina1056/go-TrainInfoBot

## 実動作
スクリーンショット 2019-12-10 21.17.34.png

## 動作環境
golang 1.12.5
AWS Lambdaで動作
LambdaへのデプロイはGUIから行っています。

## golangコード
仕事でDIして依存をmockできるテストコードを書きやすいコードを書く方法を覚えたので、テストコードを書く練習を兼ねてテストコードを書くようにしています。
ロジックもうちょいなんとかなりそうだけれど、ちょっと面倒だったので一旦はこれで。

今もうま

元記事を表示

SNSとSESのLamdaをテストするためのイベントサンプル

# はじめに
AWSでSESを使用していると、バウンス対応などが必要になります。

# SESのバウンスをSNSで通知させる
[AWSのドキュメント](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/configure-sns-notifications.html, “AWSのドキュメント”)
にあるとおり、
SESのNotificationsにSNSのTopicのARNをアタッチします。

`arn:aws:sns:us-east-1:123456789012:ses-bounces-topic`

といった感じになります。

# バウンスメールを取得、保存
SNSのSubscribeで、Lambdaを実行し処理するケースが多いと想定しています。

Lambdaのコードは、AWS Serverless Application Repository に

– ses-notification-python
– ses-notification-nodejs
– ses-notification-to-s3

色々と

元記事を表示

Serverless Framework用にバックエンド(Lambda)をフレームワークチックにしてみた話

# TL;DR

Serverless Frameworkを多用している弊社にて、スモールプロダクトが増えてきそうだったので、何かLambdaで共通で使える処理なり、処理の系統なりなりを統一できないか模索して、Lambdaに使えるフレームワークなるものを実装した話

# 背景

Moff AdventCalender第二週にさしかかってきました。弊社のアプリでいくつかマイクロサービス化してアプリもリリースしていた時期があったんですが、少人数のスタートアップには人員的なリソースが厳しいかつ、当時Serverlessを先進的にする人もそこまで多くはなかったので、Serverless(API Gateway + Lambda + DynamoDB、ところによりKinesis Data Stream)にてどのプロダクトも統一的な記法でプログラミングしてバックエンドロジックをかけないか、テストがかけないかを模索していました。そこでAPI Gateweay + Lambda用に使える社内フレームワークを開発したのでそれを紹介しようと思います。

# フレームワークの紹介

~~Sample Sou

元記事を表示

Serverless framework x CircleCI でAWS lambdaのローカル開発環境構築

Linc’well Advent Calendar10日目の記事です。

当社が展開するクリニックグループの [CLINIC FORの予約システム](https://reservation.clinicfor.life/) で、認証機能の一部にAWS Cognitoへの移行を進めております。

予約システム全体としてはモノリシックなRailsアプリケーションで開発をしてきたのですが、AWS CognitoをRailsアプリケーションの上に被すように実装する必要がり、連携をするためにAWS CognitoのTriggerをlambdaで実装する必要がでてきました。

この記事では、ローカル環境でのlambda開発、テストをどう構築したかをまとめます。

## lambda 開発環境構築

今回は、[Serverless Framework](https://github.com/serverless/serverless)を使って開発を進めます。Frameworkのinstallとprojectを作成します。

“`
npm install -g serverless
serverle

元記事を表示

AWS S3更新時にLambdaでCloudFrontのInvalidationを自動実行

Vue.js で作ったウェブアプリは、静的サイトとして AWS S3 + CloudFront からホスティングできます。

非常にコスパのいいオススメの設計なのですが、S3 内の本番ファイルを更新した場合、**CloudFront のエッジサーバ上に残っているキャッシュのせいで、その更新は即座に反映されません。**

CloudFront のコンソールから「Invalidation」を手動で実行すればそのキャッシュを削除できます。

今回は、その **Invalidation 手動実行の部分を AWS Lambda を使って自動化するやり方**を整理します。

# 前提

静的サイト(特に Vue.js)を S3 + CloudFront でホストしているケースを前提としています。

# Lambda を使った Invalidation の自動化手順

## IAM ロールの作成

まず Lambda 関数に適用する IAM ロールの準備です。

[IAM コンソール](https://console.aws.amazon.com/iam/home?region=us-east-1#

元記事を表示

リアルタイム画像リサイズAPIをGo + Serverless Application Modelで作った時の感想

ちょっと遅れましたすみません。
fushimiと申します。投稿させていただきます。

## Api Gateway + Lambda + Go + S3 で リアルタイム画像変換処理

Goで画像リサイズをやる機会があったので記述します。

今回は、事前に動画のエンコード済みパターンを作っておくのではなく、さくらの[imageflux](https://www.sakura.ad.jp/services/imageflux/)のように、**リアルタイムで動画のサイズを命令通りに変換しよう**っていう試みです。

数年前初めてこのアイディアを聞いたときは、「キャッシュに乗らないエンコードパターンいくらでもパラメータで作り放題だけど不正アクセスとか大丈夫かなあ…」と思ったものですが、各社なんだかんだやっていっている試みがあるようです。類似のものは結構見つかるかと思います。

サービスの画像が重くて困り始めた社内の人間から、「うちもLambdaとかでサクッと作れない…?」と聞かれたのもあり、試しにやってみました。

## image-resizer-service

まず、aws

元記事を表示

Amazon API GatewayとAWS LambdaでつくるインタラクティブなSlackAppその2(Interactive Components)

[昨日](https://qiita.com/ikeisuke/items/097fee72073a26ee4d9d)はコマンドを作成し、レスポンスによってボタンを表示しましたが、
今回の記事ではSlackAppにおける機能として`Interactive Components`を利用しています。

また、この記事では以下の要素を利用して、SlackAppを構築するための基本的な部分を実装していますが、
個々の要素の具体的な利用方法や言語の実装についてはあまり触れません。

– Amazon API Gateway
– AWS Lambda (Golang)
– CloudFormation (AWS SAM)

# TL;DR

[昨日](https://qiita.com/ikeisuke/items/097fee72073a26ee4d9d)の続き
ボットが送信したボタンのクリックに対して対応した内容にメッセージを書き換える仕組み

以下の動作を参考にしてください。
![command.gif](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

Qiita APIを使って「いいね」をLINEに通知するアプリをLambdaで構築した

(追記)
ちょうど空いていたので、[AWS LambdaとServerless #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/lambda2)の9日目に投稿します。
# 概要
以下のようなQiitaのいいねのLINE通知がほしいなーとふと思い立ち、
line.jpg

関連する記事を発見!
-> [Qiitaでいいねが付くとLINE通知してくれる優しい世界を構築した](https://qiita.com/Sinhalite/items/8fd408071ec7ab9a58e2)

構成が簡潔で(記事自体も)すごく参考になります。

今回、Lambdaを始めとしたAWSのサービスを使って、イベント駆動型のアプリケーションを作ってみたか

元記事を表示

SAM Local(Java)でHello Worldをローカルデバッグするまで(メモ)

# はじめに

SAM Local(Java)でHello Worldを作成し、ローカルでデバッグ実行するまでのメモです。
これまでJavaScript(Node.js)は使用したことがあるのですが、Javaでのlambda作成の勉強のために、まずはHello Worldから始めてみました。

環境は以下のとおりです。

– Windows 10
– SAM CLI 0.37.0
– Python v3.6.4(インストール済み)

手順は以下のように進めました。

– AWS SAM CLIのインストール
– Hello Worldアプリケーション作成
– プロジェクト作成
– アプリケーションをビルド
– アプリケーションをローカルでテスト実行
– デバッグ実行(EclipseとVSCodeの2パターン)

# AWS SAM CLIのインストール

「[Installing the AWS SAM CLI on Windows ](https://docs.aws.amazon.com/ja_jp/serverless-application-mode

元記事を表示

Lambda で Switch ロールに対応した複数アカウントのインスタンス一覧の取得

# 概要
AWS を**複数アカウント**で運用する場合、**Switch ロールでアカウントユーザを切り替えることがベストプラクティス**になっています。
これは**マスターアカウントでユーザを一元管理**し、マスターアカウントに紐づく**子アカウントではユーザを作成せずロールの切り替え**によって権限管理ができるからです。

この方法を利用することでユーザの管理はマスターで一元管理できるので便利ですが、一方で、不用意なユーザを子アカウントに作成しないといった制限もかかります。ユーザを作成できなければ不用意なシークレットキー、アクセスキーの管理からも開放されます。

一方、プログラムから AWS リソースにアクセスする場合、一般的にシークレットキー、アクセスキーを発行することがあると思います。しかし、Switch ロールを利用する場合は**子アカウントへのユーザ作成を極力避けなければなりません**。

今回はこのような場合でもリソースにアクセスできるような **「Switch ロールに対応した複数アカウントのインスタンス一覧の取得」**の例を解説します。

# 仕組み
Lambda

元記事を表示

受信用のメールアドレスが欲しかったのでサーバレスで構築した方法

# はじめに

メールの送信履歴をたまたま見たら、以外にメールを送信していないなと気づいた。
確かにメールを普段使っているかというと使っていない。
普段のコミュニケーションを何でとるかといったら、**Slack**。
エビデンスを残す必要があるようなものは、**Backlog**や**Redmine**などでチケット単位でコミュニケーションを取ることが大半。
では、どんな時にメールを使っているかというと、ほぼ、**サービスへの登録の本人確認**。
でも、このサービスへの登録が本当に重要。
ただ、サービスへの無料体験などに申し込み、体験期間が過ぎたけど、まだやりたいなといった場合、既に登録されているメールでは、再度申し込むことが出来ないことは多々。

そんな時どうしますか?

gmailであればメールアドレスのユーザ部分の任意の箇所にドット( `.` )を追加することが可能で、そのドットのタイミングを変えて利用している人も多いと思います。
ただ、それだと限界もあります。
また新しいメールを取得するにしても、今は電話番号で本人確認があったりとちょっと面倒。

例えば、ドメインを取得すれば好

元記事を表示

SwiftからLambdaを経由してs3に画像をアップロードする

##やりたいこと
SwiftからAPIGatewayとLambdaを経由してs3に画像をアップロードします。
あまり大したことはやっていませんが、細かいところで詰まったので、まとめておきます。
##フロントエンド(Swift)

“`imageUpload.swift
func uploadImage(image: UIImage) {
//画像のリサイズ
let height = image.size.height
let width = image.size.width
let reSize = CGSize(width: 200, height: 200*height/width)
let resizedImage = image.reSizeImage(reSize: reSize)

if let data = resizedImage.jpegData(compressionQuality: 1.0) {
let encodedString = data.base64

元記事を表示

AWS Lambda書いてて、Python引数のデフォルト値で少しハマった話

# 経緯

AWS LambdaのPythonコード内で、指定した日付(指定なければ1年前)を元に結果を返す関数を作った。
※下のコードは単に値を返しているだけだが、実際はboto3のリクエスト投げて結果を返している。

<コード>

“`python
from datetime import datetime
from dateutil.relativedelta import relativedelta

one_year_ago = (datetime.now() – relativedelta(years=1)).isoformat()[:-3] + “Z”

def lambda_handler(event, context):

# 問題の関数
def test_func(last_time: str = one_year_ago) -> str:
return “last_time: ” + last_time

print(one_year_ago)

# 関数呼んでるところ
print(test_func(“2

元記事を表示

Amazon API GatewayとAWS LambdaでつくるインタラクティブなSlackAppその1(Slash Command)

GitHub Organizationの管理をしているのですが、運用が少し面倒なのでなんとかできないかといろいろ考えています。
今回はチャットボットでの運用を導入できないかと考えて検証してみたのでまとめました。
(いろいろな制約により残念ながら実用には至ってません。)

今回の記事ではSlackAppにおける機能として`Slach Command`を利用しています。

また、この記事では以下の要素を利用して、SlackAppを構築するための基本的な部分を実装していますが、
個々の要素の具体的な利用方法や言語の実装についてはあまり触れません。

– Amazon API Gateway
– AWS Lambda (Golang)
– CloudFormation (AWS SAM)

# TL;DR

SlackとAWSを利用して対話型なインターフェイスを作成するサンプルを作りました。
以下のアニメーションにある`コマンドで呼び出し → 選択肢の応答 → ボタン押下による応答 → メッセージ書き換えによる応答`の流れのうち、選択肢の応答までを説明しています。

以下のような動作をします。

元記事を表示

S3 × Lambda × Cloudwatch Eventsで、簡単にバッチ処理の監視機構を導入する

コンニチハ。川野です。

[Fusic Advent Calendar 2019 – Qiita](https://qiita.com/advent-calendar/2019/fusic) 7日目の記事です。
昨日は [@ya_ma23](https://qiita.com/ya_ma23) による [Rustでcsvを読み込みDBにインポートする](https://qiita.com/ya_ma23/items/58cdbb96099c339d70bd) でした。
最近よく目にするRust、気になる存在です。

—————-

さて本日は、簡単に導入できるように設計・実装したバッチ処理の監視機構について紹介します。

本記事は「一日一回 **決まった時刻に** 動く処理が、何らかの理由で失敗していたことを検知したい」という方向けです。

# 概要
アプリケーションサーバ上で、毎朝1回決まった時刻にcronによって実行されるphpファイルがあります。
当然、毎朝このファイルが実行されないと困りますね。
そこで、ファイルの実行に失敗したことを検知し、システム管理

元記事を表示

AWSで近くの避難場所を通知してくれるLinebotを作ってみた

#はじめに

 本記事は[「あなたを死なせないためのプログラミング」](https://qiita.com/yossymura/items/b19d08235bdb44f06ae8
)に感化され,自分もほぼ同じシステムをバックエンドとしてAWSを使って構築することを目的にしました.システムの詳細な内容は元記事も参考にしてください.

 また私も災害対策や避難誘導の一助になるようなシステムを作りたいと思い,「ドローンを活用した災害避難勧告システム」や「スマートスピーカーを利用した避難勧告システム」についての記事も公開を予定していますのでそれも合わせて見ていただければと思います.

# 対象読者
– 実際に動くシステムを作ることを目的にしていて,作って学びたい方
– LINE botの開発がしたい方
– バックエンドとしてAWSを使いたいAWS†初学者†の方

# 製作物
【AWS・Lambda】Python外部ライブラリ読み込み方法

# 概要
 AWS lambdaでは初期状態でpandasやnumpyなどの外部ライブラリを読み込むことはできません.読み込ませる方法は二つあって,一つ目はインストール済みのライブラリと実行ファイルをまるっとzipファイルにまとめてlambdaにアップロードする方法,二つ目はlambdaでLayerとして読み込ませる方法です.後者の方法がおすすめですが,本記事ではこれらの方法をコード管理の面と合わせてTipsとしてまとめました.

# 環境
MacOS Catalina
docker 導入済み
AWS CLI 導入済み

# はじめに
 lambda開発をブラウザ上で行うのはコード管理の面でよろしくないのでローカルで開発できるようにします.つまりgitHub管理できるようにローカルで作業を行いコードの変更を随時lambdaにアップロードするという形を取ります.
 ということで[docker-lambda](https://hub.docker.com/r/lambci/lambda/)を使用してデプロイ環境つくりました.(使用する場合はcloneしてください)
https://gith

元記事を表示

OTHERカテゴリの最新記事