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

Lambda関連のことを調べてみた2020年04月13日
目次

ALBのバックエンドで動作するJava実装のLambda関数をBlue/GreenデプロイメントするCodePipelineを作る

# 前提条件
以下の記事で作ったアプリケーションをベースに、CodePipelineでCI/CDパイプラインを実装するため、内容を把握しておいてほしい。

[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)

また、ALBのリスナー、ターゲットグループはデプロイ内部で作る都合上、削除しておく。
空っぽのALBのARNが準備されていれば良い(これもデプロイで一緒に作ってしまっても良いけど、ALBの作成って時間かかるので……)。

# 1. CodeCommitのリポジトリの準備
今回、Eclipse+mavenベースなので、git操作もEclipse上で実施することを前提とする。
AWS ToolkitのCodeCommitを右クリックしてリポジトリを作成したら、作ったリポジトリを右クリックしてリポジトリをクローンし、そこにスケルトンのファイルを全部放り込んでビルドし直す。
うまくビルドできたら

元記事を表示

【NodeJS】AWS Lambda+APIGateway+DynamoDBでTODOアプリを作成

## はじめに
サーバーレスを趣味で始めてみたので、勉強がてらAWS Lambda+APIGateway+DynamoDBでTODOアプリを作成し始めました。
個人のメモとして、サーバー側とクライアント側での処理を記事にまとめます。(まだ作成途中です)

## 概要
Lambdaで使用する言語はNode
DynamoDBはidとtodoという項目のみを持ちます。
テーブル名は「todoTable」
今回は、GETとPOSTのみを実装します。

## Lambdaで関数作成
本来であれば1つの関数にまとめたかったのですが、GETメソッドであることをLambdaに渡す方法がわからず、ひとまず関数を分けました。

まずはGETメソッドから。
単純に全てのカラムを取得します。(本来はあまりscanは使わない方がいいらしいが)

“`js
const AWS = require(‘aws-sdk’)
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = (event, context, callback) =>

元記事を表示

静岡県オープンデータカタログ(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で毎日自動削除する

# メンヘラすぎて無視されたツイートは消したい
これは私ではないが、こういうツイートを消したい

– 無視されるよりは無視したほうが良いという、被害者より加害者よりの思考へシフトし、陽キャよりのコミュニケーションにコミットを行う
– これは[セキュリティ・オートメーション](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 boto3

client = 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

元記事を表示

OTHERカテゴリの最新記事