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

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

Lambda関数をBlue/GreenデプロイメントするCodePipelineをCloudFormationで自動構築する

# 前提条件
以下の記事で手動構築していたCodePipelineのCI/CDパイプラインをCloudFormationで自動構築してみる記事。なので、構成やアプリケーションの内容は読んで把握しておくことが望ましい。

[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)
[ALBのバックエンドで動作するJava実装のLambda関数をBlue/GreenデプロイメントするCodePipelineを作る](https://qiita.com/neruneruo/items/73906cdc3c2aa699644f)

最終的に目指すCI/CDパイプラインの構成イメージは以下。Lambda関数のフロントにALBがいる想定だが、このパイプラインでは触らない(厳密には、リスナーとターゲットグループは触る)ので割愛する。
![LambdaCFn.png](https://qiita-image-stor

元記事を表示

AWSのサーバレスサービス試してみた (Lambda・DynamoDB・APIGateway)

AWSの花形と言えばサーバレスのサービスだろうと思ったので
awsのサーバレスサービス(Lamda)を中心に簡単な設計概念を解説してから
lamdaのハンズオン出来るように記事として書き起こしてみる。

###参照:これだけでOK:awsアソシエイト
https://www.udemy.com/course/aws-associate/learn/lecture/13595998

##このハンズオンで実施する内容
1.Lambdaと連携するDynamoDBの構築
2.Lambdaの構築
3.API GatewayによりAPIを構築する

##今回構築するアーキテクチャ
apiを介してlambdaを呼び出して、lambdaがdynamodbからデータを取得するという関数を実行してその関数の実行結果に基づいてapiにdynamodbの取得した結果がapi側で取得されるという流れを作る。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99495/faa7be8c-9a96-632

元記事を表示

あのボタンを押したらM5Stackに今何してるを表示させる

COVID-19の影響でリモートワークな人です。


今回は、

**あのボタンを押したらM5Stackのディスプレイに今何してるか表示させる**

っていうのをやってみました。

## きっかけ
きっかけはソラコム小熊さんが投稿されてた
[M5stack で作る ON AIR サインで手に入れる平穏な在宅勤務環境](https://blog.soracom.jp/blog/2020/04/02/on-air-sign-on-m5stack/)
です。
ボタン使ってできるんじゃないかなーって思って、誰か(ソラコム某エバンジェリスト)が作るんじゃないかなーとちょっとボールを投げたら、
見事に投げ返されたので、まあ、面白いからやってみぜよと。
まあ、事実としては、居間でテレワークしている人がいるので、会議中に居間行きたくないので、それがわかるようにも使えそうだしってこともありまして。。。
技術力の問題で時間かかってしまいました。。。

## できました。
### 構成
構成図AWS lambda(Node.js)でオレオレ証明書(self-signed)を一時的に信頼してSSL通信を行う方法

# はじめに
AWS lambdaのNode.js(https標準モジュール)で実装した、WEBサイトへhttpsのリクエストを投げる処理で、以下の2つのエラーが発生した際の対応についての記事です。
※急いでいる方、ソースコードだけ見たい方は[ここから見ればOK](#3オレオレ証明書self-signedを一時的に信頼する)です

スクリーンショット 2020-04-16 22.24.09.png
スクリーンショット 2020-04-16 18.31.17.pngSlackのSlashCommandをAWS LambdaのPythonで実装したときにタイムアウトで困っている場合

こんな風にすればレスポンスを即時で返して2度めの呼び出しで後続処理をできるのでタイムアウトが出づらくなる。
呼び出し回数は倍になるけど。

“`python
def lambda_handler(event, context):

if “hoge” not in event:
event[“hoge”] = “fuga”
boto3.client(“lambda”).invoke(
FunctionName=context.function_name,
InvocationType=”Event”,
Payload=json.dumps(event),
)

return {}

# 以下本当にやりたい処理
“`

Pythonのは探しても見つからなかったので書いとく

LambdaからLambda呼ぶアクセス権限は別途設定する必要がある

【AWS】CodeStarでPython Lambda環境を作ってHelloWorldする

## はじめに
### 概要
このところ [AWS CodeStar](https://aws.amazon.com/jp/codestar/) を使った開発を行っています。
CodeStarはざっくりいうとCI/CDサービスとダッシュボードをまとめたサービスという理解でいます。
CI/CDツールもパッケージ化して作成してくれるので書いたコードがすぐに反映されるのでちゃちゃっと試したいときに便利なものではあります。
ただ作り込んでいくと(AWS初心者の私は)権限周りで躓くことが結構ありました。
今後S3アクセスやLambdaのVPC配置、EC2プロジェクトについても随時更新していく予定です。

まずはローカルのテキストエディタでコードを編集・Pushして変更を確認するところまで。

### 前提
– 作業日時:2020/4/11
– ローカル環境
– PC:Mac
– OS:Catalina
– インストール済みコマンド:Git CLI, AWS CLI
– AWS環境
– ユーザー:root
– AWSリージョン:東京(ap-northeast-1

元記事を表示

AWS lambdaで setTimeout を待つ(await, callback2つの手法)

`lambda` で、 `setTimeout` を利用する場合、何も意識しない場合 `lambda` の実行が終わってしまいます。

それを待つには、 `await` を使う方法がパッと思いつきますが、 `callback` を使っても待つことが出来ます。

## await を利用するパターン

`Promise` を使って書きます。

“`
exports.handler = async (event, context, callback) => {
await new Promise(resolve => {
setTimeout(() => {
console.log(‘waited!!!!!!!!!!!!’)
resolve();
}, 2000);
});
};
“`

## callback を利用するパターン

`callback` メソッドは、実行前に `node` のイベントループが空になるまで待つようになっているので、 `setTimeout` が終わるまで待ち

元記事を表示

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

#はじめに
[前回の記事](https://qiita.com/JJ33/private/2926898abbda8f38d340)でご紹介した、ドキュメント翻訳の自動化の実践の続きです。

![batch-translation-6.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/26a78e9a-097c-8b7b-c03f-31ea80a86f9b.gif)

コンテンツを外国の言語に翻訳するには、バッチ翻訳ジョブを実行することで、容易かつコスト効率よく解決することができます。
しかし、一連のドキュメントを集めたり、そのドキュメントに対して定期的に非同期のバッチ API を呼び出したりすると時間がかかります。
ドキュメントが用意された時点で、すぐに翻訳処理を開始できたほうがいいですよね。

#AWS Lambda と リアルタイム翻訳を使用する進んだアプローチ
イベント駆動型アーキテクチャを利用することで、簡単に、自然な翻訳を行えるようになります。

特定の S3 バケットにドキュメ

元記事を表示

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の作成って時間かかるので……)。

最終的に目指すCI/CDパイプラインの構成イメージは以下。Lambda関数のフロントにALBがいる想定だが、このパイプラインでは触らない(厳密には、リスナーとターゲットグループは触る)ので割愛する。
![LambdaCFn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111314/48

元記事を表示

【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)
}

元記事を表示

OTHERカテゴリの最新記事