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

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

Vue.js+APIGateway+LambdaでCORSに詰まったからまとめる

#はじめに 業務でブラウザからサーバーにPOSTリクエストを投げ、 処理した結果をブラウザ上に表示するなどの処理を実装 しようとした時にCORSというものに長い時間 悩まされたので自分のためにもまとめておこうと思います。 自分なりの解釈なので間違っていたら指摘をお願いします。 またこうしたら分かりやすいよ〜などの意見もありましたら コメントしていただけると嬉しいです。 と言いつつQiita初投稿なのでお手柔らかにお願いします。 #CORSとは CORSとはCross Origin Resource Sharingの略で、 XMLhttpRequestによって、 異なるオリジンからのリソース取得に制限をかけることにより、 リソースを提供するサーバーのセキュリティを向上するものです。 この説明だけでもわからないことが結構出てきますよね。。。 そこでCORSを知る上で必要なキーワードをまとめました。 #XMLhttpReuestとは? Javascriptによりサーバーからデータを取得することで、 ページ全体を更新しなくても、ページの部分を更新できるもの。 Ajaxプログラミングにより
元記事を表示

Slack API×AWS Lambda×Node.jsで作るチャットボット開発

# Slack API×AWS Lambda×Node.jsで作るチャットボット開発 Slack APIをLambdaと組み合わせると、様々なことができます。 「スマホからも操作できるSlackで、Lambda関数を実行できる」というだけで、その応用範囲は多岐にわたります。 今回、SlackとLambdaを使ってチャットボットのサンプルを作る機会があったため、そこで得た知識をまとめ、手順化してみました。 この内容を理解することで、以下のようなことができます。 – Slackのワークスペースにボットを配置する。 – ボットにDMを送ると、AWSのLambda関数を実行するように設定する。 – Lambda関数の処理で、Slackのワークスペースにメッセージを投稿する。 細かく手順を作ったので、初心者も手を付けやすいと思います。 ぜひここで基礎部分を学んでから、自分のやりたいことに応じて調べてみてください。 第9節までありますが、基礎の部分は4節までですし、アカウント作成などが無ければ1章あたり20分くらいでできると思います。 # 目次 – [概要](#概要) – [シス
元記事を表示

Node.js の Lambda 関数を ローカルでテストする (その2)

