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

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

AWS CDK + Typescript 環境で lambda layer を上手く管理する

aws-cdk を使って lambda function の開発をしている際に、良さげに出来た lambda layer 管理の方法をメモしておこうと思ったので記しておきます。
初学者なのでもっと良い方法はあるかもです。。

## 動機
* `import { hoge } from ‘layer’` みたいに lambda layer にしたコードを使いたい
* vendor ライブラリも実装者が特に意識せず使いたい(vendor ライブラリも layer にしておく必要があります)
* `package.json` は1つだけで良い

という事を解決し、かつ簡単にその環境を用意したいという背景からです。

## 動作確認環境
* typescript: 3.8.3
* aws-cdk: 1.26.0
* aws-sam-cli: 0.40.0

## まずは簡単な lambda function を用意しておく

以下は、 `cdk init –language typescript` で作成した cdk の環境を基に書いていきます。
プロジェクト名: cdk-project

元記事を表示

AWS Layer 作成スクリプト fo python

LambdaのDockerコンテナでPIP実行してZIP化。それをAWS Lambda Layerとして発行するスクリプトです。

– 要Dokerインストール(lambci/lambdaイメージ内でPIPします)
– 事前にAWS Configureしてください。
– 以下のソースコードをファイル保存(publish.sh)し、実行権限を付与。“`chmod +x publish.sh“`
– パラメータ指定して実行(param1=layer-name, param2=lib-name, param3=lib-version, param4=python-version)
– “`./publish.sh requests-python37 requests 2.22.0 python3.7“`
– 同じLayer-nameを指定して再実行すると、新しいlayer-vesionが作成されます。

作りが雑ですが、一応動きます。。。手元の環境を汚したくない時にどうぞ。

