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

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

Lambdaを使ってスプレッドシートにYouTube再生回数をひたすら記録する

YouTubeの再生回数をひたすら記録したいときってありますよね?
わたしはあるダンス動画にドはまりし、その再生回数がメディア露出と紐づくのか気になったので取得しようと思い、Youtube Data APIとLambdaとCloud WatchとGoogle スプレッドシートを使ってひたすら回数を記録するようにしました。

Python 3.7、環境はWindowsです。Macの場合コマンドなどを読み替えてください。

## 参考
下記を参考にして作りました
https://qiita.com/akabei/items/0eac37cb852ad476c6b9
https://qiita.com/masaha03/items/fab8c8411a020ff2bd42

## APIを有効にする
Youtube、Googleドライブ、GoogleスプレッドシートのAPIを有効にします。

* GCPの利用登録をする
APIのみの利用でもGCP上でプロジェクトの登録が必要です。プロジェクト名は任意で大丈夫です。

* APIのライブラリからAPIを有効にする
「APIとサービス」のラ

元記事を表示

LambdaでEKS Worker Nodeの夜間・休日停止を行う

# はじめに
検証環境やステージング環境でEKSを使用するときには夜間・休日には停止させて料金を抑えたいことがあると思います。
しかしながらEKSのWorker Nodeの数は宣言的であるがために停止させても新たに立ち上がります。
Masterを消すにしても元の状態に戻すためのアプリケーションのバックアップ・リストア作業を全て自動化しておかないと相当面倒です。

今回はAutoscaling Groupのパラメータを変更することでWorker Nodeをシャットダウンさせ擬似的な夜間・休日停止をLambda関数で実行させます。

前半ではLambdaの設定内容を説明し、後半では実際にPulumiで構築していきます。

# 環境情報
macOS Mojave 10.14.1
Pulumi: 1.10.1
EKS: 1.14

# Lambda設定内容
Lambdaで設定する関数、IAM Policy、トリガーについて説明します。

## 関数
ランタイムは`Python 3.7`を使用します。

