- 1. 静岡県オープンデータカタログ(csv)からCOVID-19対策サイトのデータ(json)に変換して取得するAPI
- 2. 無視されたリプライをPython+AWS Lambdaで毎日自動削除する
- 3. ブラウザからS3に直接ファイルをアップロード vue.js+VueDropzone
- 4. AWS Lambdaにpsycopg2でPython3.6からPostgreSQL へ接続
- 5. Pre-Signed URLでS3に直接ファイルをアップロードする
- 6. AWS Lambda + API Gatewayで世界へこんにちはする
- 7. AWS CodeStarを試してみる
- 8. Node.jsのLambdaでPre-Signed URLを発行する
- 9. Neo GOF : GradleからCloudFormationを動かす良い方法
- 10. CloudWatchアラームに定時ダウンタイム設定をいれる
- 11. サーバーレスライブラリbrefを使い、素のPHPでHello world
- 12. Lambda@Edgeを使用してカスタムゲームコンテンツをプレーヤーに配信する方法
- 13. Rails on Lambdaの環境構築
- 14. [リアルタイム]KinesisからのLambdaが遅延した!! その時の対処は?
- 15. 疑似的にNATゲートウェイを停止・起動する
- 16. Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する
- 17. [Python] Headless Chrome を AWS Lambda で動かす
- 18. [Python] pip3のパッケージを AWS Lambda 上でimportできるようにする
- 19. AWS LambdaのCustom Runtimeを使い、Node.js v8などEoLとなったランタイムを動かす
- 20. [Python / AWS Lambda layers] AWS Lambda Layersでmoduleだけを使い回したい
静岡県オープンデータカタログ(csv)からCOVID-19対策サイトのデータ(json)に変換して取得するAPI
# 静岡県オープンデータカタログ(csv)からCOVID-19対策サイトのデータ(json)に変換して取得するAPI
## はじめに
[浜松市 新型コロナウィルス感染症対策サイト](https://stopcovid19-hamamatsu.netlify.com/)のお手伝いをしています。
お手伝いをしています、というか、楽しく参加させてもらってます。
[東京都のオープンソースを活用した新型コロナウイルス感染症対策サイトの派生サイト](https://cio.go.jp/node/2581)の1つです。
Code for Japanによる[支援活動の1つ](https://www.code4japan.org/activity/stopcovid19)だそうで、すばらしいですね。その活動の中で、タイトルのAPIを作って利用しましたので共有のため記事にします。
## 概要
こんな感じです。
![Screenshot 2020-04-12 at 09.44.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.
無視されたリプライをPython+AWS Lambdaで毎日自動削除する
# メンヘラすぎて無視されたツイートは消したい
これは私ではないが、こういうツイートを消したい自分がモテないのも、もしかして瀧さんのせいですか?
— ねっとのひと (@_tanosikuikouze) April 6, 2020
– 無視されるよりは無視したほうが良いという、被害者より加害者よりの思考へシフトし、陽キャよりのコミュニケーションにコミットを行う
– これは[セキュリティ・オートメーション](https://aws.amazon.com/jp/solu
ブラウザからS3に直接ファイルをアップロード vue.js+VueDropzone
# はじめに
前回までで
[Node.jsのLambdaでPre-Signed URLを発行する](https://qiita.com/gungungggun/items/66d0128436e0dcb176b2)
[Pre-Signed URLでS3に直接ファイルをアップロードする](https://qiita.com/gungungggun/items/c1dd5da5fced8c044e3c)
をしたし、ブラウザからでも簡単にいけるだろうと思ってたけど、かなりハマった。
僕が一番ハマったのは`signatureVersion: ‘v4’`が必要ってところでした。
一応手順をメモしておいたので参考になればと思います。# S3に直接
S3に直接ファイルをアップロードするにはPre-Signed URLを使うと良いです。
ここまでは前回までで実装できています。
ブラウザからとなると、CORSの設定と、クライアントのjsの実装くらいなのでそこまでハマらないはず。って思いますよね?# CORSの設定
ブラウザからのアクセスなのでCORSの設定が必要です。
S3のバケット>アクセス権
AWS Lambdaにpsycopg2でPython3.6からPostgreSQL へ接続
# Postgresインストール
非インストール版Zipファイルをダウンロード
https://www.enterprisedb.com/download-postgresql-binaries“`text:command
initdb -D C:\pgsql\data -U xxxx
pg_ctl -D C:\pgsql\data -l logfile start
“`
“`text:createtable
psql.exe -d postgres -p 5432 -U xxxx
create database xxxxxx;
create table xxxxxx …….. ;
“`
# ビルド環境準備
## pip更新
“`
pip install –upgrade pip
“`
## 必要なライブラリ
“`text:CentOS
$ yum install postgresql-devel
“`
“`text:Debian/Ubuntu
$ apt-get install libpq-dev
“`
“`text:MacOS
$ brew i
Pre-Signed URLでS3に直接ファイルをアップロードする
# S3にファイルをアップロード
S3にファイルをアップロードするときLambdaやEC2経由にすることが多いかと思いますが、大容量のファイルだとS3に直接アップするほうが効率が良さそうです。
そういった場合はPre-Signed URLを取得して直接S3にファイルをPUTしてやると良さそうです。# Pre-Signed URLの取得
以下のコードでPre-Signed URLが取得できます。“`js:Lambda
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}async function getPresignedUrl(){
return new Promise((resolve,reject)=>{
s3.getSignedUrl(‘putObject’, params, (err, url) => {
if (err) {
reject(err)
}
AWS Lambda + API Gatewayで世界へこんにちはする
## はじめに
サーバーレスってなんだろう?
という疑問を解決すべく、ある程度勉強したのちにAWS Lambda + API Gatewayで遊んでました。
その中で、とりあえず LambdaとAPIGatewayの使い方はなんとなくわかってきたので、基本であるHello Worldをやってみます!## 手順
###(1)AWS Lambdaで関数を作成「関数を作成」をクリックします
![スクリーンショット 2020-04-09 14.33.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539611/42ed640c-1584-3446-3a7f-3ba886cde11c.png)
「1から作成」を選択します。今回は、関数名を「helloWorld」とします。
![スクリーンショット 2020-04-09 14.05.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539611/6e9a267a-f
AWS CodeStarを試してみる
# はじめに
あるプロジェクトで初めてLambdaの開発を行った。
Eclipseで開発していたが、AWSと連携するわけでもなく、ローカルでの修正のたびに、AWSにログインして手動で上書きするという流れでやっていた。(非常に非効率的)
CodeStarを活用することで上記が解消されるらしいので試してみる。本資料は大まかに以下を行っています
– CodeStarでのプロジェクトの作成とローカルでの開発準備
– コードを編集し、アプリケーションの自動ビルド、自動デプロイを実行
– ユニットテストを追加して、自動テストを実行# 前提
ルートユーザ、「AWSCodeStarFullAccess」管理ポリシーを持つユーザで実施してください。# プロジェクトの作成
– 「プロジェクトを開始する」を押下
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/bb42d1b2-b834-33fd-0b7f-10572bd3ee69.png)– CodeStar用のサービスロールを作
Node.jsのLambdaでPre-Signed URLを発行する
# Pre-Signed URL
S3はアクセス権を設定することで、誰でもファイルにアクセスできるようにしたり、できなくしたりが可能です。
Pre-Singed URLは誰でもファイルにアクセスできなくしているところに一時的にアクセスを許可することができます。
今回はこのPre-SingedをLamndaで発行してみたいと思います。# S3
バケットを準備して非公開の設定にしておきます。
テスト用に1つ画像ファイルをアップロードしておきましょう。# Lambda
今回はNode.jsでPre-Singed URLを発行します。
LambdaからS3にアクセスできるようにロールを設定しておきましょう。## コード
バケット名、ファイルパスは適宜変更して下さい。“`js:Lambda
const AWS = require(‘aws-sdk’);
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}async
Neo GOF : GradleからCloudFormationを動かす良い方法
このページは https://github.com/kazurayam/NeoGOF のREAMDEドキュメントを日本語で書き直したものです。
GradleとShellとAWS CLIとCloudFormation: この4つのソフトウェアツールをうまく組み合わせて使えばJava/Groovy/Kotlinの開発者の仕事が楽になります。この4つの組み合わせを Neo GOF (new Gang of Four) と名付けます。
![overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52995/c7926e46-362e-ae02-a031-25279203aee8.png)
1. わたしは **ビルドツール [Gradle](https://gradle.org/)** を使って
[継続的デリバリ]
CloudWatchアラームに定時ダウンタイム設定をいれる
# 1. はじめに
* あるEC2サーバで、毎日早朝に動くバッチのCPU使用率が高く、クリティカル通知で起こされるので、バッチの時間帯だけ CPU使用率クリティカル アラートの通知を止めたかった。
* CloudWatch アラームにダウンタイム機能は提供されていないので、CloudWatch イベントと Lambda で自作する。
* ここでいう「ダウンタイム設定」とは、何時から何時までの間はアラームアクションを無効にして、アラーム状態になっても通知を飛ばさないこと。# 2. 概要
* この自作ダウンタイム設定では、CloudWatchアラーム名に空白があると動かないので、空白がある場合はあらかじめ空白をなくした名前に変更しておく。
* 例えば、「EC2 base CPU Utilization crit」を「EC2_base_CPU-Utilization_crit」 という感じにする。
* CloudWatch アラームの有効/無効化は、次のアクションを利用する。
* [EnableAlarmActions](https://docs.aws.amazon.com/ja_
サーバーレスライブラリbrefを使い、素のPHPでHello world
ちょっと素のPHPが欲しいときがあったら、以下のようにさくっとデプロイできます。
“`bash
# プロジェクト作成 https://github.com/umihico/bref-demo/commit/0269a62
$ mkdir bref-demo
$ cd bref-demo
$ serverless create –template aws-nodejs –name bref-demo
# brefインストール https://github.com/umihico/bref-demo/commit/2143b4e
$ composer require bref/bref
“`本命のPHPファイルを追加し、serverless.ymlを設定します。[0e8c61d](https://github.com/umihico/bref-demo/commit/0e8c61d)
“`diff:index.php
+
Lambda@Edgeを使用してカスタムゲームコンテンツをプレーヤーに配信する方法
#はじめに
AWS の「 Amazon Game Tech 」公式ブログで、ゲームコンテンツをいかにすればネット遅延なく、配信できるのか?という記事をご紹介します!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/91048a64-7f5c-8a21-11ca-ffe97539a461.png)AWS を利用して構築されている某モバイルゲームなどをよくプレイしていると、画質は綺麗だし動きもまるでコンシューマーゲームと変わらないようなクオリティでプレイできます。
誰かがゲームをプレイするたびに、データがチェックされてダウンロードされています。
プレーヤーの場所に関係なく、どのようにして超高速配信を確実にしているのか、という疑問を説明していきます。#超高速配信の為に何をすべきか?
この問題には、 AWS のさまざまな解決策があります!
ほとんどは着信要求を調べ、プレイヤーのリクエストをみて、提供するどのファイルをレスポンスで返すかを決めるコードを実行する web 機能を実
Rails on Lambdaの環境構築
# はじめに
Rails+Lambdaの記事が少なかったので投稿します。
この記事はRails+Lambda(+APIGateway)で `GET /me` が実行できるところを目指します。
Railsはある程度分かるけど、Docker使ったことない、サーバレスやりたい人向けです。
今回SAMは使わずある泥臭いやり方で行います。
mysqlは今回コード上では使いませんが、デプロイの関係で構築は行っています。もしRDSやDyanamo使いたい場合は適時調べて行ってください。# 環境
Docker for Windows
Ruby 2.7
Rails 6
MySQL 5.x# ディレクトリ構成
“`rails_api
├── Dockerfile
├── docker-compose.yml
├── Gemfile
├── Gemfile.lock
“`# 各種ファイル
## Dockerfile
native extension を含む gem を lambci/lambdaの docker イメージでビルドしなおしをするため、イメージはLambdaのものを使用します
[リアルタイム]KinesisからのLambdaが遅延した!! その時の対処は?
# 何が起きたのか
リアルタイムを実現するアーキテクチャを以下のように組みました逐一流れてくるデータソース(企業秘密)→Kinesis→Lambda→DynamoDB
データソースにもDynamoDBのデータの双方に書き込みのタイミングのタイムスタンプが入っていました。そのタイムスタンプがずれてたんです!
それも**1時間**。果てどうしたものか・・・
# AWSがヒントを提供していた
この遅延、実はメトリクスで分かったんです。そのメトリクスは**IteratorAge**
です。Kinesisでも*IteratorAgeMilliseconds*としてメトリクスに書かれていました。
このIteratorAgeは** 読み込んだ時刻と処理時刻の差分
の事のよう。つまり、「入った時間と出る時間の差分」つまり、Kinesis+Lambdaのリアルタイム処理の「遅延」を表していることになると至りました。
「Amazon CloudWatch による Amazon Kinesis Data Streams サービスのモニタリング」
https://docs.aws.am
疑似的にNATゲートウェイを停止・起動する
# VS 使ってないNATゲートウェイの課金
NATゲートウェイは思いのほか使用料金が高く、夜間の開発環境など使用していない時は止めたい。
ただ現在において停止機能は存在しておらず、停止イコール削除となる。
停止という点ではNATインスタンスを立てて停止すれば良い話だが、それでは単純に面倒。せっかくのマネージドサービスは使いたい。
ならば、使用していないときにNATゲートウェイを削除し、使いたいときに必要な情報をもって再作成するスクリプトを作成すればいい。# やりたいことを図にしてみる
![gomi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558188/0b0f391e-afea-597b-dd03-da856764aea1.png)
UMLの書き方は正式に勉強していないので許してほしい。# 停止(削除)スクリプト
“`Python
import boto3client = boto3.client(‘ec2’)
natGateWayList = []
routeTableL
Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する
# 前提条件
初心者向け。Lambdaは知ってるけどWeb APIどうやって実装するんだろう、といったところから。先に結論を書いておくと、Web APIなLambda関数をJavaで実装するのは非常に燃費が悪い感があるのでオススメできない。制約が無い限りは、node.jsとかpythonとかを使った方が断然楽だと思った。
※トラブルシューティングの面でも、Javaとその他のスクリプト言語では情報量が全然違うというか、その他のスクリプト言語ってたぶんJavaほどトラブらない気がする……一応、環境はWindows10+Eclipse+Mavenなので、環境構築からする場合は[この辺の過去記事](https://qiita.com/neruneruo/items/454feea586febabfe13d)を見つつセットアップすると導入が早い。
あと、JDKは8か11にしておく。Lambdaは2020年4月時点ではまだJDK13のランタイムに対応していないのである。
# サンプルプロジェクトからJarファイルを作成する
Eclipseのメニューで、ファイル→新規→プロジェクトのダイ
[Python] Headless Chrome を AWS Lambda で動かす
1. serverless-chromeをダウンロードして解凍
– 以下の `chromium 64.0.3282.167` で動作確認した
– https://github.com/adieuadieu/serverless-chrome/releases/tag/v1.0.0-37
1. chromedriverをダウンロードして解凍
– 以下の `chromedriver_linux64.zip` で動作確認した
– https://chromedriver.storage.googleapis.com/index.html?path=2.37/1. 実行権限付与
– `chmod 777 <ダウンロードしたファイル>`
1. `chrome` フォルダにダウンロードしたファイルを入れて、zipに固める
1. Lambdaレイヤーにzipをアップロード
1. Lambdaレイヤーにseleniumをアップロード
– 以下を参考のこと
– https://qiita.com/mishimay/items/e107b685
[Python] pip3のパッケージを AWS Lambda 上でimportできるようにする
AWS Lambda レイヤーにパッケージ用のレイヤーを追加する。
1. パッケージを配置したフォルダを作成
“`zsh
pip3 install -t python/lib/python3.7/site-packages <パッケージ名>
“`
– `python3.7` の箇所は適宜置き換える1. `python` フォルダをzipに固める
1. レイヤーにアップロード
1. パッケージを利用したい関数にレイヤーを追加する
1. `import <パッケージ名>` で使えるようになる## 参考
## 環境
macOS 10.15.4
Python 3.7.7
AWS LambdaのCustom Runtimeを使い、Node.js v8などEoLとなったランタイムを動かす
# はじめに
Node.js、バージョンアップの足がかなり早いですよね。
AWS Lambdaにおけるランタイムサポート期間も、これにあわせてハイテンポになっています。ちゃんとバージョンアップをしろというご意見は重々承知の上ではありますが、
Node.js v8.10でLambda Functionを使い続けざるを得ない場合に、カスタムランタイムを使ってEoLとなったランタイムを動かし延命処置を図ります。## 動作確認環境
* Arch Linux (2020.04.04)
* Docker 19.03.8-ce
* aws-cli 1.18.36# カスタムランタイムの使い方
カスタムランタイムの仕様については、[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html)が詳しいので割愛します。
カスタムランタイムを使用するには、デプロイパッケージあるいはLayerに、`node`実行ファイルと、ハンドラー関数を起動するための`bootstrap`実行ファイル
[Python / AWS Lambda layers] AWS Lambda Layersでmoduleだけを使い回したい
# 概要
ピンポイントでやりたいことだけがまとまっている記事がなかったので、メモとして作成
[AWS Lambda Layersでライブラリを共通化](https://qiita.com/t_okkan/items/394a15577bd1aad46ec3) という記事のやり方とほぼ一緒なのですが、 **自作ソースを一切含めずに `pip install` される module だけを lambda 上で使い回したい場合** の方法を探しても見つけられなかったので、記事化。
(私が何回も使いたいので!)# 手順
## 1. modules を zip にまとめる
“`bash
$ mkdir python# 他にも欲しい module があれば、全部 python ディレクトリに入れておく
$ pip install module_name -t ./python# pythonディレクトリの中身を layer.zip へと圧縮
$ zip -r layer.zip python/
“`## 2. S3にアップロード
S3のバケットは先に作っておく
#