- 1. EC2の自動再起動設定を見据えたメトリクスの長期保管システム構築
- 2. Lambdaまとめ
- 3. LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点
- 4. 在宅勤務中のランチタイムを IoT でアピールしてみた
- 5. 未来の観光業をLINEBotで支えたい。
- 6. AWS ChaliceをPyCharmでローカルデバッグ実行する
- 7. CodePipelineを使ってLambdaに自動デプロイ
- 8. Sansan API + AWSで企業情報のマスターDBを構築する
- 9. console.logからの脱却 – node.jsでデバッグするには(Visual Studio Code編)
- 10. aws-sdkでSTSを利用してDynamoDBにputItemする時の注意点
- 11. Lambda@EdgeのテストをJestで書く
- 12. Lambda x Amazon SNSで、AWSの請求額を毎日メールで通知する
- 13. AWS Lambda で遅延情報を通知してくれる Slack bot を書いてみた
- 14. 高知の「あしたの分も買うちょくきね。~飲食券先買い応援プロジェクト~」の参加店舗を勝手にgoogle map上のマーカーでわかるようにした
- 15. sam apiGateway lambda callback 502
- 16. Datadog enhanced AWS Lambda metrics を試してみる
- 17. 【AWS】Lambda+Amazon SESでメールを送信する
- 18. AWS IoTボタンを押すと動物の鳴き声をgoogle homeで再生する2歳児向けおもちゃを作ってみた
- 19. 構成
- 20. 作成手順
- 21. CloudWatch Synthetics & Puppeteer ことはじめ
- 22. AWS SAM CLI で Lambda Layers が ビルドできるようになったよ
EC2の自動再起動設定を見据えたメトリクスの長期保管システム構築
# 1. きっかけと本記事の概要
担当している案件で障害が発生したが、営業日外では対応が難しい。
しかし放置しておくとユーザー影響など取り返しがつかない被害が・・・そこで**ある条件をトリガーにEC2インスタンスを自動再起動するような設定をしたい**と思った。
※実際にはサーバーの再起動後にプロセスの自動起動も必要なのだがそこは置いておいて。**サーバーの自動再起動に妥当な条件を設定するためには、実績としての過去の監視データが必要**だ。
過去のデータがない状態で再起動の条件を設定しても根拠がない。
過去データから条件を検討し、誤作動する可能性や誤作動してしまったユーザー影響との兼ね合いも考えつつ納得のいく設定をしたいところだ。
1年間はほしい。その上で検討したい。本記事では、以下の要件を満たす監視システムを構築するにあたって収集した情報のまとめ、および実際に構築した記録である。
若干案件に依存した要件になっているが、そこは適宜置き換えることで他のAWSインスタンスの監視や自動再起動設定にも応用が効くだろう。# 2. システム要件
**前提**本案件において監視対象
Lambdaまとめ
# 概要
触る機会があったので、知ったことをまとめていく。# Lambdaとは
AWSサービスのイベントをトリガーに自身がアップロードしたコードを動作させることができるというサービス# 料金
料金は月額であり、「lamdaへのリクエスト数」と「lamdaを動かすときに消費したメモリサイズ(時間計算)」で計算される。料金表はあらかじめ確保するメモリサイズに依存する
# 言語
コーディングできる言語は多岐にわたるが、**「継続的なアクセスがなくCPUもそんなに使わない」のであれば「python」がいい**らしい# ライブラリ
Python3でAWS環境を操作するには、boto3と呼ばれるライブラリが必要。# 一時ディレクトリ
/tmpという一時ディレクトリがある。ファイルの受け渡しをしたいときとかに使う。
なお、同じファイル名を使うと、前の実行時のものが残っていてなおかつユーザー名が違っていてパーミッションエラーというのが起こりうるらしいので、毎回使い終わったらファイルを削除するのがいいらしい。# 環境変数
lamdaに設定できる。
pythonだと、“impo
LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点
AWSのLambda関数から、SlackのIncoming Webhooksでメッセージを送信する機会があり、少々躓いた箇所があったので備忘録として残しておきます。
Lambda関数やIncoming Webhooksは準備できている想定として、これらの作成手順は省略します。# 環境
– macOS
– AWS Cloud9
– Node.js 12#実行コード
Lambda関数を1度実行する度に、Slackメッセージを1件だけ送るような場合は、以下のコードで動くと思います。
1度のLambdaで複数回メッセージを送る場合は、注意点があるので後ほど説明します。“`javascript
const env = process.env
const request = require(‘request’);exports.handler = function(event, context) {
// リクエスト設定
const options = {
url: env.WEB_HOOK_URL,
在宅勤務中のランチタイムを IoT でアピールしてみた
# 作った動機
COVID-19 の影響で在宅勤務になった方、多いかと思います。社員間のコミュニケーションのほとんどが Slack になったという方も多いのではないでしょうか。私の場合はかねてより Slack 中心の生活を送っていましたが、最近 Slack 上にオフィスがあるような気持ちが強まりました。
Slack ではできるだけ即レスしたいな、と思う気持ちはある一方で、この情勢ではきちんと休憩をとることも大事だと思い昼休みの時間などは意図的に Slack デトックスをするようにしています。
そんなわけで昼休み中はできるだけ Slack 上のステータスを “lunch” にして「今はちょっとすぐには返せないよ」という意思表示をしていました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125247/aa5a3818-2b49-003d-b3c5-c2966539480d.png)
ただ毎回 Slack の”Set a status” を開くのは少し億劫だったので、何か簡略化する
未来の観光業をLINEBotで支えたい。
#はじめに
緊急事態宣言が解除されましたが、全く同じ生活に戻ることはまずないでしょう。そんな中僕たちが救いたいと思ったのは日本全国にある観光地です。各地の特産品やお土産品は、色々なインターネットサービスを使って格安で在庫処分が行われています。このままではなかなか利益が見込めず、一刻も早く観光客が安心して旅行をできる環境を作らなければいけません。今回作った作品は後ほど紹介するハッカソンで奨励賞をいただいた作品の記録用記事です。開発構成/使用技術などについても少し書いています。
また、未来を見据えた物なので自粛警察はやめてください。
#メンバー
今回は広島県等が主催する[レッドハッカソン2020](https://www.pref.hiroshima.
AWS ChaliceをPyCharmでローカルデバッグ実行する
# この記事の概要
サーバーレスアーキテクチャーをサポートするフレームワークも色々充実してきていますが、今回は、AWS製のPython専用フレームワークのChaliceを試してみました。単に試すだけですと、正直、Black Belt読みましょう。以上!で終わってしまいます。
従って、今回はローカルでテストしてみることにこだわって、PyCharmでのローカルデバッグの方法を中心に記載します。
# 前提知識
サーバーレスとは?やChaliceとは?というのは、以下のリンクを参照ください。
まずは、公式
https://chalice.readthedocs.io/en/latest/その他参考にしたサイト
https://www.freecodecamp.org/news/how-to-get-started-with-serverless-architecture/
https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-chalice-2019/
https://aws.amazon.com/jp/builders-flas
CodePipelineを使ってLambdaに自動デプロイ
# 概要
Lambdaの関数が増えてくると修正のたびにコンソールで修正したり、ローカルのPCで修正したソースをzipに固めてコンソールでアップする作業って結構大変ですよね!!
ってことでCodePipelineを使ってgitにpush(merge)されたタイミングでLmabdaにデプロイしたときの話を書いていきます。## 処理の流れ
1. Lambdaに関数を登録(Hello World)
2. GithubにLambda用のコードをpush
3. CodePipelineのSourceでソースの取得
4. CodePipelineのBuildでテストの実行など(今回はテストの実行はしない)
5. CodePipelineのDeployでLambdaにデプロイ## Lambdaに関数を登録
##### LambdaにHello Worldの関数を登録
関数の作成ボタンから関数の作成
Sansan API + AWSで企業情報のマスターDBを構築する## 1. 経緯
社内には数多くのシステムがあります。CRM、ERP、経費精算、、、etc…
そして、その各システムには、企業を登録するUIがあり、それぞれのシステムに企業登録を行います。
そこで課題に上がってくることが以下の2点!#### 社内の課題?
①それぞれのツールに何度も同じような情報を入力しなければならない。
※CRMやERPなど各システムに企業名や担当者など共通する情報を何度も入力。。。②色々な人が入力するので、console.logからの脱却 – node.jsでデバッグするには(Visual Studio Code編)
## 前回のおはなし
若き開発者ヒロロはNode.jsでバックエンド開発を任されたがデバッグ方法がわからず、苦戦。
自力で調査しChrome DevToolでデバッグする方法を見つけ出し、なんとか`console.log`地獄は免れた。
しかし、普段利用しているVSCodeのデバッグツールを活用してより快適なデバッグ環境を作ろうと決意する。前回の詳細**「console.logからの脱却 – node.jsでデバッグするには(Chrome DevTool編)」**は[こちら](https://qiita.com/Hiroro0970/items/d48a865e8ba949bb666f)
## VSCodeでのデバッグ環境構築
公式ドキュメント(https://code.visualstudio.com/docs/editor/debugging) によればVSCodeでデバッグを有効にするにはあらかじめ設定ファイルに情報を記載する必要があるそうです。VSCodeを起動してデバッグメニューを開き、「create a launch.json file.」をクリックします。
そのaws-sdkでSTSを利用してDynamoDBにputItemする時の注意点
# はじめに
Lambdaを使って別アカウントのDynamoDBにputItemする際にハマったことをメモ。DynamoDBにputItemするのは初めてだったので、
事前に同一アカウントのDynamoDBにputItemをした。# やったこと
– Lambdaから同一アカウントのDynamoDBにputItem
– LambdaからSTSを使って別アカウントのDynamoDBにputItem# Lambdaから同一アカウントのDynamoDBにputItem
[AWS.DynamoDB](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property)クラスを使用
“`index.js
const AWS = require(‘aws-sdk’);exports.handler = async (event, context) => {
const dynamodb new AWS.DynamoDB()cons
Lambda@EdgeのテストをJestで書く
# 概要
Lambda@Edge の単体テストを [Jest](https://jestjs.io/ja/) で書いたときのメモ。今回書いたのは Lambda@Edge だけど、Lambda でも基本的には同じはず。Jest はシンプルで良いですね。
# 導入方法
導入したいディレクトリを作成して、そこで以下のコマンドを入力していく。Jest の導入はすごく簡単。
* `npm init`
* npm を初期化する
* インタラクティブに設定項目を聞かれるので、お好みで設定
* `test command` だけ `jest` と入力する
* `npm install -D jest`
* jest をインストールする# テスト対象ファイル
今回テストするファイルはこちら。Lambda@Edge のリクエストオリジンで動作させるような処理。
“`javascript:main.js
“use strict”;exports.handler = (event, context, callback) => {
const reque
Lambda x Amazon SNSで、AWSの請求額を毎日メールで通知する
#はじめに
CloudWatchで請求アラートを設定する事はできますが、超心配性な自分としては、月初~前日までの請求額を毎日メールで確認しておきたい。
AWS Lambdaとwebhookを使ってSlackのチャンネルに通知する方法は多く見られましたが、メールで通知する方法は意外と多くなかったので、まとめてみました。# 概要
+ 請求額はCost Explorerから取得する。
※CloudWatchから取得する方法もありますが、[双方に差異があり正しい値はCost Explorerである](https://hacknote.jp/archives/44913/)という情報があったため、Cost Explorerを使う事にしました。
+ Lambda関数のランタイムはPython3.7とし、Python 向けのAWS SDK(Boto3)を利用する。
+ トリガを設定したLambda関数にて、月初~前日までの合計請求額とサービス毎の請求額を取得し、その内容を整形し、メッセージとしてAmazon SNSのトピックに発行する。
+ メッセージを受け取ったSNSトピックは、紐
AWS Lambda で遅延情報を通知してくれる Slack bot を書いてみた
# はじめに
– 以前AWS Lambdaを用いて作成したSlack Botについてまとめる機会があり、せっかくなので備忘録含めQiitaにも投稿しようと思いました。
– 作成当時の記憶はだいぶ薄れておりますが、覚えている範囲で引っかかったところなどどなたかの参考になれば幸いです。※ 本記事のbotを作成したのは約2年前なので、現在の仕様と乖離する部分もありますがご了承ください。
※ 作成したbotそのもののソースは以下となります。
https://github.com/spinrock/delayTrainBot# そもそもSlack bot作成に至った経緯
– 筆者の家は、複数路線の駅に挟まれた立地にあり、駅から別の駅への移動が大変でした。
– 駅に到着後に遅延に気付いても別の路線に乗る(駅を移動する)、という選択肢をとることが難しい状況でした。
– 起床時に自分で路線情報を確認できればいいのだが、朝の時間帯はバタバタしていることが多く、見逃す日も多分にありました。
– 普段から確認するツール(LINEやSlack)に通知が来て教えてくれると便利なのに
高知の「あしたの分も買うちょくきね。~飲食券先買い応援プロジェクト~」の参加店舗を勝手にgoogle map上のマーカーでわかるようにした
**高知に行きたくても行けないので勝手にやりました**
https://script.google.com/macros/s/AKfycbzRJCvOuWC5uMFiqhl5soiLHnWbkGE5P-GAkxFmVT08u_3E2hRi/execあしたの分も買うちょくきね。~飲食券先買い応援プロジェクト~「参加店舗」
https://www.kochinews.co.jp/norikoeyo/asukau_eatery/
この店舗一覧をgoogle map上のマーカーでわかるようにしました## 構成
– フロントはgoogle app script
– フロントからAPI Gateway+LambdaのAPIを呼び店舗情報を取得
– 店舗データはDynamoDBに保存という完全サーバレスです
## まずは店舗一覧のデータ作成
https://www.kochinews.co.jp/norikoeyo/asukau_eatery/
このサイトをスクレイピングするlambdaを書きます(python)
座標取得するため、googleのAPIキーも事前に取得しておきました
sam apiGateway lambda callback 502
# SAM apiGatewayに返却するフォーマット
## 経緯
Googleの検索をAPI以外でやりたくなりました。そこでGoogle検索になんどもAPIを介さずにアクセスしていたら怒られました。
サーバからやっていたら too meny access 〜〜というエラーが返されるようになり、そこから数時間使えない。
API使えばいいいので困りはしないけれど、解決しておきたくて、ちょっと迂回してみました。試したところIPを変えれば動くため、動的に変わるIPを持つ仕組みに乗っかろうと考えてlambdaを、
前段に通信が必要だったためapiGatewayを設けて apiGateway + lambda の構成になりました。この構成で必要になる、lambdaからapiGatewayに返すcallbackのフォーマットを残しておきます。
### lambdaからapiGatewayに返すコールバックフォーマットはこうすればOK
var response = {
“statusCode”: 200,
“headers”: {
Datadog enhanced AWS Lambda metrics を試してみる
# enhanced AWS Lambda metrics とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31262/4d43700c-9d73-44b8-e3ae-c48d05e6837d.png)
DatadogにてAWSを連携すると出てくるデフォルトダッシュボードの中に存在する謎なやつ(図の下側)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31262/50f42a20-7ee5-0bab-e3ff-1fa8ec3c56b5.png)
とりあえず開いてみても情報なし、下側のInvocationsの値は入ってるのに、上側のInvocationsには値が入ってない :thinking:
参照元メトリクスを見てみると別物参照してますね
上側: `aws.lambda.enhanced.invocations`
下側: `aws.lambda.invocations`en
【AWS】Lambda+Amazon SESでメールを送信する
[前回の記事](https://qiita.com/duplicate1984/items/8a3ce5c434a44b2b04fd)でAmazon SNSを利用してSMSを送信するlambdaを書きました。
今回はメールを送信するためにAmazon SESを利用していきます。#やりたいこと
lambdaからのキックでメールを送信したいと思います。
ただし、宛先のメールアドレスはlambda内で指定したいと思います。Amazon SMSでもメールの送信は可能ですが、予め作成したサブスクリプションで認証済みのメールアドレス宛にしか送信できません。
そこで今回はAmazon SESを使用します。#Amazon SESって?
システムエンジニアリングサービス…ではなく
Amazon Simple Email Serviceです。従量課金制のEメール送信サービスです。
2020年5月現在、東京リージョンではサポートされていません。
エンドユーザーへのマーケティングや、ヘルスチェック系の通知などに利用できます。#コードとかより注意しておきたいこと
###サンドボックスの解除
AWS IoTボタンを押すと動物の鳴き声をgoogle homeで再生する2歳児向けおもちゃを作ってみた
AWS IoTボタンを押すと動物の鳴き声を再生する2歳児向けおもちゃを作ってみました。
きっかけは動物好きな子どもが親の真似をして 「おけーぐるぐる ぞうの声」 とgoogle homeに向かって何度もしゃべっても認識できない
→親に「おけーぐるぐる ぞうの声 っていって」と何度も言われるような状況がうまれ、しんどい。。。
そこでボタン押すだけなら操作なら2歳児でもできるでしょ!と思い作成しました。構成
構成はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294965/6c115d8c-e0ae-593a-6814-f430f6223b56.png)
1.Amazon IoTボタンを押す
2.ラムダ関数が起動(ただGETメソッドを実行するだけ)
3.ローカルのサーバーが起動(ngrokを使うことでインターネット上に公開)
4.google homeがしゃべる!作成手順
作成手順はこんな感じです。
1.LAN環境でgoogl
CloudWatch Synthetics & Puppeteer ことはじめ
今さらながらCloudWatch SyntheticsでWebサイトの監視をしたのでまとめます。
# この記事の内容
* CloudWatch Syntheticsのために手動でS3バケットとIAM Roleを作る
* ローカル環境にPuppeteerをインストールしてNode.jsのコードを書く
* Googleのトップページに「猫 wikipedia」を入力して検索する
* トップにWikipediaの[記事](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%82%B3)が出てこなかったら異常事態なのでスクショを撮ってCloudWatchでアラートを上げることにする
* このコードをCloudWatch Syntheticsに持って行ってCanaryを作成するきちんとした環境構築などはしていません。非常に意識の低い内容となっています。。
# まず最初に:勝手にバケットやIAMを作ってほしくない
最初のセットアップで `s3://cw-syn-results-999999999999-ap-northeast-1` というS3バケ
AWS SAM CLI で Lambda Layers が ビルドできるようになったよ
**Building Layers**
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/building-layers.html“`shell-session
$ sam build layer-logical-id
“`SMA CLI のバージョンが 0.50.0 以上である必要があります。
“`shell-session
$ sam –version
SAM CLI, version 0.50.0
“`SAM CLI の基本的な使い方については、以前 Qiita にあげたのでこちらも参照いただければと思います。
**AWS SAM CLI 再入門 2019.12**
https://qiita.com/hayao_k/items/7827c3778a23c514e196## 簡単な例
sam init で作成できる Python 3.8 の Hello World Example を例に考えます。“`shell-session
$ sa