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

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

AWS Lambdaからツイートする

#はじめに
引き続き、退社情報自動通知機能を作っていきます。
前回の記事で、スマホからAWSに位置情報を送信することができました。
次は、AWS Lambdaを使って、Twitterと接続します。

#通知手段について
前提として、通知先は妻のiPhoneを想定しているので、特殊な設定はしたくありません。
簡単にAWSから第三者のスマホに通知するには以下の方法があげられます。
・LineBot
・TwitterBot
・メール
この中で、一番実装が早そうなTwitterを用いて、通知します。
(もっと簡単な方法があったら教えてください。)

#Twitter APIの利用登録
Botのように、プログラムを用いてツイートするためには、「Twitter API」の利用登録をする必要があります。
利用登録の前に、まだTwitterのアカウント登録をしていない方は、しておいてください。
なお、アカウントにメールアドレスも登録しておかないと、「Twitter API」の使用登録はできません。

下記サイトにアクセスし、TwitterAPIの利用登録を行います。
https://developer

元記事を表示

【AWS lambda】lambdaで各種ライブラリを含めてデプロイする(パスワード付きzipを生成し、s3にアップロードする) @ Python

#やりたいこと
タイトルそのまんまですが、lbxxx.soなどのライブラリを含めてデプロイし、AWS lambda上でパスワード付きのzipを生成し、S3のバケットに格納します。

