Lambda関連のことを調べてみた2019年11月30日

Lambda関連のことを調べてみた2019年11月30日
目次

Lambda+APIGateway設定で「CORS の有効化」をオンにしたのにCORSエラーになる

# 「CORS の有効化」をオンにしたのに
## ハマりポイント
APIGateway設定で「CORS の有効化」をオンにしているのに,
> Access to XMLHttpRequest at ‘https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/xxx/xxxx’ from origin ‘http://xxxxx’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

とエラーが返ってくる.
## 解決策
Lambdaのreturnのヘッダーに以下のように,Access-Contraolについて書かなきゃダメだった.

“`json
return {
‘isBase64Encoded’: False,
“headers”: {
“Access-Control-Allow-Origin”

元記事を表示

Flutterで作ったアプリから入力した電話番号あてにAWS SNSからSMSの送信をする方法(ざっくり)

# Flutterで作ったアプリから入力した電話番号あてにAWS SNSからSMSの送信をする方法

## やりたいこと

入力された電話番号あてにPINを送信したい!

## 使うもの

“`
AWS
| DynamoDB
| API Gateway
| Lambda
| L Node.js 12x
L SNS
Flutter
L http 0.12.0+2
“`

## DynamoDBの準備

PINコード保存用のテーブルを作成します。

“`json
“pin”: {
“user_id”:””,
“pin”:””,
“ttl”:”” //TTL設定
}
“`

## Lambdaの準備

SMSの送信は “`publish()“`を使うことで簡単に送ることができます。

“`js
const AWS = require(‘aws-sdk’);
const sns = new AWS.SNS();
const documentClient = new AWS.DynamoDB.DocumentClient();

exports.handl

元記事を表示

AWS Lambda のタイムアウト発生時に別の Lambda 関数を起動し、元の Lambda 関数の処理内容を取得する

#はじめに
こんにちは。はじめまして。
最近、AWS で本番稼働する時のことをかんがえるようになりました。
Lambda の負荷テストをしていると、タイムアウトが発生して「コマッタ…」となった時のことを書いてみます。

#Lambda タイムアウト 15分問題

Lambda ってタイムアウト時間設定しなくちゃいけなくて、最大 15分しか設定できないんですよね。
(参考)
https://aws.amazon.com/jp/blogs/news/aws-lambda-timeout-15min/

で、15分以上処理しちゃうと、CloudWatch にタイムアウトのログを出すだけ… と。

まあ、Lambda に重たい処理をさせるな!ということでしょうけど、
もう作ってしまったし… なんとかできないものか…
せめて、ユーザに処理できなかったことを伝えられないものか…

#対策

ちょっと調べてみると、色々と対策はある模様。

