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

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

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で構築した

# 概要
以下のようなQiitaのいいねのLINE通知がほしいなーとふと思い立ち、
line.jpg

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

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

今回、Lambdaを始めとしたAWSのサービスを使って、イベント駆動型のアプリケーションを作ってみたかったので少し構成を変えて真似してみました。

# 本記事の流れ
1. 構成の概要
2. 使った技術要素の紹介
3. 実装の説明

# 1. 構成の概要
## 構成図
Diagram.jpgSAM 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

元記事を表示

AWS Lambda関数を非同期で呼ぶ場合の動きを改めて確める

### はじめに
2019年11月から12月5日までに発表されたAWS Lambdaに関する新機能の中で、以下の二つを取りあげて構成方法とテストした結果についてまとめたいと思います。
1. [AWS Lambda Supports Destinations for Asynchronous Invocations](https://aws.amazon.com/jp/about-aws/whats-new/2019/11/aws-lambda-supports-destinations-for-asynchronous-invocations/)
(非同期呼び出し時の結果出力先を指定できるようになった件)
2. [AWS Lambda Now Supports Maximum Event Age and Maximum Retry Attempts for Asynchronous Invocations]
(https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-max-retry-attempts

元記事を表示

AWS Chaliceでchalice localしているかどうかを判定する

# はじめに
AWS上で[API Gateway](https://aws.amazon.com/jp/api-gateway/)と[Lambda](https://aws.amazon.com/jp/lambda/)を使ってWEBサービスを作るときに便利なPythonフレームワークの[AWS Chalice](https://github.com/aws/chalice)。便利ポイントの一つが、`chalice local`コマンド一発で、手元のPC(ローカル)にWEBサーバが立ち上がって、AWS上で動かすものと同じものが動いてしまう、というところ[^1]。テストとデバッグがめちゃくちゃ捗ります。

# 課題
という便利な`chalice local`なんですが、ローカルで動かしていることをコードで判定する直接的な方法が無さそうだったので、考えてみました。
*きっかけは、[実施例](#実施例)にも示したとおり、AWS上で動かすときとローカルで動かすときでログのフォーマットを変えようとしたことです[^2]。*

# 解決方法
以下でできます。環境変数を活用します[^3]。

– cha

元記事を表示

Rust Runtime for AWS Lambdaの実行ファイルをWindows環境ビルドしたんだけど・・

# Rust Lambda のビルド

Rustを勉強するついでにあえてWLSを利用せずにWindows環境でRust実行環境の構築と
Lambda with Rustを構築してみたんだけども・・

## やりたいこと

AWS Lambdaで実行可能なbootstrapファイルをビルドできる環境を構築したい。

できれば、WSL環境が許されない現場でもどうにかしてビルドできる環境できないか
確認したい。

## 今回の動作環境

* Windows 10
* Rustインストール(rustup-init.exe)
* VSCode, rls extensionsインストール済み
* Windows 10 SDK, dev toolsをインストール済み
* Docker on Windowsインストール済み

##### 参考

[AWS Blog:Rust Runtime for AWS Lambda](https://aws.amazon.com/jp/blogs/opensource/rust-runtime-for-aws-lambda/)

#### Rustプロジェクト

元記事を表示

サーバーレスに触れる

# はじめに
APIGateway、Lambda、DynamoDBを使って
簡単なサーバーレスアプリケーションを作成して
サーバレスに触れてみようと思います。
自分用の備忘録として記述しようと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510859/c91bc177-ba4d-dd2e-acc0-c51ea8e9b578.png)

# 1.DynamoDBを作成
DynamoDBの説明は[こちら](https://www.slideshare.net/shimy_net/amazon-dynamodb-23315068)を参考にしてみて下さい。

## テーブル作成
コンソール画面からDynamoDBの画面に移動します。
そして[テーブル作成]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510859/53079572-e15b-36ee-0137-9c829

元記事を表示

lambroll & GitLab CI/CD Pipelineを使ってみた

## Lambdaのコードだけ入れ替えしたい

サーバーレスが気になって夜も6時間しか眠れないサーバーレス気になる人間「ながの」です。

AWSでサーバーレスと言えばAWS Lambdaですよね。みなさん、AWS Lambda使ってますか?

Lambdaを使っていると`コードだけ入れ替えたいなあ`ってときありますよね?

基本的にはAWSリソースはCloudFormationで管理していますが、ちょっとしたコードの変更なのにCloudFormation動かしたくないですね。CloudFormationを動かした事でリソースが予期せぬ変更をする可能性もないとは言えないですし。

でも都度都度CLIでやるのも面倒ですし、コードをコピペして書き換えるのはもっといやですよね。

じゃあどうすればいいんだー!?

ってことで`lambroll`を使ってみました。

## lambrollとは?

[GitHub – fujiwara/lambroll: lambroll is a minimal deployment tool for AWS Lambda.](https://github.c

元記事を表示

Zappaでサーバーレスアプリケーションを作成するための最初の1歩

[近畿大学 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kindai)の8日目を担当することになり、QiitaではCSGの夏のAdventCalendar以来、2つ目の投稿になります。今回は、Zappaってのを使うと気軽にAWS Lambdaベースのサーバーレスアプリケーションを運用できるぞというお話です。学生向けに書いてますので、話が逸れるところが少しありますがご了承ください。

### サーバーレスアプリケーションとは
一昔前までは、ウェブアプリケーションのようなクライアント・サーバ型のアプリケーションを開発するときは、サーバマシンというものが必要で、さらにその中でサーバプログラムを動かすために、例えばApacheのようなウェブサーバや、TomcatのようなJava Servletコンテナと呼ばれるミドルウェアを設定してするのが一般的でした(ちょっとネタが古い?)。
サーバーレスアプリケーションとは(サーバーレスコンピューティングとも言いますね)、そういったサーバーのインフラ整備を一切気にすることなく、プ

元記事を表示

知識ゼロからSlackで匿名チャンネルを作ってみた話

#はじめに
AWSの知識もLambdaの知識もPythonの知識も全くない状態でSlackに匿名チャンネルを作ろうと四苦八苦したときの備忘録。

#きっかけ
Advent Calendarに誘われQiitaで何か記事書かないと…と考えてきた時に
>社内slackにVIPチャンネルを作った話
>https://qiita.com/peisuke/items/80984db8b47cd8243019

この記事を読んでこれは面白そうだ自分が参加しているSlackにも導入してみたい!と軽い気持ちで手を出したのが悪夢の始まり。
全く知識なくてもコード書いてあるしこれ使えば簡単に導入できると思ったんです。

##botの作成
貼られてるSlack APIのサイトからSlack botの設定をすればいいんだね。
ふむふむbot作るの初めてだけどこれくらいフィーリングでわかる。
設定も書かれてるしこの通りに設定完了!

##最初の躓き(Lambdaの準備)
次は順番通りにLambdaの準備…Lambda…Lambda…って何?
>色々な所に解説が乗っているので、Lambda+API Gatewayの

元記事を表示

OTHERカテゴリの最新記事