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

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

AWS CodePipelineが対応していないgitリポからのCI/CD構築

# 本記事の対象読者
* AWS CodePipelineに対応していないgitリポから、CodePipelineに乗せたい人
* AWS Lambdaでgitコマンドを使いたい人

# CI/CDしたい
とあるAWSプロジェクトで、ソースコード管理にBacklog gitを利用していました。
どうせならCI/CDを組んでしまおうと考えたのですが、AWS PipelineがBacklog gitに対応しておらず。。。

そこで、Backlogのwebhookを使ってS3にまでソースコードを連携する以下のようなアーキテクチャ構成としました。
アプリ自体はnuxt.jsで作成しており、buildしてS3にアップロード、静的WEBとして公開することがゴールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545043/213288de-10dd-758f-8772-0cf8f7efd554.png)

# 実装環境
AWS Cloud9

* Serverless Frameworkを利用

元記事を表示

AWSとLINE BOTを使って簡単にコロナウイルス感染者数をチェックする

# 経緯

コロナウイルス感染者数が増幅していく世界で、不安におびえつつ感染者数をチェックする自分に呆れながらも、いちいちサイトを見に行く手間にうんざりしたので、都道府県名を入力すれば情報を教えてくれる**LINE BOT**を作ってみた。

# Demo

![20200414_022946000_iOS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283351/b1d31cb1-aae8-804a-ef13-1829b3f49715.jpeg)

**※画像は4/14日時点の情報です。**

# Architecture

![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283351/95b7c9ee-1a18-64f4-19f3-e3a91545fdea.jpeg)

# LINE Devlopersに登録

– 登録してプロバイダーを作成、チャネル作成を行う。
– [Me

元記事を表示

DynamoDBで”The provided starting key does not match the range key predicate”とエラーが出た場合の対策(node.js)

Lambda(node.js)で、DynamoDBから超膨大なレコードを取得するプログラムを開発していました。
1分単位でクエリを実行して、レコードを小分け取得するようにしたのですが、
その際にプロパティを初期化できていなかったため、標題のエラーが発生したようです。

っていうことが、以下の記事を見てわかりました

https://qiita.com/nanananamememe/items/52293f1fece4458cc2fa

具体的な対策は `delete params[“ExclusiveStartKey”];` みたいな感じで
プロパティを消せば良いです。

すっごく長いですが、備忘録を兼ねてソースコードを掲載します

“`javascript

try {
var ENV = require(‘dotenv’).config();

var AWS = require(‘aws-sdk’);
AWS.config.update({ region: process.env[‘AWS_DYNAMO_DB_REGION’] });
var docClient

元記事を表示

VPCにのLambdaからS3に接続

# 問題
VPCにのLambdaからS3に接続できない
# 解決
S3アクセス用エンドポイントを作成する
Lambdaに設定しているサブネットに上記のエンドポイントを追加する
# 参考

VPC内のLambdaからS3にアクセスする方法

元記事を表示

Amazon Translate、AWS Lambda を使った自動翻訳(前編)

#はじめに
今回も AWS 公式ブログから、気になる記事を見つけてきたのでご紹介します。

ビジネスや個人向けに、デジタルなテキストドキュメントをコピー&ペーストして、希望の言語に翻訳できるツールが複数存在します。(分量に限度があり)
しかし頻繁に行うとなれば、退屈で時間だけがかかる作業になります。

そこで、2 つのソリューションについて解説していきます。

1. 収集したドキュメントに、非同期のバッチ翻訳を行うシンプルな翻訳
2. AWS Lambda と Amazon のリアルタイム翻訳を使い、ドキュメントを入手する度に同期的に翻訳を行う、より進んだ手法

#Amazon Translateとは

– 現実的な価格で、迅速かつ高品質な翻訳を実現する、ニューラル機械翻訳サービス
– ニューラル機械翻訳、深層学習モデルを応用した、自動翻訳の一形態
– 従来の統計学や規則をベースにした翻訳アルゴリズムと比べて、正確かつ自然
– 多様なコンテンツに適格に対応。異なるユースケースやドメイン間での、多様な文章を使ってトレーニングされている
– 大量に集積したテキストや HTML ドキュメント

元記事を表示

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のものを使用します

元記事を表示

OTHERカテゴリの最新記事