– [タイムアウトでエラーとなってしまったLambdaのリカバリを行うLambdaを作成してみました](https://dev.classmethod.jp/se

元記事を表示

Github ActionsでLambdaにデプロイする

## TL;DR
以下の要件の実装備忘録です。
– GitHubでreleaseが作成された時、Lambdaにコードを反映させバージョンを更新する

## サンプルディレクトリ構成
“`
some-lambda-function-repo
├── .github
│   └── workflows
│   └── lambda-cd.yml
├── README.md
├── bootstrap
└── handler.sh
“`

### GitHubのSecretsに以下を設定
– `AWS_ACCESS_KEY_ID`
– `AWS_SECRET_ACCESS_KEY`

必要なPolicyに関しては割愛します

## Github Actions

“`lambda-cd.yml
name: Lambda Continuous Delivery

on:
push:
tags:
– ‘*’
jobs:
lambda-cd:
runs-on: ubuntu-latest
steps:
– uses:

元記事を表示

Slackで誰かの承認をもらえたらRDSにクエリ実行して結果を返す仕組み

## 概要
– SlashコマンドでAWSのアカウントがなくてもRDSにクエリ実行する仕組みを作りました。
– 同じチャンネルで実行者以外の誰かの承認をもらえないと実行できません。
– 実行結果をslackにそのままPostするのではなく、s3にcsv形式で保存し、署名付きURL(有効期限15分)をslackにPostします。
– 特定のチャンネルからのslashコマンドしか受け付けないので、悪意のある第3者がこっそりクエリ実行して結果を閲覧することはできません。

コードは以下に公開しています。
https://github.com/m22r/sequelcat

## コマンド実行時の流れ

### コマンド実行時
slash_command.png
クエリを流したい人が特定のチャンネルでslashコマンドを入

元記事を表示

[awscli] lambdaのコード(zip)をダウンロードする

“`
func=your-lambda-function-name
url=$(aws lambda get-function –function-name ${func} | jq -r ‘.Code.Location’)
curl -o lambda.zip $url
“`

元記事を表示

AWS LambdaのDestinationsを試してみる

AWSから割とすごい機能が発表されました。

Introducing AWS Lambda Destinations
https://aws.amazon.com/jp/blogs/compute/introducing-aws-lambda-destinations/

![スクリーンショット 2019-11-27 6.51.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102769/8dcc8bb4-f376-17ae-1ccf-b64739c3289b.png)

Lambdaの実行結果に従って次のアクション(AWSサービス)を指定できる、というものです。
成功/失敗の条件で流れを制御したい場合には、Step Functionsを使う必要もなく、Lambdaだけで完結することができるようになりました。

早速試してみます。

# 呼び出し元のLambdaを適当に定義

こんな感じのPythonを書きます。(Python 3.7を利用)

“`python
import json
impor

元記事を表示

やねうら王を AWS Lambda で動かす

[やねうら王](https://github.com/yaneurao/YaneuraOu) は 2019 年現在最も強い将棋 AI の一つです。AWS Lambda 上で実行できれば、API Gateway と連携したりして夢が広がります。
やねうら王 V4.88 を AWS Lambda 向けにビルドしてみよう。

# 実行環境

AWS Lambda の実行環境 OS は Amazon Linux 2 なので、Amazon Linux 2 上でビルドすれば十分です。
SIMD 拡張命令は 2017 年時点で SSE 4.2 が動くらしい。

– [AWS Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)
– [AWS LambdaのCPUを見てみる](https://qiita.com/kurimoto/items/eca091cccc54d7c07634)

# ビルド

[Amazon Linux の Docker イメージ](https://hub.d

元記事を表示

Serverless Frameworkでevent scheduleをステージ毎に切り替える

## 環境

* Serverless Framework

## やりたいこと

CloudWatch Eventの定期実行をステージングでは手動実行、本番では定期実行させたいということがあったので、備忘録として残しておきます。

## serverless.yml

至って簡単です。

“`yaml

service: hoge

provider:
name: aws
runtime: nodejs8.10
stage: ${opt:stage, self:custom.defaultStage}
region: ap-northeast-1

custom:
defaultStage: dev
schedule_active:
dev: “false”
prod: “true”
default: “false”

functions:
hello:
handler: handler.hello
events:
– schedule:
rate: rate(30 minutes)

元記事を表示

Node.jsでGlobal Secondary Indexを使用して特定条件のレコードを抽出する

## 環境

* Nodejs
* AWS Lambda
* AWS DynamoDB

## はじめに

DynamoDBではパーティションキーもしくはレンジキーを使用してしか基本的には抽出が出来ないのですが、任意のキーを元に抽出を行いたいという時は、Global Secondary Index(以下GSI)を使用する事で任意のキーでレコードを抽出することが出来ます。

## 注意点

以下の点に気をつける必要があります。
* GSIは1テーブルにつき20件までしか作成出来ない
* GSIのキーに指定出来るカラムのデータ型は文字列、数値、バイナリのいずれかである必要があります
* Serverless Frameworkではまだそこまで自由なGSIは作成出来ないようなので、DynamoDBコンソールからGSIを作成する必要がある(ハッシュキー or レンジキー以外でのGSIの作成がうまくいかなかった)

例えばboolean型のカラムをキーにGSIは作成出来ません(私がやろうとしていました…)

参考情報:
* [DynamoDB での制限](https://docs.aws.a

元記事を表示

aws-sdkでAPIGatewayとLambdaの統合をセットアップする

# 概要

APIGatewayからLambdaを呼び出せるようにするまでの設定を`aws-sdk`を使って自動化したかったのでコードを書いてみました。
特に CORS の有効化の部分はなかなか資料がなく苦労しました。。。

TypeScriptで書いているので型定義不要な方は適時読み替えてください。
上から順につなげれば動きます。

# 実装コード

## REST API の作成

“`typescript
import AWS from “aws-sdk”;

AWS.config.update({
region: “ap-northeast-1”,
accessKeyId: “XXXXXXXXXXXXXXXXXXX”,
secretAccessKey: “XXXXXXXXXXXXXXXXXXXXXX”,
});

// APIGateway
const apiGateway = new AWS.APIGateway();

/**
* REST APIを作成する
* @param apiName ステージ名
* @return REST APIのID
*/

元記事を表示

AWS APIGateway + Lambda プロキシ統合 の利用でCORS設定にはまった話

#要約
AWSのAPIGatewayを利用してAPIを作ったが、CORSの設定がどうも上手くいかない、、、
という所にはまった話です。
(昔作ったAPIは動くのに、、、なんで!?( ゚д゚)ハッ! )
 

結論から言うと、
**「Lambda プロキシ統合」利用の場合、
CORSに関するレスポンスヘッダの設定は各自のプラグラム上でやれよ!:smirk:
**
という事です。
 
 
GUI上で、CORSの有効化をしても、レスポンスヘッダの「Access-Control-Allow-Origin」は反映されません。
(統合リクエストのタイプがLambdaの場合に有効になります。)
CORSの有効化ボタンが押せちゃうので混乱しちゃいますよね;;

AWS公式にも記載があります。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html
 

#1.過去のAPIGateway
AWS APIGatewayは以前からあるサ

元記事を表示

Lambda + S3 + Transcribe で、日本語で自動音声吹き替え機能を作ろう!

こんにちは!
BeatFit エンジニアの飯塚です。
半年ぶりの投稿となります。

エンジニアになって半年たち、今は、フロントエンドとバックエンドを主に担当しております。
が、そろそろ社内のインフラを Heroku から AWS へ完全移管する話が出たため、今年の6月頃から、AWSの勉強を開始しました。
先日、AWS ソリューションアーキテクトの資格をとりました。(1回落ちました。。)
が、実務では、まだまだ全然使いこなせていないので、これからも頑張っていきたいところです。

今回、職場のコンテンツチーム(社長)より、動画の音声起こしができたら嬉しいと言う声が上がりました。
ちょうど、AWS Transcribe が 11/21に[日本語対応](https://tech.nikkeibp.co.jp/atcl/nxt/news/18/06528/?i_cid=nbpnxt_ranking)されたので、この機会に触ってみたいと思います。

S3 アップロード → Lambda → Transcribe と言う流れで、実装します!
Lambda は全然詳しくないため、間違いや不適切な

元記事を表示

AWS LambdaでECSのRunTaskを実行する

## はじめに
ECSを用いたDockerでRailsのデータベース更新する場合、どうやってデータベース更新をすればいいのか悩むことになった。

色々と調べた結果、ECSのRunTaskでデータベース更新を行う企業が多いと判明。
RunTaskをAWS Lambdaで実現するためにはどうすれば良いのかを纏める。

## ECS RunTaskとは
ECSでDockerコンテナを動作させている。
これはDockerfileで指定したコマンドが動作している。

Dockerコンテナに対して単発で実行できるのが特徴!

## 構成
– AWS Lambda(Python 3.8)
– Elastic Container Service (ECS)

## 前提
ECSですでにDockerやEC2が立ち上がっている前提とする。

### ECS情報
– クラスター名: `cluster-name`
– タスク定義: `task-definition-family`

## RunTaskでbundle exec rails routesを実行する

“`python
import j

元記事を表示

LambdaからBigQueryを実行する

# はじめに
LambdaからBigQueryのクエリを発行します。その調査記録です。
基本はAWSを使用していますが、定期的にGCPのBigQueryを参照する機会がありました。
簡単にLambdaで実行すると便利かと思いました。

# 環境の概要
LambdaのPythonから、GCPのSDKを使用します。
GCPのSDKはレイヤーに保持します。
AWS側に、GCPの認証を設定する必要があります。

スクリーンショット 2019-11-16 17.55.25.png

SDKと言っているのは、Pythonのクライアントライブラリーのことです。
https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.

元記事を表示

Greengrass(v1.9.4)上でNode.js(v8.10)のLambdaのデプロイができない問題の解決法

※追記
Greengrass Nodejs SDKのGitHubに書いてますね。。
https://github.com/aws/aws-greengrass-core-sdk-js

> Rename the file to nodejs8.10
> Make sure the file is not a symlink.

シンボリックリンクもだめらしいです。

GreengrassにNode.js(v8.10)のLambdaをデプロイすると、エラーになります。

“`
Deployment xxxxx of type NewDeployment for group xxxxx failed error: worker with xxxxx failed to initialize
“`

ログを確認すると、`nodejs8.10`というバイナリがないよと言っているようです。

“`console:/greengrass/ggc/var/log/system/runtime.log
[ERROR]-runtime execution error: unable to

元記事を表示

【AWS】CloudFormation::Macroを使って多数のIPを接続許可する

初めての記事投稿です。
よろしくお願いします。

# 使うもの

– CloudFormation
– Lambda(Python3)

めんどくさいからソースと作り方だけくれって人向けにgithubに置いておきます。
コードは記事に書いてあるのと同じです。
https://github.com/nekotouma0114/CloudFormationMacroDemo

# 事の始まり

僕「テスト環境の接続許可するIPって何があります?
お客さん「xxxとyyyとzzz….(数十個羅列※)お願いね!」
僕「あ、はい」

※IPはばらばらでCIDRでまとめれないような状態

AWSのユーザガイド([AWS::EC2::SecurityGroup Ingres](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule-1.html))を見る限りまとめてIPは指定できず、
CloudFormationにはループ構造が見当

元記事を表示

LambdaからSystems Managerを実行してEC2のバックアップを取得する

## はじめに
EC2の定期バックアップを取得をするのに良い方法はないかと思っていたところ、SSMでスナップショットが取得できることを知ったので、Lambdaから実行してみました。
サーバーの作成は省略しますが、Systems Managerを使用するので、SSMエージェントがデフォルトインストールされているWindows Server 2019を使用しています。

参考
[Windows インスタンスで SSM エージェント をインストールし設定する](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-ssm-win.html)

# やったこと
– Windowsサーバーの作成
– Systems Managerからバックアップ取得
– LambdaからSystems Manager ドキュメントの実行

# Windowsサーバーの作成とIAMロール設定
バックアップを取得するため、EC2を1台作成します。
![image.png](https://qiita-im

元記事を表示

Serverless Framework で 自身のAPIのURLを取得したい

### はじめに

Serverless FrameworkでAPI Gatewayを利用した際に
死活監視やなんらかの目的で
内部的にAPIを呼び出したい場合があるかと思います。

ただ、デプロイされたあとにURLを確認し
Lambdaの環境変数に・・・などはちょっと面倒くさいので
serverless.yml内だけで設定できないかやってみました。

### customにてURLを生成

本題部分です、API Gatewayで生成されるURLを文字連結します。
これでAPI GatewayのURLが生成できます。

“` yml
custom:
region: ap-northeast-1
stage: ${opt:stage,”default”}
my_url:
{
“Fn::Join”:
[
“”,
[
“https://”,
{ “Ref”: “ApiGatewayRestApi” },
“.execute-api.

元記事を表示

JenkinsからAWS Lambdaをデプロイする

# Jenkinsとは
初心者ですが、私の解釈としては自由度の高いCI/CDツールという位置付けです。
実行したい内容をJobという形で登録しておくことで自動で実行してくれます。
今回初めて触ってみたので、忘れないうちにメモしておきます。

#手順 
– コンソールから「新規ジョブ作成」を選択します。

![スクリーンショット 2019-11-22 11.41.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/98c74577-8b2c-b2ab-4737-49fcc347c22b.png)

– そのジョブの中に入り「新規アイテム作成」を選択。
基本的に一番上のフリースタイルでいいと思います。
![スクリーンショット 2019-11-22 11.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/3afb99f4-5792-f3e4-6973-4354258ac4e4.png)

元記事を表示

OTHERカテゴリの最新記事