“`python:lambda_function.py
import boto3

aut

元記事を表示

circleCI でaws cliを使ってlamda環境にデプロイする

circleCi2.0にaws-cliのorbsが追加されたようなので使ってみました。
https://circleci.com/orbs/registry/orb/circleci/aws-cli

#この記事でやること
vue.jsで作成したプロジェクトをGitにpushしたときに、CircleCiによりビルド、デプロイされるようにします。
cloudFormationのcliを利用してデプロイしたいので、awsコマンドが使えるようにしたいと思います。

#CircleCIの設定
###環境変数の追加
環境変数を設定します。
– AWS_ACCESS_KEY_ID
– AWS_SECRET_ACCESS_KEY
– AWS_DEFAULT_REGION

加えて、今回cloudFormationでLamdaにアップロードするビルド済コードの置き場所にS3バケットを指定しているのと、スタック名の指定をしているので環境変数に加えておきます。ベタ書きでもいいと思います。
– S3_BUCKET_NAME
– STACK_NAME
![Screen-Shot-2020-02-16-at-

元記事を表示

Alexaスキルの開発 0から公開まで

初めて **Alexaスキル** の開発を始めてから公開するまでの流れについて。

# フローチャートを作成する
事前に Alexaにどう発話したらどう分岐するかをまとめたフローチャートを作っておくとフローが整理できて開発が捗るので以下のような感じで作成します。(黒塗り多くてすみません)

![alexa-flowchart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416295/eb926020-0439-8afd-7548-05d19c892f89.png)

# alexa developer console への登録

[amazon alexa](https://developer.amazon.com/ja-JP/alexa)にアクセスし、アカウントを作成してログインします。
「スキルの作成」ボタンを押し、好きなスキル名を入力して作成。

スキルを作成した後、ビルドタブの左メニューから「エンドポイント」を選択し、表示される **スキルID** を覚えておきましょう。
![screens

元記事を表示

S3を操作するLambda関数をローカルで開発するための環境構築

Serverless Frameworkを使って構築したLambda関数のローカル開発環境で、LambdaからS3を操作する関数を開発したい。AWS上のS3を直接操作してもいいが、せっかくなのでローカルで完結する環境を構築する。

#ローカルでS3をエミュレートするためのツール
ローカルでS3をエミュレートするためのツールとしては、
– [LocalStack](https://github.com/localstack/localstack)
– [MinIO](https://min.io/)
– [S3rver](https://www.npmjs.com/package/s3rver)
あたりがあるようだが、今回はLocalStackを使用する。

# 事前準備
Dockerが必要なので事前に使えるようにしておく。
自宅で使っているPCはWindows 10 Homeのため、Docker Desktop for Windowsが使えない。調べてみたらDocker Tookboxというツールを使えばいいようなので、インストールする。(参考:@idani氏の[windows 10

元記事を表示

LambdaとPythonでAPI GatewayをエンドポイントにしてSlackに何かを送る

# 経緯

2020/02/13に[JAWS-UG 初心者支部#23 次回のハンズオン勉強会向けのチューター向け予習会](https://jawsug-bgnr.connpass.com/event/163557/)へ参加することになりました。

Lambdaは、花屋時代にローカル環境でテスト実行してみてQiitaに上げたきりだったので
※その時の記事 => [Pythonでaws-sam-cliをローカル実行するまで](https://qiita.com/suwa3/items/505d137d7073c7a5243f)

もうすこし踏み込んでみたかったのと
(実用性を意識しながらLambdaを触ってみたいなぁ)
と、思った&予習も兼ねて
**API GatewayをエンドポイントにしてLambdaを起動しSlackに何かを流す**
というのをやってみました。

API Gatewayをエンドポイントにした実行を試したいと考えた理由として
外部から連携したい場合、HTTPリクエストを受けて発火させる場面が多くあるので
これから効率化を考える際に、よく使いそうな手法として要領を掴んで慣

元記事を表示

AWS LambdaでSlack通知してみる

## やること

[PowerShellでSlack通知してみる](https://qiita.com/zgw426/items/738793e2e426f52d7d42)の続き、AWS Lambdaで通知してみる

## 前提

AWSアカウントとSlackアプリの`Incoming Webhook URL`を取得していることが前提で始めます。

## IAMロール作成

Lambda実行に必要な権限(IAMロール)を作成します。

必要なポリシーを選択します。今回はLambdaが動けばいいので、`AWSLambdaBasicExecutionRole`を選択しました。

Serverless Frameworkを使ったLambda+Pythonのローカル開発環境を構築

Windows上にServerless Frameworkを使ったLambda+Pythonのローカル開発環境を構築した時のメモ。実際にAWSにデプロイせずにローカルで単体テストまでできる環境を構築します。

# Pythonのインストール
[本家のWindows用ダウンロードサイト](https://www.python.org/downloads/windows/)から最新版(執筆時点では[3.8.1](https://www.python.org/ftp/python/3.8.1/python-3.8.1-amd64.exe))をダウンロードし、実行する。

最初の画面で「Add Python 3.8 to PATH」にチェックを入れて「Install Now」で標準インストールする。最後の画面で「Disable path length limit」をクリックして、パス文字列長の制限を解除しておく。

“`
>python –version
Python 3.8.1
“`
バージョンが正しく表示されればOK。

# pipenvのインストール
Pythonのパッケージ管理シ

元記事を表示

python3でAPIをコールする。

pythonの`urllib.request`モジュールを用いてAPIをコールするメモ。

# 下準備

* 適当なlambdaとAPI Gatewayを用意。

lambdaは受け取った`event`を返却するようにする。

“`python
import json