AWS のコンソールから、ダウンロードして解凍した index.js を実行する方法です。 ![download_package.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/76c27478-5268-866a-d4a9-87b25557fa1f.png) フォルダー構造 “`text $ tree example01/ example01/ ├── index.js └── test_local.js “` “`js:index.js exports.handler = async (event) => { // TODO implement console.error(“***** start example01 PM 18:49 ***”) var rvalue = {} rvalue[‘key1’] = parseInt(event[‘key1’],10) rvalue[‘key2’] = parseInt(event[‘k
元記事を表示

Lambda 関数から Lambda 関数を呼び出す (Node.js)

次のページを参考にしました。 [AWS lambdaでハマったこと (lambdaからlambdaを呼び出す)](https://took.jp/post-1037/) メインプログラム “`js:callSample/index.js const AWS = require(‘aws-sdk’); const lambda = new AWS.Lambda(); exports.handler = function(event, context) { console.error(“*** start callSample PM 18:57 ***”) const event_aa = { “key1”: 118, “key2”: 216, “key3”: 314 } const payload = JSON.stringify(event_aa) const params = { FunctionName: ‘example01’, InvocationType: ‘RequestResponse’,
元記事を表示

AWS SAMを今さらながら使ってみる

CloudFormationはそれなりに書けるし、Lambda関数も書いたり動かしたり調査したり色々やってきたが、本職のデベロッパーでない悲しさか、AWS SAMは実は一度も触ったことがない(触る必要に迫られたことがない)。 苦手なままでは先々苦労しそうなので、このあたりで一度ウォークスルーしてみることにする。 ### やりたいこと – AWS SAMをインストールする。 – 試し打ちしながら、できることを自分なりに整理してみる。 ### インストール まずはインストール。 詳しくは[公式](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.html)を参照。 ローカル開発したい場合はDockerも必要らしい。 Dockerはもう入れてあるので、やることは以下。 “` % brew tap aws/tap % brew install aws-sam-cli “` 入った。 “` % sam
元記事を表示

Serverless FrameworkでBasic認証を実装する

# はじめに Serverless Frameworkを使用していく中で、検証環境には 簡易な認証(例えば基本認証など)を設けたい場合がありました。 Lambdaを用いるため、Apacheなどのミドルウェアレイヤーで基本認証が設定できないとすればどこで設定するのが良いか検討した。 今回はlambdaでFlaskのようなPythonフレームワーク(WSGIベース)を動かす場合を考える。 # Basic認証の実装方式について Lambdaを使用する場合、「API Gateway+Lambda」構成にするか、「ALB+Lambda」構成のいずれかが考えられる。 それぞれどこで認証を設定できるか、どこが良いのかという結論として以下のようになると考えた。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627775/d8587e40-eff5-8d37-c9d2-a3ed42fbd271.png) ###ALBを経由する場合について(評価△) 現在はWSGIベースのフレームワークはALB経
元記事を表示

Node.js の Lambda 関数を ローカルでテストする

Node.js の AWS Lambda 関数をローカルでテストする方法です。 テストで使う Lambda 関数 “`js:iot_aa.js // ————————————————————— // iot_aa.js // // Dec/08/2017 // // ————————————————————— ‘use strict’ // ————————————————————— console.log(‘Loading function’) exports.iot_aa_handler = (event, context, callback) => { //console.log(‘Received event:’, JSON.stringify(event, null, 2)) console.log
元記事を表示

API Gateway with CloudFormation

AWS CloudFormationを用いて、API GatewayからLambdaを同期・非同期で呼び出します。 CloudFormationテンプレートと、Lambdaソースは以下のような構成にしました。構成を変える場合、LambdaのCodeUriでディレクトリを、Handlerでファイル名を変更できます。 “`shell | |–apigateway.yml |–Makefile #なくても構わないです。コマンドを毎回打つのが面倒なので作っただけです。 |–Lambda |–test test.py “` “`makefile:Makefile .PHONY: deploy deploy: $(call blue , “Lambda package & deploy”) @aws cloudformation package –template-file apigateway.yml –s3-bucket ご自身のS3バケット名 –output-template-file packaged-templat
元記事を表示

Amazon SESの通知結果をAmazon SNS、Lambdaを使用してDynamoDBに保存する

AmazonSESの送信結果を取得するために、今回はAmazonSNSをトリガーとして、LambdaからDyanamoDBに保存する仕組みを作っていきたいと思います。

この方法はAWSのサポートでもありましたので、今回はそれを試してみます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-sns-ses-dynamodb/

前提として、AmazonSE

元記事を表示

AWS Lambdaの利点、欠点

#Lambdaとは ユーザーはコードだけ書いてくれれば、サーバー管理はAWS側でしますよってサービス。データの変更に応じてコードを実行したり、HTTPリクエストに応答してコードを実行したりしてくれる。 #Lambdaの利点 ####サーバー管理が不要 Lambdaとはでも書いた通り、サーバー管理をAWS側でしてくれる。 ####継続的スケーリング 自動的にアプリケーションをスケーリングしてくれる。 重たい処理には多くのリソースを割り当てて、軽い処理には少しだけリソースを与える。 ####ミリ秒単位の課金 コードが実行される100 ms(= 0.1秒)ごとに課金される。 コードが実行されてない時は課金されないから料金は安く済む。 ####安定したパフォーマンス それぞれの処理に適切なメモリサイズを割り当てるからコード実行時間を最適化できる。 2桁のミリ秒以内に応答するようにハイパー対応することも可能。 #Lambdaの欠点 ####サーバー管理ができない メリットでもあったけど、自分で管理したい時はそのままデメリットになる。 #最後に AWSについて学習中のメモ代わりに残して
元記事を表示

Cloud9にLambdaで動くFlaskアプリを構築する

# はじめに 運用レスのインフラ基盤でアプリ動かしたいと考え、 Flask(pythonのフレームワーク)を使った簡単なアプリをLambdaで動かしてみた。 ※ すでにpython3.6がインストールされている前提(Cloud9は初期から入っている) ※ すでにNode.jsがインストールされており、npmコマンドが打てる前提(Cloud9は初期から入っている) # 所要時間 本手順は30分ほどで完了する想定です。(60分あれば十分なハズ) # モジュールのインストール ここではCloud9でserverless frameworkを用いてLambdaにFlaskをデプロイする方法を載せます。 – npmがインストールされていることを確認 “` $ npm –version “` – npmのバージョンアップ “` $ npm update -g “` – serverless frameworkのインストール “` $ npm install -g serverless “` – labmdaでflaskを使用するためのモジュールをインストール “
元記事を表示

Vue.js、AWS Amplifyおよびboto3でサンプルアプリを作ってみる(第三回:axiosでAPIコール編)

第二回で、Amplify CLIを使ってバックエンドリソースを作成し、CICDを回してVueアプリを外部公開するところまで辿り着いた。 今回は、さらにAPIとLambda関数を用意し、Vue.jsからaxiosで呼び出すところまでをトライ。これができれば、「Vue.jsでフロントエンドを作ってAWSサービスを叩いてみる」という当初の目的を達成できたことになる。 前回の内容はこちら。 [Vue.js、AWS Amplifyおよびboto3でサンプルアプリを作ってみる(第二回:Amplifyとバックエンドリソース編)](https://qiita.com/itsuki3/items/21925a1afb256dd8b935) ## (今回)やりたいこと – axiosをセットアップする – APIとLambda関数を作る – Vue.jsからaxios経由でAPIを呼び出す ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/3317fc2b-185b-ab87-1a5f-31
元記事を表示

【AWS】LambdaとSNSでスマホにSMSを送る

## 概要 – 電話番号でメッセージを送るSMSを使いたいなと思って調べてみたらAmazonSNSで実現できると分かったので試してみました – API Gateway – Lambda – SNS を連携させてAPI化させてみました – 当然ですが指定した電話番号に本当にSMSを送れてしまうので、**悪用しない/されないようにご注意ください** – ちなみに日本の場合は一通辺り$0.07451のようです – https://aws.amazon.com/jp/sns/sms-pricing/ ## 構成 – 今回作る構成です スクリーンショット 2020-06-03 0.02.25.png ## 雛形生成 – 今回はServerlessFrameworkを使います – Lambdaのコードだけ見
元記事を表示

AWSのロードバランサーにLambdaを使ってWEBサーバーを自動追加

#目的:アクセス集中時のみWEBサーバーを追加・負荷分散しコストダウン  AWSのロードバランサー(ELB)を使っているサイトも多いかと思われます。ELBにはオートスケール機能があり、負荷率の上昇などをトリガーとしてスケールアウト(WEBサーバーの追加)を設定することができます。  しかし、Auto Scalingを利用して負荷が上がってからWEBサーバーを立ち上げて追加したのでは時間がかかり、手遅れになる可能性が高いです。障害が出る前にサーバーを増設したいと思うでしょう。  私の会社が開発しているソーシャルゲームでも、イベント開催時や広告プロモーション時には、普段の十数倍のアクセスになります。こういう負荷上昇が見込まれる場合は、あらかじめEC2インスタンスを立ち上げてELBに追加しておくことが有効でしょう。  Lambdaのスケジュール機能を使い、アクセスの見込まれる必要な時刻にEC2インスタンス(WEBサーバー)をELBに自動的に追加し、ある程度の時間が過ぎたらELBから切り離す。これだけでは負荷分散はできてもコスト削減はできません。コスト削減のためには、EC2インスタンスを
元記事を表示

AWS Lambda関数の通信先を制御してみる。

(記事を書いた2019/12/21に公開するのを忘れ半年遅れで公開となりました) ### はじめに 皆さんは AWS Lambda でどのような処理を実装されていますか? AWS サービスの API (例えば、 Systems Manager の Parameter Store の API や Amazon EC2 の API )、外部のサービスにアクセスさせたりしていますか? 企業向けシステムを構築する際には、「通信先」について情報漏洩リスクにもつながるため、関心事として高いです。 当記事では、AWS Lambda 関数を利用してアプリケーションを実装する際、どのように通信先を制御を**「強制するか」**紹介していきたいと思います。 ### サマリ – デフォルトの Lambda 関数構成(VPC内リソースにアクセスしない)の場合、Lambda 関数に Security Group も NACL も設定できず、Lambda 関数からの通信を Lambda 関数の外で制御することができない。 – VPC 内リソースにアクセス可能なLambda関数として構成することで、 VPC
元記事を表示

LambdaからEC2を起動しようとしてハマった話

AWS公式ページにこちらの手順に従って、LambdaからEC2を停止&起動させようとしたところ、停止はできるが起動はなぜかうまくいかない。。。 [Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/) 色々試したり、サポートに問い合わせしたりした結果、原因が判明。 KMS関連の権限が不足していたためでした。 起動しようとしていたEC2にアタッチされているEBSがKMSで暗号化されていたため、kms:CreateGrant 権限が必要だったようです。。。
元記事を表示

lambdaでAPI Gateway経由のquerystringを取得する(Python)

# はじめに AWS Lambdaを初めて触ってみました。 QueryStringを取得して、レスポンスを返すことがあっという間にできたのでメモです。 # 環境 最初は使っているWindowsにすでにインストールされているバージョンに合わせるために`Python3.6`を使用しました。 ですが、Lambdaだとローカルでテストが不要なのでバージョンを合わせる必要はありませんでした。 AWS上で現時点でサポートされる最新のバージョンを使っていいと思います。 (処理がシンプルすぎるので当たり前ですが、`Python 3.8`で作り直してもうまく動きました。) # まとめ `event[‘queryStringParameters’][‘name’]` でできます。 # 構築 ## AWS アカウント取得 なんと、ほぼ触ったことがなかったのでアカウント作成からやりました。 ## 課金時の通知 課金されたら知りたいので、予算を登録して、$1で通知が来るように設定しました。 課金されてないので、通知が来るようになっているのかどうかよくわかりません。 ## Lambda の作成 サービス
元記事を表示

Lambda@Edgeで追加したいhttpヘッダをapacheの設定から持ってくる

# httpd.conf → Lambda@Edge 私のサイト [devel.keys.jp](https://devel.keys.jp) は、昼間は EC2 上の Apache httpd で動かしているんですが、夜中は S3 + CloudFront でホストするようにしています1[^free-tier]。 [^free-tier]: 無料枠が月750時間までだと24時間動かしていると他のインスタンスを立てにくいので、1〜7時までインスタンスを落として無料枠をセーブしているのです というときに、S3 でも httpd と同じヘッダを加えたいなーと思って作りました。 EC2 の httpd の設定は次のようなものです: “`apache:httpd.conf Header set X-XSS-Protection “1; mode=block” Header set X-Content-Type-Options nosniff Header append X-Frame-Options SAMEORIGIN Header set Str
元記事を表示

Ruby+LambdaでAWS SDKを使おうとしたら `sam local` がめちゃくちゃ遅くなったんだけど

# 起こった現象 LambdaをRuby実装で使っていました。AWS SAM CLIを利用して開発を行っていました。開発自体は何事もなくすすんでいたのですが、機能追加のためにAWS SDKを使うように変更したところ `sam local` がすごく遅くなったのでした。こんな簡単なサンプルアプリでここまで遅くなるのはおかしいでしょ…と調べてみました。 サンプルプロジェクトは[こちら](https://github.com/suruseas/lamba-gemfile-test) ※deployして試したあとはstack及びcloudwatchのロググループを忘れずに削除してください! # さっさと結論だけ Lambdaのランタイムには、各環境に合わせてAWS SDKがインストールされているのでLambdaのデプロイパッケージには含めなくてもよいです。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html 特にRubyであれば **Gemfileへの「gem ‘aws-sdk’, ‘~> 3’
元記事を表示

ALB + CognitoでGoogleアカウント認証をかける

この記事はクラスメソッドさんの記事『[Amazon CognitoユーザープールLambdaトリガーでALB認証のメールアドレスを制限する | Developers.IO](https://dev.classmethod.jp/articles/validate-email-on-alb-authentication/)]』の手順をちょっと(うまくいかないところを試行錯誤しつつ)詳しく書いたものです。 # 何ができるか **認証機能など何もない**WebアプリがEC2で動いているとします。このEC2を * ALBの下にぶら下げる * Cognitoの仕組みを使い、**特定のGoogleアカウントでログインしているときだけ**アクセスできるようにする という仕組みをサーバーレス(AWS ALB + Amazon Cognito + Google Cloud Platform + AWS Lambda)で構築します。 # 前置き:ALB + Cognitoの何が混乱を招くか Amazon Cognitoは素晴らしいサービスなのですが、「ユーザープール」と「IDプール」があり、初歩的
元記事を表示

OTHERカテゴリの最新記事