“`bash
#
# Require: docker installed.
# Require:

元記事を表示

既存のAWS Lambdaの処理にServerless Frameworkを適用する

# 背景
AWS Lambda × Phthon 2.7 でバッチ処理を動かしていたが、Python 2.7のサポート終了に伴い、Python3系にしたい。
また、あまり修正が入らないからという理由で、Lambda関数をローカルでパッケージングして手動でデプロイしていたのが辛いし、PCの環境も汚れるので、そこらへんを解消しつつデプロイできるようにしたい。

クラウドベンダーを選ばないことや、メンテナンスがしっかりされていることから、[Serverless Framework](https://serverless.com/)を利用してデプロイを行えるようにする。

#### 参考
– [Serverless Framework公式サイト](https://serverless.com/)
– [Serverlessを使って簡単にAWS Lambda Layers上でHeadless Chromeを動かす](https://blog.ikedaosushi.com/entry/2018/12/22/231421)
– [Headless ChromeとSeleniumをLambdaで動か

元記事を表示

AWS Lambda × Selenium × Chromeでハマったところ

# 起きたこと
[既存のAWS Lambdaの処理にServerless Frameworkを適用する](https://qiita.com/sshon/items/f00e01c029cde2021fb8)対応で、Lambda関数実行の際に以下エラーが発生し、長時間ハマった。

– Seleniumのインスタンス作成時に「error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory」というエラー
– 上記解消後、また、Seleniumのインスタンス作成時に「Message: chrome not reachable」というエラー

# 環境
– AWS Lambda
– python 3.8
– serverless-chrome 1.0.0-55 (chromium 69.0.3497.81)
– ChromeDriver 2.44
– Selenium

# 対応
### error while loading s

元記事を表示

GoogleAssistantからWebhookでLineの特定人物へPush通知

アンドロイドスマホに搭載のGoogleAssistantもしくはGoogleHome系のアプリを作りました。
サムネイル.png

##実際の図
GoogleAssistantで”アイで”と発話すると”hello”と返し、Line側には”アイで”がPUSH通知されます。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595220/156c8c65-1ec2-eb8b-5f81-b1eb78a9b688.jpeg)
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595220/71b7a38c-1f1d-bcd4-159e-558622

元記事を表示

AWS SAM アプリケーションをデプロイする

https://aws.amazon.com/jp/serverless/sam/

AWS SAM (Serverless Application Model) は、AWS 上にサーバーレスアプリケーションを構築するためのオープンソースフレームワークで、CloudFormation のパッケージを簡単に作成、デプロイできるようにしたものです。

v0.33.1 でインタラクティブモード(`deploy –guided`)が実装され、サーバーレスアプリケーションの配布・デプロイが劇的にシンプルになったと思います。

## セットアップ

Docker, AWS CLI, AWS SAM CLI をインストールする必要があります。

### Docker

[Docker](https://www.docker.com/) をインストールします。

### AWS CLI

AWS アカウントを持っていればインストール済みだと思いますが一応。[AWS CLI](https://aws.amazon.com/jp/cli/) をインストールし、認証情報を設定しておきます。

例) bre

元記事を表示

ConnpassイベントをSlack通知するツールを作ってTerraform化してみた

Connpassの勉強会情報をSlack通知するツール(python)を作ってterraformでデプロイ自動化してみました。
ものはこちら → https://github.com/ishim0226/ConnpassToSlack

いくつかパラメータセットしてapplyするだけなので、数分でデプロイできます。

## 作った背景

普段、インフラエンジニアとして働いておりプログラミングすることがあまりないので、勉強してみたいと思ったのがきっかけです。
どうせならインフラ部分のスキルを掛け合わせたいと思い、クラウド上でインフラコード化を前提に考えた結果、このようなものを作ってみました。
おかしな箇所ありましたら、コメントいただけると幸いです。

## ツールの特徴

ざっくり特徴をあげると、以下のようなものです。

– 新規追加されたイベントまたは、更新があったイベントのみ通知します。(通知済みイベントをDBで管理してます)
– 以下で通知するイベントをフィルターできます。
– キーワード(複数のOR指定が可能、※ANDや除外はできません)
– 開催場所(複数のOR

元記事を表示

AWS Lambda(Python)を使うならのまとめ

## はじめに
AWS Lambda(Python)を使うならやったほうが良いことをまとめてみた。
まだ試していないものも含む。随時更新。

## やったほうがよさそうなこと
– Jeffyフレームワークの適用
トレースやロギングの共通処理の実装を簡略化できる。

Lamdbaの開発を便利にするPythonのアプリケーションフレームワークJeffyが公開されました

– AWS Lambda Destinationsの適用
Lambdaの実行結果に応じて次の処理を実施することができる。
https://qiita.com/kojiisd/items/efcb2ac3d5cc176534ba

– AWS Lambda Layersの適用
よく使うライブラリを共通化できる。
https://qiita.com/t_okkan/items/394a15577bd1aad46ec3

– 並列処理化
重い処理を並列処理する。
https://qiita.com/kenmaro/items/69fdd84e18e793a21790
https://aws.amaz

元記事を表示

API GatewayのCustom AuthorizerのLambda関数が呼ばれない

cdkを使ってREST APIを構築しています。
API Gatewayの認証にLamdba関数をカスタムAuthorizerとして使用していたところ、あるタイミングで突然認証が通らなくなってしまった。

# 現象
– カスタムオーソライザーのテスト機能では正しく動く(Lambda関数も実行される)
– Postmanからのリクエストでは認証のためのLambda関数がそもそも動かない

手動でAPIをマネジメントコンソールからデプロイしたところ動くようになりました。
https://stackoverflow.com/questions/52549538/aws-api-gateway-custom-authorizer-not-invoked

cdkのバグなのかな?
開発初期は上手くデプロイできたと思うんだけど、何かの変更が反映されないのか。。。
謎い。

それにしてもハマった。

元記事を表示

AWS Lambda入門③(Node編)〜API Gatewayで関数を公開する〜

## 概要

– [AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜](https://qiita.com/ozaki25/items/883aec0ab4398aa4abbe)と[AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜](https://qiita.com/drafts/d3c5b5e6954d5b4af95a/edit)の続編です
– 今回は前回までに作成したLambda関数をAPI Gatewayを使ってHTTPでアクセスできるように公開します

## Api Gatewayとは

– API GatewayはAWSが提供するサービスでHTTPでアクセス可能なAPIを作成できるサービスです
– AWSの様々なサービスの呼び出しができるのでクライアントからするとLambdaなどをHTTPアクセスで実行するような感覚で使うことができます

## API GatewayでLambda関数を公開する

### Hello関数を公開してみる

– まずは前回までで作ってあるHello関数を公開してみます
– `serverless.y