def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: event
}
“`

API Gatewayでは各種メソッド(GET、POST、PUT)を用意。

* メソッドリクエスト → APIキーの必要性`true`に指定。
* 統合リクエスト → lambda関数を指定。

[APIのデプロイ]を実行し、URIを取得。(API Gatewayで何かの更新をしたのなら都度デプロイすること!でないと反映されない。←めっちゃこれハマる。)

[使用量プラン]から[作成]を選び、APIステージを選択、レート・バースト・クォータを設定、APIキーを作成する。

# 本題のAPIを叩くlam

元記事を表示

aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければならない

# 概要
aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければいけません。

# 解説
例えば、nodejs の場合だと、nodejsディレクトリにnode_modulesディレクトリを入れます。
zipのファイル名は何でもokです。

“`
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
“`

知らないとはまる可能性があるので共有でした。

当然 nodejs 以外の言語でもディレクトリ構成が決まっているので、下記公式ドキュメントで確認してください。

AWS Lambda レイヤー
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html

元記事を表示

Chalice ー Python Serverless Microframework for AWS

PythonのAPIを作りたいと思って調べていたところ、Chaliceを見つけました。
今回はちょっとした備忘録記事です。

Chaliceは一言で言えば、AWSによるPythonのサーバーレスフレームワークです。
AWSからGitHubに公開されており、怪しい挙動はきっとあまりしないでしょう。
https://github.com/aws/chalice

ChaliceはデプロイするとApiGateway + lambdaを利用してサーバーレスに公開してくれます。

# 環境

– macOS Catalina 10.15.1
– python 3.6.4
– chalice 1.12.0

# Chaliceのインストール
“`
$ pip install chalice
$ chalice –version
“`

# AWS IAMの設定
ApiGatewayとlambdaの操作権限を持つユーザーから操作しないとデプロイできません。
今回は簡単にポリシー「AdministratorAccess」を与えたユーザーから操作させます。
本当ならより権限を絞って最低限の開発

元記事を表示

LambdaでEC2内のシェルスクリプトを実行

## はじめに

### 本記事の対象となる読者

特定のトリガーでLambdaを起動して、EC2内のシェルスクリプトを実行したい

### システム概要

上記のやりたかったことを実現するために使用したサービスは以下です。

* AWS Lambda(以後Lambda)
* AWS System Manager(以後SSM)
* AWS Elastic Computer Cloud(以後EC2)

### 書かないこと

* EC2インスタンスの構築方法

## EC2

Amazon Linux2を使用して、無料利用枠でインスタンスを用意します。

### EC2インスタンスを作成

EC2インスタンスを作成する前に以下のポリシーをアタッチしたIAMロールを作成しておきます。仮に名前は`AWSServiceSSMRole`としておきます。

* AmazonEC2RoleforSSM
* AmazonSSMFullAccess

上記で作成したロールをインスタンスに割り当てインスタンスを作成します。

> ssm-agentのインストールは必要ありません。

### インスタンス内

元記事を表示

Lambda関数を設定してS3イベントで動かそう!

#Lambdaってなに?
AWSの提供するサービスの一つで、サーバ管理をすることなく処理を実行することができるサービスです。

例えばLambdaを利用しない場合、EC2でサーバを作成し処理実行に必要なミドルウェアや言語をインストールし、環境設定をすることで初めて処理が実行されます。

しかし、Lambdaではそのようなサーバのプロビジョニングをすることなく、処理を書くだけで実行することが可能になります。

これにより、
★サーバ自体の管理・メンテナンスが不要
★処理が実行されている時間のみ課金されるので処理の頻度によってはコストを大幅削減可能
★他AWSサービスと容易に連携できるので、AWSメインのアーキテクチャでは大変便利
というメリットがあります。

#トリガーとは?
書いた処理を実行させるにはトリガーというものを設定する必要があります。
AWSのあらゆるサービスと連携ができ、CloudWatchでアラームが出たら実行、kinesis data stream にデータが存在するとき実行、S3にファイルが置かれたら実行などが代表的な例になります。

つまりLambdaは**実行する

元記事を表示

RDS Proxy ちょっと試してみた。

AWSの一番好きなサービスはAWS Lambda な人です(再々掲)

## 注意書き
`Preview版のサービスなので、GAになるまでに色々と変更される可能性は大いにあります。`

AWS re:invent前後に発表されたVPC Lambda関係のアップデートやってみたシリーズラストかな?
ちょっと時間経っちゃいましたけど。

### サンプルコード
サンプルソースはこんな感じ。汚くてすみません。
Node.js v12.xで確認済みです。

[Airport, airline and route data](https://openflights.org/data.html) にあるroute.csv を加工したものを、
RDSに放り込んで、乱数生成して、それにあった航空会社のIATA2レターコード※ を参照しているだけです。

“`javascript:handler.js
‘use strict’;
const mysql = require(‘mysql’);
const util = require(‘util’);

const dbHost

元記事を表示

TABLE 形式の Aurora(MySQL 互換)スロークエリログを Elasticsearch Service (6.8) に取り込み S3 に保存するメモ(Lambda Python 3.8 版)

こちらは、