#立ちふさがる壁
そんな私のやりたいことの前に壁が立ちふさがります。
1. **[zipfile](https://docs.python.org/ja/3/library/zipfile.html)(Pythonで標準で用意されているzipファイルの作成などを行うモジュール)では、パスワード付きzipファイルの暗号化がサポートされていない!**
2. **ローカルのソースコードをzipファイルに固めて、lambdaにデプロイしただけでは、パスワード付きzipを作成することができない!**

いかにして、この壁を乗り越えたのかをここに残したいと思います。

#環境
####ローカル開発環境
+ Win10(ホストOS)
+ Docker
+ Linux 10(DockerコンテナのOS)
+ VS Code
+ Python 3.8.6
+ pip 20.2.3
+ aws-cli 2.0.56

VS C

元記事を表示

GAデータでLambdaからRDSを更新する

##はじめに
概要:GAデータをRDSへ格納してSELECT結果をスプレッドシートへ反映する。

とりあえず考えた以下の3案で最も管理コストが低そうなものをチョイス
◯ APIGatewayでLambdaリクエストによるデータのやり取りを行う
 → エラー通知さえ作れば保守がラクそう。既存のアカウントで運用可。
× GCPアカウントを利用してスプレッドシートAPIをlambdaで使う
 → 持ってないアカウント管理が増えるからやだ。
× S3にデータを配置してputをトリガーにやり取り
 → S3のデータソースを使う必要性はない、IOが多い。

**データの流れ**
スプレッドシート ⇔ GAS ⇔ APIGateway ⇔ Lambda ⇔ RDS

**使うリソース**

– GAS
– GAアドオン
– APIGateway
– Lambda(Node.js)
– RDS(MySQL)
– Systems Managerのパラメータストア
– Key Management Service

##GAアドオンでレポートを取得
GA ⇨ スプレッドシート

1. [Google

元記事を表示

LambdaでGoを動かす① -Serverless-offlineを起動するまで-

# はじめに
最近Goの面白さを知ったので、簡単なWeb開発を通して文法を学んでいく。
またGoって、Lambdaと相性良さそうだなと感じたので、そこらへんでの利用を考えてみる。

## 目的
LambdaでGoを動かすとすると、どんな感じかを確かめる。
デプロイするのは手間なので、serverless-offlineを用いて、ローカルでLambdaやAPI Gatewayを再現する。
今回は環境構築まで。

# 環境構築
serverlessのGoテンプレートは3種類あります。aws-go-modで開発が進んでいるようなので、こちらを利用します。

“`bash
$ sls create –template aws-go-mod –path gochats
Serverless: Generating boilerplate…
Serverless: Generating boilerplate in “/Users/apple/gochats”
_______ __
| _ .—–.—-.–.-

元記事を表示

AWS Lambdaでmimetypesを使う際はtypes_mapを確認しよう(Python)

## 前提・環境
AWS Lambda Python環境

## 事象

AWS LambdaのPython環境で`.webp`を`guess_type`しようとしたところ。

“`python:
import mimetypes
print(mimetypes.guess_type(‘.webp’))
# none
“`

noneになってしまった。

“`python:
import mimetypes
print(mimetypes.types_map[‘.webp’])
# none
“`

types_mapにwebpが存在しないので、追加してあげて

“`python:
import mimetypes
mimetypes.add_type(‘image/webp’, ‘.webp’)
print(mimetypes.guess_type(‘.webp’))
# image/webp
“`

解決した。

## まとめ
mimetypesの辞書は環境依存なので、`guess_type`や`guess_extention`できないときは辞書に対象が存在するか確認す

元記事を表示

AWS LambdaをScala(Java 11)とGraalVMで

# はじめに

AWS Lambdaを標準で選択できるJava 11のランタイムで動かすと、コールドスタートの問題等があるので、メモリをかなり積んでスペックを上げないといけないですが、Lamdaは積んだメモリと実行時間でコストが算出されるため、実行時間にあまり差が出ない範囲で、メモリはできるだけ少なめに抑えたいところです。

標準で選択できるJava 11のランタイムではなく、GraalVMのnative imageを使ってカスタムランタイムを作成すると、少ないメモリで動かすことができ、コールドスタート時にも爆速起動が期待できます。

ただ、Scalaのバージョン、Javaのバージョン、GraalVMのバージョンの組み合わせにより、実行バイナリが作成できなかったり、作成できても実行時のエラーが解決できなかったり、AWSのライブラリが上手く使えなかったりと、一筋縄ではいかずに沼に嵌っていった経験をされた人も多いのでは。。

今回は、Scala 2.13.3、Java 11、GraalVM 20.1.0の組み合わせで、S3にアクセスし、引数で指定したバケット内のキーのリストを返すようなAW

元記事を表示

CloudWatchのダッシュボードをSlackに通知する

CloudWatch のダッシュボードって超イケてるですけど、見に行くの面倒くさいですよね。
というわけでSlackに定期的に通知するようにしました。

(公式でもっとイケてる手順があるなら知りたい)

## 全体像

Githubにあげてるので詳しくはそこ参照ください
https://github.com/takyam-git/cloudwatch-dashboard-notify-slack

## できること

こんな感じのをLambda経由でSlack通知できるようになります。

![Slack | develop | タノム 2020-10-13 21-48-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3865/28ef9a78-6f8d-97cf-f30f-f3b00e184793.png)

## 内容

Lambda5千年ぶりくらいに書いたから、最近のプラクティスに添えてない可能性がすごいでかいですが、ポイントは以下

– CloudWatchの画面からsourceをコピペってく

元記事を表示

AWS LambdaでSlackに添付ファイルとして投稿(Python)

Amazon S3からファイルを取得してSlackに添付ファイルとして投稿するAWS Lambdaを作っていたが、AWS LambdaのPython環境にはrequestsモジュールが入っていなかったので苦戦した。

## 前提・環境
AWS Lambda Python環境

## やりたかった事
1. Amazon S3からファイルを取得する
2. ファイルをSlackの`files.upload` APIで添付ファイルとして投稿する(content typeはmultipart/form-dataを使う)

## できなかったこととその理由
Pythonでのファイルのアップロードは、
https://qiita.com/5zm/items/92cde9e043813e02eb68

https://www.it-swarm-ja.tech/ja/python/python%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8-multipart-formdata%E3%82%92%E9%80%81%E4%BF

元記事を表示

LambdaでLaravelを動作させようと思ったけど、少しコケたのでメモしとく

私はPHPerなのですが、最近、仕事関係でLambdaの話がちょくちょく出てきたので、ちょっと勉強がてら調査することに。

今更なのですが Lambda でPHPを動かせるようになっていたということに驚いた。

で、調べてみるとどうやらbrefというライブラリを使えば、簡単にLambda上でLaravelも動かせるらしい。
Bref – Serverless PHP made simple

わざわざ Lambda で PHPを使う必要があるのかと思うかもだけど、一緒にお仕事しているチームの構成を考えるとメンテナンスも含めてLaravelが使えるというのはとても助かるのです。

で、さくっと試してみようと思ったところデプロイで躓いちゃったので、メモ残しておきます。

## 環境

– Windows 10 Home
Docker Toolbox

元記事を表示

毎日定時に推し画像が送られてくるLINE Bot を作った

# はじめに
松岡茉優ファン(通称まゆらー)である僕が、
僕だけの僕だけによる僕だけのためのLINE Bot を作った。

ファンになって5年くらいになると、

→ツイッターのタイムラインで松岡茉優さん関連のツイートを探す
→松岡茉優さんの画像や動画を保存する

この作業に昔ほどの楽しみを覚えなくなり、かつ私自身も社会人になったりして、毎日ツイッターサーフィンする時間も無くなってきます。

**全部自動化しちゃおう!!**

ってことでその第一弾として、ツイッターで最近人気の画像・動画付きのツイートを検索、画像URL取得、LINE Bot を使って毎日定時に送信する!!!!

よかったら友達追加してください。

友だち追加

![L.png](https://qiita-image-store.s3.ap-northea

元記事を表示

AWS CloudWatchEventsの時間指定をCDKでラクにする。

CloudWatchEventsってUTCでしか動かないじゃないですか。
いつもそれを忘れて時間指定失敗するので、CDKでJST→UTCに変換することにしたんですよ。

# CDKでCloudWatchEventsを定義する

取り敢えずCloudWatchEventsの定義のとこだけ。
これをよしなにStepFunctionsとかと組み合わせるなり何なりする。

“`Python
# バッチスケジュールをJSTで定義する(cron式で * にする所は空でよい)
props[‘schedule’] = {
‘minute’: 40,
‘hour’: 9,
‘week_day’: ‘MON-FRI’
}

# JSTをUTCに変換する
if props[‘schedule’].get(‘hour’) is not None:
props[‘schedule’][‘hour’] = props[‘schedule’][‘hour’] – 9
if props[‘schedule’][‘hour’] < 0: props['sched

元記事を表示

Amazon Elastic Transcoder概要とLambdaからのJob実行

# Amazon Elastic Transcoder

映像・音声をユーザーが再生可能なフォーマットに変換するクラウドサービス

# 用語

– Pipeline
動画を通してトランスコードを行うパイプライン
Pipeline ID が割り当てられ、Lambda 等から使用する際に指定
以下主な設定項目
– 変換元/先の S3 バケット
– 変換完了 SNS 通知

– Job
Pipeline 内で実行するトランスコード処理
Lambda 連携する場合は Lambda から生成、実行する
以下主な設定項目
– 変換元/先ファイル名
– Preset
– サムネイル生成等のオプション

– Preset
トランスコード内容をまとめた設定
Job にてトランスコード内容として指定
AWS で用意されているものかカスタムで生成したものを使用
Preset ID が割り当てられ、Lambda 等から使用する際に指定
Preset一覧:https://docs.aws.amazon.com/ja_jp/elastictransc

元記事を表示

Lambda_備忘録

備忘録用

(notice_unhealthy_to_slack)

“`
import boto3
import json
import logging
import os

from base64 import b64decode
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

# The Slack channel to send a message to stored in the slackChannel environment variable
SLACK_CHANNEL = os.environ[‘slackChannel’]
HOOK_URL = os.environ[‘hook_URL’]

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def handler(event, context):
logger.info(“Event: ” + str

元記事を表示

Slackに共有されたファイルをサーバーレスでGoogle Driveにアップロードする仕組みを作るまで

# はじめに
社内の要望を受け、Slackに共有されたファイルをGoogleドライブに簡単にアップロードできるSlackアプリを完全サーバーレスで開発した話です。
「要件を整頓する」「アーキテクチャを考える」「Lambdaを利用して開発する」など…
全てが初めてでしたので、どうか温かい目で読んでいただければと思います。

#作ったもの
### **格納くん**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/65b4ac83-09ed-e4d2-3a0b-ac2351ef5e2a.png)
(弊社の画伯にアイコンを作成いただきました!)
格納くんは社内の資料管理用に作られたSlackアプリによるツールです。

## 使い方
– ファイルが添付されたメッセージのメニューから起動します。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/0b27c75e-8bcf-7fd5-1

元記事を表示

API GatewayとStep Functionsを組み合わせた非同期APIが最強だった話

最強というかカンタン?

サーバーレスの構成として一般的な
API Gateway&Lambdaですが

**API Gatewayは29秒制限**、
**Lambdaは15分制限**があるわけですね

Lambdaの性能を目一杯使いつつ、
そのギャップを埋めるため
**なるべくシンプルな構成で非同期APIにしたい** ってこと
あると思います。

そのときに必要なのは

– LambdaをキックするためのAPI
– キックしたLambdaが完了したか判断し、レスポンスを受け取るためのAPI

だと思いますが、下記Step Functionsにはその**両方が備わっています**

# Step Functions

Step Functionsでは、
マイクロサービスの連携などワークフローを視覚的でイケメンな感じに
構成することができます。

**公式例:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285581/8d8acfed-7f47-5a2d-589d-feb66a03f

元記事を表示

Lambda & Serverless Frameworkで、multipart/form-data形式のデータを受け取る

## 前書き
最近業務でAWSのLambdaとServerless Frameworkを使うことが多いです。
業務の流れが早く、次から次へと新しいツールを触ってすべて忘れていきそうなので、個人的なまとめとして、記事を作成します。
言語はnode.js, TypeScriptを使用しています。

## multipart/form-dataとは?

>multipart/form-dataは、前述の通り複数の種類のデータを一度に扱える形式で、主な利用シーンはHTMLフォームです。特にファイルアップロードでよく利用されます。
引用元:
[フロントエンド] multipart/form-dataを理解してみよう
https://www.yoheim.net/blog.php?q=20171201

ボディはBoundaryという区切り文字で、ファイル送信時に指定したnameごとに区切られます。

“`
——WebKitFormBoundaryO5quBRiT4G7Vm3R7
Content-Disposition: form-data; name=”message”

Hello

元記事を表示

Lambda & Serverless Frameworkあれこれ(ざっくりとした概要やコマンド)

## 前書き
最近業務でAWSのLambdaとServerless Frameworkを使うことが多いです。
業務の流れが早く、次から次へと新しいツールを触ってすべて忘れていきそうなので、個人的なまとめとして、記事を作成します。
正確性よりも、概要というかざっくりとした全体像みたいなものを把握することを目的としています。
>Done is better than perfect

## Lambdaとは?
「サーバーレス」という種類に属する「サーバー」です(え笑)。
公式(https://aws.amazon.com/jp/lambda/) には、
> AWS Lambda を使用することで、サーバーのプロビジョニングや管理をすることなく、コードを実行できます。料金は、コンピューティングに使用した時間に対してのみ発生します。

と記載されています。
感覚で説明すると、「設定や管理が不要で、プログラムをLambdaの”関数”としてデプロイしておき、そのエンドポイント(URL)にアクセスする、もしくは、関数の実行条件(トリガー)を設定しておくと、プログラム(関数)を実行させることができる

元記事を表示

ECSからLambdaを実行するときに必要なIAMロール

# やりたいこと
ECS TaskからLambdaを呼び出したい。

ECSとそれに付与するIAMロールはCloudFormationで定義しているが、IAMロールが正しいところに対して設定できていないとエラーが発生する。

#### エラーの例
`message:Unable to locate credentials`

# 環境
– 起動タイプ
– Fargate
– OS
– linux(alpine)

# 書き方
詳細については後述

“`sample.yml
AWSTemplateFormatVersion: 2010-09-09

Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
– Effect: Allow
Principal:
Service:

元記事を表示

【AWS】APIGatewayにキャッシュを設定する際にハマったこと

#はじめに
先日APIGatewayにキャッシュを設定しようとしてハマったので記事にしておきます。

#キャッシュを無効化させたくない!
エンドポイントへのHTTPリクエストヘッダに**[Cache-Control: max-age=0]**が含まれていた場合も、APIGatewayの後ろに控えたLambdaを実行させたくない!**キャッシュがある場合は必ずキャッシュを受け取ってほしい**。

#APIGateway設定
キャッシュの設定自体はキャッシュ有効化にチェックをつけ、キャパシティーやTTL等を自由に設定しておしまいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/7843e19e-48d7-2e63-3951-76ec4bdfa081.png)
キャッシュコントロールヘッダについての設定は「キーごとのキャッシュの無効化」にあたります。
画像の設定では「認可されたリクエストで無ければ、HTTPリクエストに**[Cache-Control: max-age=0]*

元記事を表示

AWS S3で公開している静的サイトにBasic認証をかける

AWS S3で公開している静的サイトにBasic認証をかける方法です。
S3の他に、LambdaとCloudFrontの設定が必要になります。

# S3バケットの作成
まずはBasic認証をかけたいS3のバケットを用意します。
パブリックアクセスの許可や、Static website hostingの設定は必要ありません。

# CloudFrontの設定

Create distribution -> Web側のGet Startedを選択し、CloudFrontの設定に進みます。

![CloudFront Get Started](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/2eed0ac0-2f77-2f3b-99bb-7a2a9041a4d5.png)

`Origin Domain Name` にBasic認証をかけたいS3のバケットを指定します。
`Origin ID` は自動的に設定されます。
`Restrict Bucket Access` を `Yes` にします。
`Ori

元記事を表示

OTHERカテゴリの最新記事