元記事を表示

Lambda から DynamoDB にアクセス (Node.js)

テーブルの一覧

“`js:list_tables.js
var AWS = require(“aws-sdk”);

var dynamodb = new AWS.DynamoDB({region: ‘us-east-1’})

var params = { Limit: 100}

exports.handler = async (event) => {

console.log(“*** start ***”)

try {
var data = await dynamodb.listTables(params).promise()
console.log(data)
} catch (ee) {
console.log(ee)
}

const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
}
return response;
}
“`

テーブルの説明

“`js:describe_table.js

元記事を表示

AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜

## 概要

– [AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜](https://qiita.com/ozaki25/items/883aec0ab4398aa4abbe)の続編です
– 今回はLambdaからDynamoDBにアクセスしてデータを保存したり取得したりしてみます
– テーブルから全件取得、1件取得、1件登録の3つの関数を作成します

## DynamoDBとは

– AWSが提供するマネージドなデータベースサービスです
– RDBとは異なりkey-value形式なドキュメントデータベースです

## LambdaからDynamoDBにアクセスしてみる

### DynamoDBの設定

– まずはDynamoDBを使うためにServerlesFrameworkの設定をします

#### DynamoDBのテーブル定義の設定

– DynamoDBはデータベースなのでテーブルの作成からはじめます
– これまでと同じようにこれもServerlessFrameworkの機能で行うことができます
– 今回はHelloテーブルを作ってみます

元記事を表示

AWS Lambdaでデフォルトでは用意されていないコマンドを呼ぶ

# やったこと

AWS LambdaでPythonからgsコマンドを呼んでPDFを結合しました。

# 経緯
業務でPDFの結合を行う必要があって、PythonのPyPDF2を使って結合をする実装になっていました。
しかし、このPyPDF2さんはPDFのファイル構造がPDFのbasicなファイル構造(つまりheaderがあって、bodyがあって、Cross-reference Tableがあって、Trailerがあるみたいなもの)を前提としていて、Cross-reference TableがないとかTrailerがないPDFファイルを結合しようとするとエラーになってしまっていました。
つか、PDFのファイル構造が多少おかしくなってても表示できるようになってるほうがおかしいだろ、やめてくれ
って思ったりもしましたが、ブラウザで表示できてるのに、結合できないのはなんとかしたいということで、なんとかすることに。。。

# 環境
AWS Lambda Python3.7

# 解決

「ghostscriptをPythonから呼び出すのはどうですか?手元ではいけましたよ」
と聞いたのでさっそ

元記事を表示

Node.js製Lambdaの速度劣化箇所をX-RAYを使って特定する

# はじめに

「[お気に入りのテレビ番組の有無を答えてくれるAlexaスキルを作ってみた](https://qiita.com/masaminh/items/1153f34891b1c04b4ee1)」でNode.js製のLambdaを作ったのですが、

>ただ、スキルを呼び出した後、返答が返ってくるまで少しタイムラグがあるのが気になりますね

>いずれにしてもX-RAYを仕掛けて、番組表取得で遅くなっているのか、その後の処理で遅くなっているのかなどを見極めたいと思っています。

ということで、X-RAYを使って、速度が遅くなっている箇所を特定したいと思います。

# コンソールからの設定

まず最初にコードには手を入れず、LambdaのコンソールからX-RAYの設定をしてみます。
Lambdaのコンソールにて、対象関数の「AWS X-RAY」の箇所のチェックボックスをONにします。
ScreenShot_lambda.pngServerless Framework で AWS Lambda と API Gateway をデプロイする

[Serverless Meetup Tokyo #16 (オンライン開催)](https://serverless.connpass.com/event/165352/) を拝見していて、ちょうど今、AWS への各種リソースのデプロイの自動化が課題だったので、よい機会と思い Serverless Framework を使ってみた。
尚、Serlverless Framwork については知っていたが、offline-start しか使ったことがなかった程度の人間です。

## やったこと

弊社では Webシステムを、

* フロントエンド: SPA(Angular)
* バックエンド:
* REST っぽいAPI: Lambda + API Gateway
* DB: PostgreSQL 他

で組むことが増えてきていて、プロジェクトの取っ掛かり時の環境構築を手動でやっているのがダルくなってきた。
今回は、「REST っぽいAPI: Lambda + API Gateway」のところを Serverless Framework で自動化してみた。

## 手順

元記事を表示

疑似的に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

元記事を表示

Lambda から S3 を使う (Python)

バケットの一覧

“`py:list_buckets.py
# ——————————————————————
import json
import boto3
print(‘Loading function’)
s3 = boto3.resource(‘s3’)

