- 1. へっぽこが1週間でwebサービスを開発する #2 ドメインサーチ
- 2. AWS lambdaを使ってニュースをスクレイピングし、更新分を定期的にLINEに通知してみる【python】
- 3. 全Lambdaからコードをzipダウンロードしてきて、zipのままキーワード検索する
- 4. AWS Lambdaからツイートする
- 5. 【AWS lambda】lambdaで各種ライブラリを含めてデプロイする(パスワード付きzipを生成し、s3にアップロードする) @ Python
- 6. GAデータでLambdaからRDSを更新する
- 7. AWS Lambdaでmimetypesを使う際はtypes_mapを確認しよう(Python)
- 8. AWS LambdaをScala(Java 11)とGraalVMで
- 9. CloudWatchのダッシュボードをSlackに通知する
- 10. AWS LambdaでSlackに添付ファイルとして投稿(Python)
- 11. LambdaでLaravelを動作させようと思ったけど、少しコケたのでメモしとく
- 12. 毎日定時に推し画像が送られてくるLINE Bot を作った
- 13. AWS CloudWatchEventsの時間指定をCDKでラクにする。
- 14. Amazon Elastic Transcoder概要とLambdaからのJob実行
- 15. Lambda_備忘録
- 16. Slackに共有されたファイルをサーバーレスでGoogle Driveにアップロードする仕組みを作るまで
- 17. API GatewayとStep Functionsを組み合わせた非同期APIが最強だった話
- 18. Lambda & Serverless Frameworkで、multipart/form-data形式のデータを受け取る
- 19. Lambda & Serverless Frameworkあれこれ(ざっくりとした概要やコマンド)
- 20. ECSからLambdaを実行するときに必要なIAMロール
へっぽこが1週間でwebサービスを開発する #2 ドメインサーチ
![スクリーンショット 2020-10-04 22.31.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634341/8d20d39c-6cb0-27a3-9373-276d6aab5edc.png)
#ドメインサーチ
ドメインサーチは以下の機能を提供するサービスです。
[ドメインサーチ](https://searching.monster/)* tld検索:対象のtldの提供有無と価格を検索できます。
* キーワード検索:対象ドメインが任意のキーワードでのランキングを検索できます。
* WHOIS検索:対象ドメインのWHOISドメインを検索できます。
* DNSレコード検索:対象ドメインのDNSレコードを検索できます。
* ドメイン年齢:対象ドメインの運用期間を検索できます。#僕のスペック
・へっぽこエンジニア
・開発歴:3年
・個人開発歴:10ヶ月目(2020.01に今年は個人開発をやる!と決めた。)
・開発言語:python
・今回の開発でようやくvueを使ってみました!!
・ノ
AWS lambdaを使ってニュースをスクレイピングし、更新分を定期的にLINEに通知してみる【python】
#はじめに
今回が初投稿になります。プログラミングを独学で勉強しはじめて半年強ほどの大学生ですが、学んだことを少しずつアウトプットしてみたいと考え、投稿させていただきます。
コードの書き方等雑であったり汚い点が多々あると思いますので、遠慮なく指摘していただいて構いません。
#目標・手順
タイトルにある通り、AWSのlambdaというツールを使って([Yahooニュースの記事](https://follow.yahoo.co.jp/themes/051839da5a7baa353480 “レアルマドリードに関連するニュース”))を定期的(6時間毎)にスクレイピングして、更新された記事について、[LINEmessagingAPI](https://developers.line.biz/ja/docs/messaging-api/getting-started/)を使って自分のLINEアカウントに通知することを目標とします。開発環境はlambdaとの連携を考慮し、cloud9を使います。手順についてですが、
①PythonのBeautifulSoupモジュールを用いて[ニュースサイト]
全Lambdaからコードをzipダウンロードしてきて、zipのままキーワード検索する
# これはなに?
全Lambdaからコードをzipダウンロードしてきて、zipのまま検索しました。– ① 全Lambdaからコードをダウンロード
– ② zipのまま検索(zipgrep使用)の2つの手順で行います。
## 利用ケース
リポジトリ管理していない直書Lambdaなどが大量に存在するカオスな検証アカウントで特定キーワードを含むLambdaがないか調査するときに使用。
カオスなアカウントが出来上がらないようにするのがいいとは思うのですが、古の闇に手を突っ込む機会に恵まれました。# ① 全Lambdaからコードをダウンロード
**nemani/download_all_lambda_functions.sh**
https://gist.github.com/nemani/defdde356b6678352bcd4af69b7fe529これを使います。
## 前提条件
・wgetが必要
・cliのアウトプットをtextにしておく
・bashつかわないとだめかも
・中でaws clilつかっているのでプロファイルなどは設定しておく## 使用中
・”
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.56VS 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
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 osfrom 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-09Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
– Effect: Allow
Principal:
Service: