- 1. LINEBotをみんなで作ろう〜環境構築編〜【GWアドベントカレンダー1日目】
- 2. 「AWSサーバーレスのウェブアプリケーションを構築する」の体験
- 3. Lambdaのコールドスタートを改めて整理する
- 4. 【SlackBot】明日は休みだよBotを作ってみた
- 5. Cloud 9 + lambdaでbot作成 ーpart1
- 6. Puppeteer on Lambda (Node.js 12.x) で日本語ページのキャプチャを取る方法 簡単
- 7. 【AWS】API Gateway + LambdaでAPIをつくる
- 8. メールでGitHubに新規issueを追加する (Amazon SES活用版)
- 9. 猫の画像が次々届くサーバーレスなシステム
- 10. Rustに入門する〜2日目 reqwestでGET通信をする〜
- 11. 複数のバックエンドのリソースをAmazon API Gatewayで統合する
- 12. Rustに入門する〜1日目 SAMを使ってAWS Lambda上で動作させる〜
- 13. 【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)
- 14. SSMパラメータストアから10件以上のデータを取得する
- 15. AWS SAMにハンズオンで入門してみた
- 16. AWS API Gateway+EC2でセキュアなREST APIを構築する
- 17. AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする
- 18. 【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke
- 19. AWS Lambda関数でNode.js レイヤーを作る
- 20. 【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作る
LINEBotをみんなで作ろう〜環境構築編〜【GWアドベントカレンダー1日目】
この記事は下記の [#GWアドベントカレンダー](https://gw-advent.9wick.com/calendars/2020/72) の 1日目の記事になります。
楽しそうなのでやってみる!( @inoue2002 ) | GWアドベントカレンダー
# はじめに
#####全く触った事がない人でも読み進められる記事を目指して、「実際に動くもの」を作ることを重視して解説をしていきます。
最初は環境構築から始め、最終的にはサーバレスで動くLINEBotを作成し、色々な物を作ってもらえたら嬉しいです。
僕の持っている知識を全部書いていこうと思いますのでよろしくお願いします!
もし誤表記やっ訂正すべき点がある場合、コメントいただけると幸いです。
あと、基本的にはMac環境で説明していきますのでよろしくお願いします。
では1週間よろしくお願いします!#今日やる事
・[LINE Developerのサイト](https://developers.line.biz/console/)にログインできるようにする。
・[ngrok](https://ngrok.com/)をインストー
「AWSサーバーレスのウェブアプリケーションを構築する」の体験
いつも忘れないように、コンセプトから。
###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
→ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
→アカウントを不正に使われるととんでもない額を請求されるので防ぐ無料ではないんですが(無料枠がある人はつかますが)、お安い金額でお勉強です。
GWもはじまり、Stay Homeで暇なんで「サーバーレスのウェブアプリケーションを構築する」を体験してみました。
https://aws.amazon.com/jp/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-5/学習できるサービスは、
– AWS Lambda
– Amazon APIGateway
– Amazon S3
– Amazon DynamoDB
– Amazon Cognitoです。
###まずは感想から
チュートリアル自体は2時間あれば多少調べながら
Lambdaのコールドスタートを改めて整理する
## 概要
Lambdaを使うとき、「コールドスタート」の課題があることをよく耳にします。これについて、過去の経緯、直近のアップデート状況なども踏まえつつまとめてみた記事です。
AWS初心者の目線なので不足点などあるかもですが、その場合にはご指摘いただければありがたいです。## 前提となる知識
### 1. Lambdaは実行時にコンテナを生成している
以下のスライドはAWS公式からの引用ですが、Lambda関数実行時の流れを表したものです。これに記載の通り、Lambdaの裏側では、実行時にコンテナが生成されています。なお、以降は実行時に生成されるものを__関数インスタンス__と呼びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451175/fb36e4fc-d3df-553e-dc25-72b2aa5bc298.png)
(出典)[全部教えます!サーバレスアプリのアンチパターンとチューニング](https://speakerdeck.com/keisuke69
【SlackBot】明日は休みだよBotを作ってみた
## きっかけ
– 昨今の事情もあり在宅勤務を行っている方は多いと思います
– そんな中でチームのSlackでこんなやりとりがありました– 在宅でリモートだと曜日感覚なくなってきますよね
– 明日が休みだと思うことで生まれる**生産性爆上げ日**を逃してしまうのはもったいない!ということで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にリクエストを投げて返ってくるのを確認します。
## 手順
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 boto3ssm = 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→レイヤー→レイヤーの作成
【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回以上、関数が呼び出されたらエラーを挙げる」という条件を設定します。
以下は手順になりますが、[このリポジトリ](https://github.com/nomi3/cdk-alarm-to-hungout-chat)をcloneすれば、手順の3,4は省略できるので、より速攻で