def lambda_handler(event, context):
print(“*** start ***”)
#
it = 1
#
for bucket in s3.buckets.all():
print(str(it) + ‘:’ + bucket.name)
it += 1

return {
‘statusCode’: 200,
‘body’: json.dumps(‘Hello from Lambda!’)
}

# ——————————————–

元記事を表示

Lambda から S3 を使う (Node.js)

バケットの一覧

“`js:list_buckets.js
‘use strict’

const AWS = require(‘aws-sdk’)
var s3 = new AWS.S3()

exports.handler = async (event) => {

console.log(“*** start ***”)

try {
var data = await s3.listBuckets().promise()
console.log(data.Buckets)
} catch (ee) {
console.log(ee)
}

const response = {
statusCode: 200,
}

return response
}
“`

バケット内のファイルの一覧

“`js:list_files.js
// —————————————————————

var A

元記事を表示

Serverless NestJS

NestJSを利用したLambda&API GatewayのServerlessをやってみます。

注意点としては、NestJSはExpress.jsと比較すると重いフレームワーク(フルスタック)なので、起動に時間がかかってしまい、あまりサーバレスに向いているとは言えないです。
が、個人で利用する場合や社内系のアプリケーションの場合などは、サーバレスだと安くて試しやすいと思うので、是非使ってみてください。

## NestJSプロジェクト作成
いつものやつです。
ひとまずローカルでHello Worldができる状態にします。

### プロジェクト作成
“`console:
$ nest new nest-serverless-test
“`

### 動作確認
“`console:
$ cd nest-serverless-test
$ npm run start
~ 中略 ~
[Nest] 3935 – 2020-02-29 19:19:07 [NestApplication] Nest application successfully started +1ms
`

元記事を表示

【初心者向け】LambdaとAlexaスキルの連携設定

#LambdaとAlexaスキルの連携設定
前の記事:[LambdaでAlexaカスタムスキルと連携する関数を作成](https://qiita.com/kurisaka/items/00451cb7d5551a79b68d)
###スキルIDの表示
スキルの一覧に戻り該当スキルの「スキルIDの表示」を押下する
![4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/a0fca7a0-06cb-0557-a79a-3d15788a645c.png)

###スキルIDのコピー
表示されたスキルIDをコピーしておく
![4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/df876165-d394-b9a1-19f0-269fb1abd735.png)

###Lambdaトリガーの設定
Lambdaに戻り「Designer」を開き「トリガーを追加」を押下
![4-3.png](https:

元記事を表示

OTHERカテゴリの最新記事