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

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

AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする

AWS Lambda(以下、Lambda)に外部モジュールをデプロイする方法を見ていきたいと思います。ここではPythonを例に見ていきます。

実行順序
1. Amazon Linux 2(Lambdaの実行環境)を準備する
2. ソースファイルとともにLambdaにデプロイ
2. Lambda Layerを使う方法

*2はどちらを選んでも構いません。

## 1. Amazon Linux 2(Lambdaの実行環境)を準備する
requestsモジュール等、内部でC言語などを使わず、Pure Pythonで書かれたモジュールの場合、このステップは不要です。
***しかし、numpyやscipyといった、C言語に依存するモジュールの場合、Lambdaの実行環境と同じ環境で開発するのが開発しやすくなります。 windowsやMacでインストールしたnumpyをzipで固めてデプロイしてもエラーとなります。***

ここでは、Amazon Linux 2の環境として、公に公開されているDockerイメージ、***lambci/lambda:build-python3.7*** を使い

元記事を表示

【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke

###Lambda関数から別のLambhda関数を呼びに行きたい時ってありますよね!
そんな時に使える方法を備忘録として残します。

[公式ドキュメント該当ページ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html)

呼び出す側のLambda関数(main.js)

“`main.js
const AWS = require(‘aws-sdk’)
const lambda = new AWS.Lambda()

let params = {
FunctionName: `invoked.js`,
InvocationType: ‘Event’,
Payload: JSON.stringify({
id: “xxxxxxxxxx”,
message: “xxxx”
})
}

元記事を表示

AWS Lambda関数でNode.js レイヤーを作る

#対象者
AWSでLamdbaを使っている人/どんなことができるのか調べている人
LINEBotをサーバーレスで作りたい人
Lambdaのレイヤーという機能を知らない人/興味ある人
#下準備
とりあえずデスクトップに移動
`$ cd Desktop`
ディレクトリ作る
`$ mkdir nodejs`
nodejsディレクトリに移動
`$ cd nodejs`
初期化
`$ npm init -y `
レイヤーにしたいパッケージをインストール
`$ npm i xxxxx`
ex)LINEBotのSDKをインストールする場合
`$ npm i @line/bot-sdk`
nodejsディレクトリ自体をzipファイルに圧縮して下準備完了

#AWSコンソール
ログイン→Lambda→レイヤー→レイヤーの作成
スクリーンショット 2020-04-21 16.53.40.png【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作る

AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに通知したいことがあるかと思います。
今回はその構成をCDKで作成してみました。

## 環境
CDK CLI: 1.32.0
ローカルのNode: 11.15.0

## 構成
今回は、`trigger-chat-cdk`というLambda関数を監視対象とし、「1分間に2回以上、関数が呼び出されたらエラーを挙げる」という条件を設定します。
スクリーンショット 2020-04-21 16.04.45.png

以下は手順になりますが、[このリポジトリ](https://github.com/nomi3/cdk-alarm-to-hungout-chat)をcloneすれば、手順の3,4は省略できるので、より速攻で

元記事を表示

AWSのCICDの練習(CodePipeline/ECS/Lambda)

AWSでCICD、FargateのBlueGreenDeployの練習を行う。

# 使用サービス
– CodeCommit/Build/Deploy/Pipeline
– CloudWatch Events
– Fargate
– Lambda

作業で使用する資材は以下となる。

“`shell
.
├── 01-codecommit-ecr.yaml
├── 02-codebuild-pipeline-events.yaml
├── 03-ecs-alb.yaml
├── 04-codebuild-pipeline-events-update.yaml
└── httpd-repo
├── appspec.yaml
├── buildspec.yml
├── Dockerfile
├── fargate-task.json
└── index.html
“`

資材のGithubの[リンク](https://github.com/udtren/aws-cicd-pipeline-ecs-customlambda)

# 作業内容
##

元記事を表示

APIGatewayでWebSocketを利用した場合のOpen時の認証処理

# はじめに
AWSのAPI GatewayがWebSocket対応しています。
この接続を認証したもののみでOpenするのにどうするか?の話です。
wscatなどでコマンドで叩かれると接続だけはできちゃったりするので、そのあたりをどう防止できるかというものです。
今回は別のシステムなりで認証後に発行されたIDがDynamoDBにあり、ブラウザ側へ送信されてるのを前提とします。
$connect時にそのIDがついてる時だけconnectionIdをDynamoDBに格納したい時にどのように出来るかの話となります。

# $connect時のみGetパラメータが取れる
もう結論出てるんですが、API Gatewayで設定したものはブラウザ上でnew WebSocket()などでOpenした時に、URLについたGetパラメータがいつも通りにLambda側で取得できます。

ブラウザ側

“`
const socket = new WebSocket(“wss://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod?id=xyz”)

元記事を表示

DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた

# AWSでサーバーレスなバッチ
2つのAWSアカウント間(VPC Peering済み)で、一方のデータベースからデータ加工してもう一方のデータベースへ、のようなバッチをつくります。

![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86958/b7864d8e-aab0-eac5-7906-a253e09f7425.png)

勉強も兼ねてAWSのサービスを積極的に使っていこうということで、
まずは間に [DynamoDB](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html) を挟み、分割した [Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html) function で処理する形にしました。

![qiita2.png](https://qiita-image-stor

元記事を表示

lambda で heic 形式の画像を扱うためにやったこと

## 背景

iphone のカメラで保存された画像はデフォで heic という形式になっており、web ブラウザは現状解釈してくれない。そのため、他のjpgなどの画像と同じように扱うためにはサーバ側で加工する必要がある。[^1] 今回は、サーバ側でどうにかする手段をやってみたので残しとこうと思う。

## 内容

### 結論

lambda に imagemagick を仕込んだ lambda layer を連携させて、imagemagick を叩けばok

### 実装方法

lambda の runtime は node v12
lambda の管理には serverless framework
lambda layer はこの[リポジトリ](https://github.com/serverlesspub/imagemagick-aws-lambda-2)のものを使う。ただ、 heic を扱うためのライブラリが入っていないので同リポジトリに上がっていたPRからビルド手段を持ってきました。imagemagick のビルドフラグで heic を追加したり、必要なモジュールである、

元記事を表示

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にアクセスする方法

元記事を表示

OTHERカテゴリの最新記事