– **[TABLE形式のAurora(MySQL互換)スロークエリログをElasticsearch Service (6.0/6.2) に取り込みS3に保存するメモ](https://qiita.com/hmatsu47/items/8c92b1a43fd412c054cf)**

の Elasticsearch Service 6.8 / Lambda Python 3.8 対応化メモです。

1 ヶ月ほど前に、

– **[ALB のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/432b1f18f40bba16f5d1)**
– **[CloudFront のアクセスログを Elasticsearch Service 6.8 に取り込むメモ(Lambda Python 3.8 版)](https://qiita.com/hmatsu47/items/e61e1065ba521896225c)**
– **[Ela

元記事を表示

Amazon Lexで簡単なボットを作成してみた

# はじめに
この記事はLexの勉強用として試したことをまとめたものです。
書籍「[AWSでつくる-AIプログラミング入門](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B-AI%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4798059056)」を参考にして対話ボットを作成してみました。

# Amazon Lexについて
* 対話型インターフェイスを作成することができるAIサービスである。
* 会話ボットを簡単に構築することができる。
* Amazon Alexaで使われている深層学習技術と同じ技術を使用している。
* 現時点で日本語未対応である。

# IAMロールを作成
* Lexに権限を与えるためのロール「AWSServiceRoleForLexBots」を作成する。
* http

元記事を表示

serverless framworkでLambda+APIGatewayをdeployする

## はじめに
アプリケーションを Lambda にデプロイする際どんな方法を使用しているだろうか?
AWS SUM ,code deploy と使用してきたがコマンドを複数回叩かないといけなかったりとちょっと面倒臭かった。
そこで最近自分の周りで話題になっている serverless framwork を試してみる。
何やらコマンド一つでビルド・デプロイを行ってくれたりとかなり便利らしい。
スクリーンショット 2020-02-09 11.34.10.png

## Serverless Framework インストール
以下のコマンドを実行し Serverless Framework をインストールする。

“`
$ npm install -g serverless
“`

> ローカル端末で Serverl

元記事を表示

AWS Lambdaでslackに新着論文通知

# TL;DR

AWS Lambdaを用いてMicrosoft Academicで新着論文を検索してSlackに通知するツールを作った。

# はじめに

研究室等のSlackに新着論文通知出せたら便利ですよね。

以前はjournalのRSSを使ってましたが、あまり関係ない論文が飛んできてイマイチ機能していなかったので自分でフェッチツールを作ることにしました。

(実際、皆さんどうしてるんでしょうか)

通知を出すだけなので、[AWS Lambda](https://aws.amazon.com/jp/lambda/)や[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/)といったサーバーレスアーキテクチャを用いれば非常に安価で簡単に構築できます。

今回はAWS Lambdaを用い、また論文検索には[Microsoft Academic](https://academic.microsoft.com/home)のAPI、[Academic Knowledge API](https://doc

元記事を表示

AWS Lambdaと仲良くなれるかもしれないまとめ

– AWS Lambdaに関してざっとまとめてます
– 具体的な使い方ではなく、サービスの位置付けや概念に関してまとめています

## 概要
[AWS Lambda とは](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)によると

>AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。
>
>AWS Lambda は必要時にのみてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。使用したコンピューティング時間に対してのみお支払いいただきます- コードが実行中でなければ料金はかかりません。
>
>AWS Lambda では、管理を全く必要とせずに、任意のアプリケーションやバックエンドサービスで仮想的にコードを実行できます。AWS Lambda は、高度な可用性のコンピューティングインフラストラクチャでコードを実行し、サーバーとオペレーティングシステム、システムのメンテナンス、容

元記事を表示

apacheからS3に静的ページを移行してパス補完で詰まった話

# 何を書いた記事か

AWS S3を用いて静的ページをホスティングする際のTipsです。
特に、apacheなどで配信されていた静的ページをS3に移行する際に使えると思います。

apacheなどのMWがよしなに解析してくれていたURI PathをS3を用いたホスティングでどのように実現するかについて記載します。

# ストーリー

とあるWebサイトのクラウド移行案件を進めることになりました。
そのWebサイトには、静的コンテンツ(HTML/CSS/JavaScript)のみで構成されたLP(静的ページ)が存在することがわかり、せっかくクラウドに移行するので、信頼性の高いS3から配信するようにしようと考えました。
また、対象のLPは接続できるIPに制限をかける必要があり、その実現についても考える必要がありました。

## As-Is

– apacheで静的ページを配信
– LoadBalancerでSSLを終端し、FirewallでIP制限を実施
– アクセスログはapache→fluentdで取得

## To-Be

– 静的コンテンツはS3上に配置
– SSL通信を実現する

元記事を表示

OTHERカテゴリの最新記事