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

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

【SlackBot】明日は休みだよBotを作ってみた

## きっかけ

– 昨今の事情もあり在宅勤務を行っている方は多いと思います
– そんな中でチームのSlackでこんなやりとりがありました

スクリーンショット 2020-04-29 0.18.53.png

– 在宅でリモートだと曜日感覚なくなってきますよね
– 明日が休みだと思うことで生まれる**生産性爆上げ日**を逃してしまうのはもったいない!ということでStayHomeの暇つぶしも兼ねて次の日が休みの時にSlackに通知してくれるBotを作ってみました

## 使用した主な技術

– AWS Lambda(Node)
– [Holidays JP API](https://holidays-jp.github.io/)
– [Slack Web API](https://slack.dev/node-sla

元記事を表示

Cloud 9 + lambdaでbot作成 ーpart1

# はじめに
lambdaを定期実行してTwitter APIを叩き、
AM10時(JST)につぶやくbotを作成した。

一連の工程で以下の使い方について理解を深めた。
・Twitter APIの開始方法/使い方
・BitFlyer APIの使い方
・Cloud9 でLambdaをローカル検証し、リモートLambdaへのデプロイ
・Lambdaの定期実行
・LambdaからS3オブジェクトの読み取り/書き込み

# botの構想
・実行時間:日次AM10時
・内容  :仮想通貨の価格変動に合わせてその日のメニューを提案

“`
・ビットコイン前日上昇率:10%以上
 「今日は焼肉にしよう」
・ビットコイン前日上昇率:2~10%
 「今日は外食にしよう」
・ビットコイン前日上昇率:±2%
 「今日は自炊にしよう」
・ビットコイン前日上昇率:-2~10%
 「今日は冷凍チャーハンにしよう」
・ビットコイン前日上昇率:-10%
 「今日はモヤシ炒めにしよう」
“`

# twitter APIの利用申請
[こちら](#https://qiita.com/kngsym2018/items

元記事を表示

Puppeteer on Lambda (Node.js 12.x) で日本語ページのキャプチャを取る方法 簡単

## やりたいこと
Lambda上でPuppeteerを動かしてキャプチャを取るとき、日本語フォントを正しく表示させる。
(デフォルトではLambdaに日本語フォントが入っていないため、何もしないと日本語がすべて豆腐になってしまうのだ。)

## 環境
* AWS Lambda
* Node.js 12.x
* ローカル
* Windows10
* Node.js v12.16.2
* npm 6.14.4

## やり方(ざっくり)
* Lambda Layerに日本語フォントをzip化してアップロードする。
* Lambda関数にそのLayerを追加する。
* Lambda関数内でLayerのフォントファイルを参照できるようにindex.jsで`process.env[‘HOME’] = “/opt”;`を定義する。

## やり方(詳細)

“`shell:ローカルのディレクトリ構成
puppeteer_sample
├─ modules # Layerに登録するnpmモジュール群
│ ├─ node_modules
│ └─ packa

元記事を表示

【AWS】API Gateway + LambdaでAPIをつくる

## やりたいこと
サーバを使わずにAPIを作成したい。
EC2インスタンスからAPI Gatewayで作成したREST APIにリクエストを投げて返ってくるのを確認します。
Qiita logo

## 手順
Amazon API GatewayとLambdaを使用して、REST APIを作成してみます。

[1. Lambda関数を作成する](#1-lambda%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[2. API GatewayでREST APIを作成する](#2-api-gateway%E3%81%A7rest-api%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
[

元記事を表示

メールでGitHubに新規issueを追加する (Amazon SES活用版)

# はじめに
以前、IFTTTのEmailサービス[^iftttemail]をメールの受け口にしてAWS Lambda経由でGitHub API[^githubapi]を叩き、[メールでGitHubに新規issueを追加する](https://qiita.com/nikotan/items/ff516aa90eb87c5140e7)機能を作りました。自作サービスのバグや改善点に気づいたときに、メール一本でGitHubのissueを立てられる、というのは実はとても便利です。今後も継続的に使いそうなので、メールの受け口も含めてAWS上で動くよう作り直してみました。

# 方針
メールの受け口として、Amazon SES (Simple Email Service)[^ses]を使います。自分で管理しているドメインのメール配送先をSESの受信用エンドポイントに向けることで、メールを、Amazon SES → Amazon S3 → AWS Lambdaとバケツリレー。メールの中身に応じてGitHub API[^githubapi]を叩きGitHubレポジトリにissueを追加するLambda

元記事を表示

猫の画像が次々届くサーバーレスなシステム

# はじめに

コロナ禍ですっかり疲れ切っている方も多いと思いますが、そんな時こそ一服の清涼剤が必要…ということで、**Slackのチャンネルに猫の画像が定期的に届くサーバーレスなシステム**を作ってみました。

なお、今回は[The Cat API](https://thecatapi.com/)から猫の画像を拝借しています。

# 1. Cat APIのAPIキーの取得

* [The Cat API](https://thecatapi.com/)のページを開いて、`SIGNUP FOR FREE`と書かれたボタンを押します。

![cat_api_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/ada25a20-6ef3-63bc-0a93-5cfb0150f874.png)

* 遷移先のページで、メールアドレスを記入して`SIGNUP`を押してしばらく待つと、`Welcome to The Cat API!Welcome to The Cat API!`というタイトル

元記事を表示

Rustに入門する〜2日目 reqwestでGET通信をする〜

# 初めに

1日目の続きです。

# 釈明

(釈明の日本語の使い方あってるのか)

本当はGoogleカレンダーからの情報取得までを予定していましたが、
方針があちこち飛びHTTP(S)リクエスト自体に以上に労力を使ったので表題の部分までになりました。

こうなった背景としては以下の通りです。

– `google-calendar3のサンプルの依存パッケージのバージョンが割と古くてコピペ+αでどうにもならなかった
– 正直パッケージを古いのにしてやればこんなことにはならなかったから自分が悪い
– 一応頑張るだけがんばったけどこのままの方針でどうにかできる自信がなかった
– 利用するパッケージが`await/async`まみれだが別言語でも書く機会がなくふんわり概念止まりだったのでそこから学習が必要だった
– あんま関係ないけどRustの非同期処理自体がようやくちょっと前に安定したらしく情報の交錯がすごかった
– `openssl-sys`を`AWS Lambda`向けにコンパイルできなかった
– これについては回避できず今後解決していく必要があるの

元記事を表示

複数のバックエンドのリソースをAmazon API Gatewayで統合する

# 前提
システム開発をしていると「A機能はLambdaで作るべきで、B機能はコンテナで作るべきで、でもそれぞれ実はURIは同じにしておく方がREST的にキレイになるんだよね」なことがある。…いや、あまりないか?ともあれ、そんな時にはnginxとかでプロキシを作って振り分けても良いのだけど、せっかくパブリッククラウドを使っているのだからマネージドサービス使ってみたいよね、と思ってやってみた。

Spring BootなWebアプリの動いているコンテナと、Lambda関数がそれぞれあるような構成。

# Lambda関数
この記事のために作り直すのも面倒なので、以下の記事で作ったものを転用する。

[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)

# Spring BootなWebアプリの動いているコンテナ
あまりこだわりもないので、適当なパラメータを受けてJSONを返すコンテナを作ってみる

元記事を表示

Rustに入門する〜1日目 SAMを使ってAWS Lambda上で動作させる〜

# 初めに

今年の正月くらいにRustの公式の入門みたいなページを読んだはいいけど何も作らず今日まで来てしまったので、
いい加減何か作ろうと思ったらちょうどいい題材があったのでそれで入門しようという感じ。
家のサーバで動かしてもいいですが `AWS Lambda` がコスト的にも管理的にも楽なのでこれでやります。
アプリはあんま作らないので割と初心気味

最終的に作るものですが、
このコロナのご時世で会社全体でリモートとなり、今まで雑にやってきたけどSlackのステータスはしっかり変更しようね!
…とはなったけどめんどくさいとか忘れてたとなるのでその辺りをいい感じにしてくれるものを作ろうと思います。

# 方針

ステータスの方針についてはまだ決まってないのもあるのでとりあえずですが、
1日一回業務開始時間に実行させ、
今日が土日か自分の終日予定に休み系のワードがあればステータスを休暇に変え、なければステータスなしに変更するものを作ります。
もしくは業務終了時間に固定で業務終了に切り替えるもの。

まず ` AWS Lambda` でRustで動かします。

# 公式のサンプル

元記事を表示

【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)

# 概要
社内でAWSを使ったシステム設計を任される予定があり、AWSのサービスを勉強中です。
チュートリアルと画面が異なるため、記事にしています。

以下もご覧いただけると幸いです。
[【AWS10分間チュートリアル】Docker コンテナのデプロイ](https://qiita.com/tyariponzu614/items/573231bf72115034eca2)
[【AWS10分間チュートリアル】ReactJSアプリをデプロイしてホストしてみた(CI/CD)](https://qiita.com/tyariponzu614/items/0b3b9c4c47bf4542d308)
[【AWS10分間チュートリアル】Lightsail でWordPressインスタンスにアクセスする](https://qiita.com/tyariponzu614/items/c1fb2cee1ace2d5f25b2)

# 教材
10分間チュートリアル
https://aws.amazon.com/jp/getting-started/tutorials/

「Hello, World!」をサー

元記事を表示

SSMパラメータストアから10件以上のデータを取得する

SSMパラメータストアから複数のパラメータを一括で取得したい!というときには`get_parameters`や`get_parameters_by_path`を使うといい感じに取れる。

ただ、これ知らなかったが一度に10件までしか取得できないようで、それ以降取得するには返却されるトークンを使ってリトライしないといけないらしい。

SSMパラメータストアの`/HOGE/`以下のパスに11件のパラメータを作っておきlambda(python3.8)で実験。

“`python:lambda
import json
import boto3

ssm = boto3.client(“ssm”)

def lambda_handler(event, context):
params = dict()
responseSSM = ssm.get_parameters_by_path(
Path = “/HOGE”,
WithDecryption = False
)
for param in responseSSM[“Parame

元記事を表示

AWS SAMにハンズオンで入門してみた

#はじめに
4月22日に行われたAWS主催の「さぁ!サーバーレスを始めよう!サーバーレスハンズオンもくもく会」に参加し、その際に行ったハンズオン「[サーバーレス環境 構築自動化 編](go.aws/2vuWHuy)」の備忘録となります。

#目的
**AWSは触らないと忘れる!だから触る!!**

#ハンズオンの内容
>AWS Hands-on for Beginners – Serverless #2 では、前回の Serverless #1 で構築した翻訳 Web API を AWS Serverless Application Model (AWS SAM) を用いてテンプレートから構築します。前回のハンズオンでは全ての工程を手作業で(マネージメントコンソール上で)構築していきました。今回のハンズオンではこの構築作業をテンプレート化し、作成したテンプレートから AWS リソースを構築していきます。テンプレート化することで、そのテンプレートをバージョン管理できるようになる、チーム内でレビューがしやすくなる、といった利点があり、プロダクト開発をより効率的に進めることができます。

元記事を表示

AWS API Gateway+EC2でセキュアなREST APIを構築する

# 背景

「AWSを使ってAPIを構築したい」という要望は山程あると思います。
その場合、API GatewayとLambdaを用いてサーバレスに構築することがほとんどです。
しかし、Lambdaにはメモリ・実行時間の制限があったり、Lambdaベースでコーディングしなければならなかったりといった不自由な点も存在します。
もしかしたらこれらの条件が理由でLambdaではなくEC2上にサーバを構築したいということがあるかもしれません。AWSに不慣れな場合、この方が手っ取り早い場合もあります。

そこで、今回はAPI Gatewayを通してEC2内に立てた任意のポートにリクエストを送る手順をご紹介します。

# 設計

API Gateway+EC2といいましたが、間にLambdaを噛ませています。
LambdaからこのEC2サーバにHTTP経由でリクエストを送信します。
通常、Lambdaはネットワーク接続不可能に設定されていますが、private subnet内に設置することによって同VPC内へのアクセスを実現しています。

![Screen Shot 2020-04-22 at 1

元記事を表示

AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする

AWS Lambda(以下、Lambda)に外部モジュールをデプロイする方法を見ていきたいと思います。ここではPythonを例に見ていきます。

実行順序
1. Amazon Linux 2(Lambdaの実行環境)を準備する
2. ソースファイルとともにLambdaにデプロイ
2. Lambda Layerを使う方法

*2はどちらを選んでも構いません。

## 1. Amazon Linux 2(Lambdaの実行環境)を準備する
requestsモジュール等、内部でC言語などを使わず、Pure Pythonで書かれたモジュールの場合、このステップは不要です。
***しかし、numpyやscipyといった、C言語に依存するモジュールの場合、Lambdaの実行環境と同じ環境で開発するのが開発しやすくなります。 windowsやMacでインストールしたnumpyをzipで固めてデプロイしてもエラーとなります。***

ここでは、Amazon Linux 2の環境として、公に公開されているDockerイメージ、***lambci/lambda:build-python3.7*** を使い

元記事を表示

【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke

###Lambda関数から別のLambhda関数を呼びに行きたい時ってありますよね!
そんな時に使える方法を備忘録として残します。

[公式ドキュメント該当ページ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html)

呼び出す側のLambda関数 main

“`index.js
const AWS = require(‘aws-sdk’)
const lambda = new AWS.Lambda()

let params = {
FunctionName: `invoked`,
InvocationType: ‘Event’,
Payload: JSON.stringify({
id: “xxxxxxxxxx”,
message: “xxxx”
})
}
con

元記事を表示

AWS Lambda関数でNode.js レイヤーを作る

#対象者
AWSでLamdbaを使っている人/どんなことができるのか調べている人
LINEBotをサーバーレスで作りたい人
Lambdaのレイヤーという機能を知らない人/興味ある人
#下準備
とりあえずデスクトップに移動
`$ cd Desktop`
ディレクトリ作る
`$ mkdir nodejs`
nodejsディレクトリに移動
`$ cd nodejs`
初期化
`$ npm init -y `
レイヤーにしたいパッケージをインストール
`$ npm i xxxxx`
ex)LINEBotのSDKをインストールする場合
`$ npm i @line/bot-sdk`
nodejsディレクトリ自体をzipファイルに圧縮して下準備完了

#AWSコンソール
ログイン→Lambda→レイヤー→レイヤーの作成
スクリーンショット 2020-04-21 16.53.40.png【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作る

AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに通知したいことがあるかと思います。
今回はその構成をCDKで作成してみました。

## 環境
CDK CLI: 1.32.0
ローカルのNode: 11.15.0

## 構成
今回は、`trigger-chat-cdk`というLambda関数を監視対象とし、「1分間に2回以上、関数が呼び出されたらエラーを挙げる」という条件を設定します。
スクリーンショット 2020-04-21 16.04.45.png

以下は手順になりますが、[このリポジトリ](https://github.com/nomi3/cdk-alarm-to-hungout-chat)をcloneすれば、手順の3,4は省略できるので、より速攻で

元記事を表示

AWSのCICDの練習(CodePipeline/ECS/Lambda)

AWSでCICD、FargateのBlueGreenDeployの練習を行う。

# 使用サービス
– CodeCommit/Build/Deploy/Pipeline
– CloudWatch Events
– Fargate
– Lambda

作業で使用する資材は以下となる。

“`shell
.
├── 01-codecommit-ecr.yaml
├── 02-codebuild-pipeline-events.yaml
├── 03-ecs-alb.yaml
├── 04-codebuild-pipeline-events-update.yaml
└── httpd-repo
├── appspec.yaml
├── buildspec.yml
├── Dockerfile
├── fargate-task.json
└── index.html
“`

資材のGithubの[リンク](https://github.com/udtren/aws-cicd-pipeline-ecs-customlambda)

# 作業内容
##

元記事を表示

APIGatewayでWebSocketを利用した場合のOpen時の認証処理

# はじめに
AWSのAPI GatewayがWebSocket対応しています。
この接続を認証したもののみでOpenするのにどうするか?の話です。
wscatなどでコマンドで叩かれると接続だけはできちゃったりするので、そのあたりをどう防止できるかというものです。
今回は別のシステムなりで認証後に発行されたIDがDynamoDBにあり、ブラウザ側へ送信されてるのを前提とします。
$connect時にそのIDがついてる時だけconnectionIdをDynamoDBに格納したい時にどのように出来るかの話となります。

# $connect時のみGetパラメータが取れる
もう結論出てるんですが、API Gatewayで設定したものはブラウザ上でnew WebSocket()などでOpenした時に、URLについたGetパラメータがいつも通りにLambda側で取得できます。

ブラウザ側

“`
const socket = new WebSocket(“wss://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod?id=xyz”)

元記事を表示

DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた

# AWSでサーバーレスなバッチ
2つのAWSアカウント間(VPC Peering済み)で、一方のデータベースからデータ加工してもう一方のデータベースへ、のようなバッチをつくります。

![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86958/b7864d8e-aab0-eac5-7906-a253e09f7425.png)

勉強も兼ねてAWSのサービスを積極的に使っていこうということで、
まずは間に [DynamoDB](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html) を挟み、分割した [Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html) function で処理する形にしました。

![qiita2.png](https://qiita-image-stor

元記事を表示

OTHERカテゴリの最新記事