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

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

AWS LambdaでTwitterScraperを使おうとして動かなかったで調べてみた

アイカツ!についてのツイートを毎日収集したいという欲があり、手動でやるのも面倒なのでAWS Lambda上で毎日出力するように自動化を実施したいと思っている。 まずはAWS Lambda上で、Lambda LayersにTwitterScraperのライブラリ(1.4.0)を登録して、ざっくり動作検証レベルで以下のようなコードを実装してテスト実行してみた。 “`python from twitterscraper import query_tweets import datetime as dt def lambda_handler(event, context): begin_date = dt.date(2020,6,5) end_date = dt.date(2020,6,6) pool_size = (end_date – begin_date).days tweets = query_tweets(“アイカツ”, begindate = begin_date, enddate = end_date, poolsize
元記事を表示

セキュリティグループのマイIPを自動更新してみた(ただしバッチファイルで)

セキュリティグループのインバウンドルールのソースに「マイIP」を指定できることは有名ですが、このマイIPってグローバルIPが変わるたびに手動で設定しなおさないといけないんですよね。これの更新を自動化できないものか、と考えていました。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51871/b99f10d4-9e3c-64a9-37d5-066acac9c9f6.png) ググると`http://checkip.amazonaws.com/`にGETリクエストを投げるというのが定石のようでしたが、なんかこのURLで得られるIPアドレスと、マネージメントコンソール上で表示されるマイIPが異なっており、`checkip.amazonaws.com`は使えませんでした。実際、`checkip.amazonaws.com`から取得したIPをセキュリティグループのインバウンドルールに追加してみましたが接続が弾かれましたよ。 そこで、API Gateway経由でLambda関数にGETリクエス
元記事を表示

EC2インスタンスの自動停止をLambda+CloudWatch Eventsで実現する

ググれば似たようなコードはあると思いますが、忘備録として残しています。 AWS Instance Schedulerを利用したり、タグに時間を設定しLambdaの定期実行でその時間が来れば停止するといったコードはよく見かけたのですが、コストを最大に下げるためにLambda実行回数も減らしたかったので、時間固定を前提としました。 # やりたいこと EC2インスタンスのタグで下記のように設定したインスタンスの自動停止を平日21時に実行したい。 – Name: `auto-stop` – Value: `true` # 手順 ## IAMロール・ポリシーの作成 こういうポリシーを持つIAMロールを作っておく “`json { “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Action”: [ “ec2:DescribeInstances”, “ec2:Stop
元記事を表示

AWSラムダを全く理解していない人間が練習

###あくまで備忘録です #やりたいことだけ明確に ###まず、目標 ※この部分を書いている時点で一切の作業をしていません AWSのラムダを使うとしてお金がかかるので、ローカル(Windows環境)にダウンロードできるものだけでラムダを作りたい。 htmlで書いた(ここの言語は未定)Webサイトにアクセスし、Pythonの書かれたラムダに投げて帰ってきたデータでhtmlを更新する、なんて形を取れればいいと思っている。 ~~静的なWebサイトを作るのであればS3でもいいとか言ってはいけない~~ #何をダウンロードしよう ググったところ[[参考:A]](https://dev.classmethod.jp/articles/invoke-aws-lambda-python-locally/)のサイトを見つけたので内容を確認。**python-lambda-local**というものを使えばいいらしいので早速インストール cmdからpipでダウンロード~~pipがナニか変わらなかった無知な自分は[こちら](https://techacademy.jp/magazine/21161)~~
元記事を表示

AWS AppSync Nuxtjs

# 概要 AppSyncを使ってみたかったので、簡単なツイートシステムを作って見ました。 今回はAppSyncの仕組みやLambdaとの連携を理解したかったので一から構築しています。 ## 構成 ![AppSync構成 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/97e2d417-054d-e2ec-693a-23562d9b87f5.jpeg) フロントにNuxtjsを置いてappsyncを経由し、LambdaでDynamoDBにデータを保存ようにしてみました。 AppSyncのウィザードを使うと全部自動で作ってくれます。 ## AppSyncの設定 1. AWSのAppSyncのページで「APIを作成」をクリック スクリーンショット 2020-06-03 19.53.04.pngNode.js: Lambda で MariaDB のデータを削除 (Delete)
フォルダー構造 “`text $ tree -a . ├── .env ├── function_update.sh ├── index.js └── test_local.js “` “`js:maria_delete/index.js // ————————————————————— // maria_delete/index.js // // Jun/07/2020 // // ————————————————————— var mysql = require(‘mysql2/promise’) // ————————————————————— async function main(id_in) { console.error(“id_in = ” + id_in) const host = `${proc
元記事を表示

Node.js: Lambda で MariaDB のデータを更新 (Update)

フォルダー構造 “`text $ tree -a . ├── .env ├── function_update.sh ├── index.js └── test_local.js “` “`js:maria_update/index.js #! /usr/bin/node // ————————————————————— // maria_update/index.js // // Jun/07/2020 // // ————————————————————— var mysql = require(‘mysql2/promise’) // ————————————————————— function get_current_date_proc () { const today = new Date () var
元記事を表示

Node.js: Lambda で MariaDB のデータを読む (Read)

フォルダー構造 “`text $ tree -a . ├── .env ├── function_update.sh ├── index.js └── test_local.js “` “`js:maria_read/index.js // ————————————————————— // maria_read/index.js // // Jun/08/2020 // // ————————————————————— ‘use strict’ // ————————————————————— async function read01 (mysql,host,user,password,data_base) { try { console.error (“*** read01 *** start ***”)
元記事を表示

Node.js: Lambda で MariaDB のデータを作成 (Create)

フォルダー構造 “`text $ tree -a . ├── .env ├── function_update.sh ├── index.js └── test_local.js “` “`js:maria_create/index.js // ————————————————————— // maria_create/index.js // // Jun/07/2020 // // ————————————————————— var mysql = require(‘mysql2/promise’) // ————————————————————— function dict_append_proc (dict_aa,id_in,name_in,population_in,date_mod_in) { var uni
元記事を表示

AWS Lambda + DynamoDB + CloudWatchでQiitaにストックした記事をSlackに定期通知する

## 概要 – AWSサービスを触って学びたい – 毎週土曜日にメールで通知されるQiitaの「今週ストックした記事」をSlackに通知したい ## 使用するもの |サービス|用途| |—|—| |**[AWS Lambda](https://aws.amazon.com/jp/lambda/)**|Qiita APIからストックした記事を取得してSlackに通知する用| |**[Amazon DynamoDB](https://aws.amazon.com/jp/dynamodb/)**|Qiita APIから取得した記事には「いつストックしたか」の情報がないため通知情報が重複してしまう。これを防ぐために前回通知した情報を保持しておく| |**[Amazon CloudWatch](https://aws.amazon.com/jp/cloudwatch/)**|Lambdaの定期実行用| |**[AWS SAM(サーバレスアプリケーションモデル)](https://aws.amazon.com/jp/serverless/sam/)**|ローカルで構築したアプリケーショ
元記事を表示

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について学習中のメモ代わりに残して
元記事を表示

OTHERカテゴリの最新記事