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

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

AWS Lambda上でGCCを動かす。

はじめに
=====
オンラインジャッジをサーバーレスで構築してみたかったので、まずLambda上でGCCを動くようにしました。

環境
=====
Node.js 12.x

GCCが動作するのに必要なもの
=====
– GCC: 本体。
– Binutils: GASとか。
– GLibC: ヘッダーファイルやランタイムなど。

普通の環境ではGCCのみコンパイルすれば動かすことができます。
ですがLambdaの中には最小限のソフトウェアしかインストールされていないため、いくつか別にインストールする必要があります。

インストール先
=====
最初に思いつくであろう方法がプログラムを含めたZIPファイルに一緒に含めてGCCをアップロードする方法です。
ただその場合ZIPファイルの容量制限がかなり厳しいので、結構機能制限しないとGCCをアップロードすることはできません。
またGCCだけで容量がいっぱいいっぱいになるため、他のコンパイラをインストールすることができないというデメリットもあります。
そのため今回はGCCをインストールしたEFSを用意して、Lambdaにマウントすること

元記事を表示

「桜井さん」をAPI Gateway + LambdaでLINE BOT化してみた

# はじめに
これは前回作成した記事「[「アイネクライネナハトムジーク」に出てくる斉藤さんをミスチルの桜井さんとして再現してみた](https://qiita.com/hiro_nishi/items/a9db96e0d77a6b6fc5ef)」の続きになります。
気になった方は上記の記事をまず読むことをおすすめします。

# 作ったもの
まずはどんなものを作ったか紹介します。

こちらで友達登録したら試すことができます!

https://lin.ee/WEqJMO7

使い方はシンプルです。
桜井さんに何か話しかけます。
そうするとその心境に合うようなミスチルの曲の一部を桜井さんが歌ってくれます。(正確にはテキストで返信してくれます)
裏でCOTOHAの感情分析APIを活用していて、
送信した文章と感情スコアの近い歌詞の一部を返すようになっています。
なのであまり内容が一致してないことも多々あることはご了承ください。(お遊び感覚でお使いください。。)

[AWS] Step Functionsで遊んでみる(SAM + Lambda) Part.3(分岐編)

# Part.2のおさらい
[Part2](https://qiita.com/herohit-tool/items/fbd0b91dacce218819ae)では、主に以下のことを行いました。

– Lambdaに固定引数を渡してみる
– Lambdaに外部からの引数を渡してみる
– Lambdaにコンテキストオブジェクトを渡してみる
– Lambdaの戻り値を、別のTaskの引数に渡してみる

今回は、その続きからはじめてみます。
ここから始める方は、
https://github.com/hito-psv/sam-demo-005
のコードを`git clone`してもらっても大丈夫ですし、[Part2](https://qiita.com/herohit-tool/items/fbd0b91dacce218819ae)からやってみてもらっても構いません。

# 今回のターゲット

– Lambdaでランダムな結果を返す
– 結果に応じて、次に実行するタスクを変える
– リトライ時は、しばらく時間が経ってから再実行する

をターゲットにしてみたいと思います。
Lambda部分につ

元記事を表示

Boost LambdaとCUDA/GPUについての雑感

ラムダ式は無名関数を提供する機能。
→ 個人的には、「いかにforループ式を書かないか」というコンセプトの1つ。

思えば、CUDA/GPUも、いかに「C/C++的なforループを書かないか」という設計になっているとも言える。
繰り返しの表現にはループの他に、リストを使う方法がある。

    1#include 
2#include
3#include
4#include
5using namespace std;
6using namespace boost;
7
8int main()
9{
10 using namespace boost::lambda;
11
12 int init_v[] = {-25,-15,0,25,15};
13 vector v( init_v, init_v+5 );
14

元記事を表示

[AWS] Step Functionsで遊んでみる(SAM + Lambda) Part.2(パラメータ編)

# Part.1のおさらい
[Part1](https://qiita.com/herohit-tool/items/a43044383832ed04ffba)では、主に以下のことを行いました。

- Lambda関数を作成する(SAM)
- Lambda関数をデプロイする(SAM)
- ステートマシンを構成する
- Lambda関数を呼び出す(だけ)
- ステートマシンをデプロイする(SAM)
- ステートマシンを実行する(マネジメントコンソール)

今回は、その続きからはじめてみます。
ここから始める方は、
https://github.com/hito-psv/sam-demo-004
のコードを`git clone`してもらっても大丈夫ですし、[Part1](https://qiita.com/herohit-tool/items/a43044383832ed04ffba)からやってみてもらっても構いません。

# 今回のターゲット
- Lambdaに固定引数を渡してみる
- Lambdaに外部からの引数を渡してみる
- Lambdaにコンテキストオブジェクトを渡してみる
-

元記事を表示

GASからAWS API Gateway(Lambda)へリクエストするときのパラメーターの送受信方法

#要点
・GASでpostする時は `'contentType': 'application/json'` を指定してpayloadのjsonをstringifyしておく
・AWS側でparse

#コード
GoogleAppsScript

```uploadToAws.gas
function uploadToAws() {
const aws_url = "APIのURL"
const params = {
'method' : 'post', //get or post
'contentType': 'application/json',
'payload' : JSON.stringify({"data1": "hogehoge" })
};
const req = UrlFetchApp.fetch(aws_url, params);
Logger.log(req.getContentText());
}

```

Lambda(Node.js)

```lambdaSample.js
const aws = require('

元記事を表示

AWS LambdaからSalesforceのREST APIを呼び出す

- 表題の通り、LambdaからSalesforceのREST APIを呼び出してみます
- Lambdaの言語はNode.jsを使用します

## Salesforce接続アプリケーションの設定
- 外部サービスとSalesforceを接続する際にOAuth認証を使います
- OAuthの設定をするには、Salesforceで接続アプリケーションの設定を行います

### 設定方法
- Salesforceにログインした後、[設定]>[アプリケーション - アプリケーションマネージャ]と選んで
- [新規接続アプリケーション]ボタンをクリックします
- 以下を入力します
- 接続アプリケーション名
- 適当に「AWS Lambda」とでも
- API参照名
- 自動入力されます
- 取引先責任者メール
- とりあえずシステム管理者のアドレスにしておきましょう
- OAuth設定の有効化
- チェックします
- コールバックURL
- 今の所は適当に
- 選択

元記事を表示

【AWS】基礎的なウェブアプリの構築チュートリアルやってみた

#はじめに
[基本的なウェブアプリケーションを構築する](https://aws.amazon.com/jp/getting-started/hands-on/build-web-app-s3-lambda-api-gateway-dynamodb/?trk=gs_card)チュートリアルをやってみた。所要時間も35分ほどで初心者にもとっつきやすい内容だった。一部スクショが貼ってなかったり画面が異なる箇所があったので、備忘録として残したい。

完成系は以下の通り。
First NameとLast Nameを入力し、Call APIを押すと、「Hello from Lambda, First Name Last Name」が表示される。
![スクリーンショット 2020-08-14 19.25.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449478/5df82ce6-f344-4ee5-0d69-8190f3468b1e.png)

#手順
##S3で静的ウェブサイトを作成
※全て東京リージョン

元記事を表示

Goは本当に1980年代の言語みたいなのか。

# はじめに
2020年8月15日現在、[golang.org](https://golang.org/)のトップページに、[The Why of Go](https://www.youtube.com/watch?v=bmZNaUcwBt4)という動画が、Featured Videoとして紹介されています。

Goに初めて触れて、ちょうどなぜこうなっている?と思う機会が多かったので、自分なりにまとめてみようと思います。
注: 要約というよりは、気になる部分をピックアップして解釈して文字にしているものなので、総合的な内容は動画を見てください。

# Goとは1980年代の言語なのか
Goとは1980年代の言語のようだと批判される。糖衣構文、多態、Genericsが使えない、依存性管理が粗末等と批判する人にとってGoは、1980年代以降のプログラミング言語の進化の歴史を無視しているように見えるようだ。

だけど、それらの要素があったら21世紀のプログラミング言語といえるということなのだろうか?
このプレゼンテーションでは、そういう疑問をきっかけにGoのなぜ(The Why of Go)を

元記事を表示

[AWS初心者向け]LambdaでDynamoDBクライアントのインスタンス化コストを検証してみた

# クライアントのインスタンス化コストってどれぐらい?

AWS公式ドキュメントの[Lambda を使用する際のベストプラクティス](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html)には以下のように記述されています。

> AWS のサービスのクライアントは、ハンドラではなく初期化コードでインスタンス化する必要があります。これにより、AWS Lambda コンテナは、コンテナの有効期間中は既存の接続を再利用することができます。

DynamoDBやS3などのクライアントオブジェクトはLambdaの初期化処理でインスタンス化しましょう、ということですね。

私はこのドキュメントから、クライアントのインスタンス化ってどれぐらいの処理時間なのか気になりました。ベストプラクティスに沿って開発していれば要らないトリビアですが、折角検証したので記事にしました。

# 検証概要

この記事ではDynamoDBクライアントを対象に、インスタンス化コストの検証と、実際にありそうなgoodとbadのケースを用意し

元記事を表示

[AWS] Step Functionsで遊んでみる(SAM + Lambda) Part.1(基礎編)

# Step Functionsとは
AWS Step Functionsとは、マイクロサービスコンポーネントをワークフロー化するためのサービスです。

## 状態
Step Functionsでは、状態によって様々な動作を制御できます。
状態には、以下のようなものがあります。

| 状態 | 制御 |
|---|---|
| Task | ステートマシンで何らかの作業をする |
| Choice | 実行の選択肢間で選択する |
| Fail or Succeed | 失敗または成功で実行を停止する |
| Pass | 入力を単純に出力に渡す、または一部の固定データを出力する |
| Wait | 一定時間または指定された時刻/日付まで遅延を提供する |
| Parallel | 実行の並列ブランチを開始する |
| Map | ステップを動的に反復する |

## Taskで利用可能なサービス
Step FunctionsのTaskには、以下のサービスを指定できます。

- Lambda
- Batch
- DynamoDB
- ECS
- Fargate
- SNS
- SQS

元記事を表示

Terraformを使ってAPI Gatewayとlambda(aws-serverless-express)でAPIを構築する

## はじめに
最近サーバーサイドやインフラを勉強中の新米エンジニアです。
勉強のためにnodejsとexpressでWebAPIを構築してローカルでモックとして利用することが結構あるのですが、お盆休みを使ってデプロイ方法を勉強しました。
AWSのAPI GatewayとLambdaを利用します。業務でALBとLambdaの組み合わせは使っているのですが、個人でやるならコスト的にAPI Gatewayかなと思い選定しました。

## 前提
- terraform&aws cliの環境構築済み
- nodejsの環境構築済み

## API Gateway
https://aws.amazon.com/jp/api-gateway/
>フルマネージド型サービスの Amazon API Gateway を利用すれば、開発者は規模にかかわらず簡単に API の作成、公開、保守、モニタリング、保護を行えます。API は、アプリケーションがバックエンドサービスからのデータ、ビジネスロジック、機能にアクセスするための「フロントドア」として機能します。API Gateway を使用すれば、リアルタ

元記事を表示

AWS Step Functionで大きいpayloadを渡す

lambdaからlambdaに渡してゴニョゴニョする必要が出てきて「step function」を初めて使ってみた。
タイトルとはかけ離れているが、学習の記録を兼ねて。

## まずは動画で基礎を学習

兎にも角にも基本的な用語や基本的な設定方法がわからないと話にならないので手っ取り早く動画を見る。
この動画でほぼ7割〜8割程度のやりたいことが出来るようになる。

##何をしようとしているのか

「2つの外部APIにリクエストを投げてそのレスポンスを受け取って加工する」 ということをやりたかった。

```
{
"Comment": "Search Items",
"StartAt": "lookupItems",
"States": {
"lookupItems" :{
"Type": "Parallel",
"Next": "Response-Item",
"Branches": [
{

元記事を表示

AWS Lambdaで外部モジュールを読み込めるようにする方法

- 普通にLambdaをアップロードしただけではAWSにデフォルトでインストールされているライブラリ(AWS SDKとか)以外は使用できないみたい
- ```Cannot find module```と言われてしまいます
- 言語はNode.js
- AWS CDKを使っている

## 方法① LambdaのZipファイルに外部モジュールを含める
- AWSコンソールを使えば、LambdaファイルをZip圧縮したものをアップロードすることができるため、このZip内にnode_moduleディレクトリを含めて外部モジュールごとアップロードしてしまえば良いです
- ただし、AWS CDKを使用してアップロードする場合、この方法は使えません(/_;)

## 方法② 外部モジュールのZipファイルをLambda Layersへ登録する
- node_modulesディレクトリをZip圧縮して、AWSコンソールからLambda Layersにアップロードすれば良いです
- ただし、せっかくLambdaのアップロードをAWS CDKで自動化しているのに、別の手作業が発生してしまうのは悲し

元記事を表示

【AWS Lambda】S3に保存された画像をリサイズして別S3に保存(Ruby利用)

##目標
S3に保存された画像データをLambda関数を利用してリサイズし、別S3に保存する。
プログラミング言語はRubyを利用しています。

##はじめに
あまりLambdaに関して詳しくないので、基本的にはLambdaの基本動作を手順として残すのが目的です。
AWSコンソールからS3にプットした画像をリサイズ(固定サイズ)して別S3に保存するという単純な処理を試してみました。

##前提
事前に2つのS3バケットを作成していること。

##構成図
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/9c6cc306-8ee1-9e03-4594-11f76ff76734.png)

##作業の流れ
| 項番 | タイトル |
|:----:|:-------------|
| 1 | [Lambda関数の作成とアップロード](#1lambda関数の作成とアップロード) |
| 2 | [Lambda環境変数の設定](#2lambda環境変数の設定)|

元記事を表示

[AWS] API Gateway + LambdaをX-Rayでトレースしてみる

# X-Rayとは
分散アプリケーションの分析とデバッグのためのサービスです。
詳細は、こちら。
[AWS X-Ray](https://aws.amazon.com/jp/xray/)

# 前提
今回も、以下構成でサンプルを構築してみようと思います。

- SAM
- Python3.8

SAMをはじめとする基本知識は、こちらを参照願います。

- [[AWS] Serverless Application Model (SAM) の基本まとめ](https://qiita.com/herohit-tool/items/420f4a7b294cfcf56ed7)
- [[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool/items/5b0fe520f6f28fb5b4bc)

# サンプルを作ってみよう
## プロジェクト作成
例によって、SAMでHello Worldベースのプロジェクトを作成して

元記事を表示

【AWS Lambda】Lambdaで「Hello World!」

#はじめに
[「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)の記事で、Lambdaで「Hello World!」を行なってみた。

#手順
##設計図の選択
Lambdaコンソールで「関数の作成」を選択する。
スクリーンショット 2020-08-13 21.05.42.png
「設計図の使用」を選択。
フィルターに「hello-world-python」を入力し、「hello-world-python」を選択して、「設定」ボタンを選択。

スクリーンショット 2020-08-13 21.06.23.png

元記事を表示

息子の可愛さを普及するために、AWS + LINEでBotを作った話

2020年7月、我が家に長男が誕生。
もう天使。かわいい。CMのオファー来るんじゃないのか?(親バカ)

親族・友人に息子を会わせて、可愛さを自慢やりたかったが、このご時世それも叶わず。。。
我が息子の可愛さを普及したい。どうしよう。

そうだ。我が息子の可愛さを普及するLINE Botを作ろう。

# 1. デモ
最初にご紹介。(かわいい)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300430/21dbaea6-a7d8-fc69-5869-b1a5cda7fe70.gif)

# 2. 全体構成
![Design.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300430/f004c5e4-e8ef-b69d-a4a6-67f82dac8bb0.png)

2-1. LINEBotからWebHookでAPIGateway→Lambda実行
2-2. メッセージを解析して、返信用のメッセージと画像を

元記事を表示

DynamodbをLambdaからSQLっぽく操作する

# 説明の前に

pipのモジュールを利用する方法は、下記の記事を参考にさせていただきました。
ありがとうございました。

【Python】AWS Lambdaで外部モジュールを使用する
https://qiita.com/SHASE03/items/16fd31d3698f207b42c9

# 1.準備
LambdaにPipのモジュールを持ってくる必要があるため、ローカルにDQLモジュールをインストールする。

プロジェクトフォルダ内で、下記

```sh
$pip install dql -t ./
```

# 2. ソースコード
ファイル名は`lambda_function.py`

```python
import dql
def lambda_handler(event, context):
engine = dql.Engine()
engine.connect(region="us-west-2")
results = engine.execute("DELETE FROM tablename WHERE tm >= 1420071600 A

元記事を表示

AWSサーバレスでSPARQLエンドポイントを構築(Apache Jena編)

AWSサーバレスでSPARQLエンドポイントの構築を試してみた第2弾です。
第1弾はこちらです。

AWSサーバレス環境でSPARQLエンドポイントを作ろうとしたが上手くいかなかった話
https://qiita.com/uedayou/items/bdf7a802e27fe330044e

前回は利用したライブラリの関係で検索速度に難があり限定した用途であれば使える、という感じでした。
今回はRDFストアとしては実績がある[Apache Jena](https://jena.apache.org/)を使ってみました。

## 環境

- [AWS Lambda](https://aws.amazon.com/jp/lambda/)
- [Amazon API Gateway](https://aws.amazon.com/jp/api-gateway/)

前回と同じくAWS Lambda+API Gatewayという構成です。
Apache Jena は

- [jena-core](https://jena.apache.org/documentation/rdf/index.h

元記事を表示

OTHERカテゴリの最新記事