- 1. AWS系:Qiitaのタグ統計を浄化するためのタグ詰め合わせ記事
- 2. AWS Security Hub のセキュリティ標準チェックが自動で有効化される条件
- 3. AWS Lambda + Python + Slack でサイトの監視・アラート通知
- 4. AWS Lambdaの例外処理の仕方(同期実行・非同期実行・ストリームベース実行)
- 5. Lambda FunctionsをCloudFormationでデプロイするbashスクリプト
- 6. Serverless Frameworkのlambdaアプリにカスタムドメインを付与する
- 7. Lambda@Edgeを完全に理解する?♀️
- 8. Laravelのサーバレス用ライブラリbrefを使い、lambdaでhello world
- 9. AppSyncでLambdaを呼び出す
- 10. GPSマルチユニットSORACOM Edition 使ってみて、だいたい1ヶ月経ちました。
- 11. API Gateway-lambda DBメンテナンス時はどうする?
- 12. NestJSで特定のサービスのメソッドを直接実行する
- 13. AWS Lambdaのカスタムランタイムを開発する際、失敗したこと
- 14. node.js @line/bot-sdk を使ってAWS lambdaからLINE Messaging APIのpushMessageを使用する時に1時間位右往左往した時の話
- 15. Windows10ProでAWS SAMを使ってローカルでHelloWorld(サンプルはnode.js)
- 16. [fondesk用bot]SlashCommandで表記ゆれに抗う
- 17. Lambdaで使うKinesis Data Streamテストイベントの作成
- 18. Lambdaプロキシ統合でmultipartのフォームデータをパースする
- 19. HTTPクライアントにおけるaspidaという選択
- 20. 日向坂46齊藤京子のバビ語をノーコードかつサーバレスで google home に喋らせてみた
AWS系:Qiitaのタグ統計を浄化するためのタグ詰め合わせ記事
タグだけ
AWS Security Hub のセキュリティ標準チェックが自動で有効化される条件
※ 2020/3/25 時点の挙動を元に記載しているため、今後変更される可能性があります
## Security Hubを有効化する方法によって挙動が異なる
AWS CLI や AWS SDK など EnableSecurityHub API を使用して Security Hubを有効化した場合、
CIS AWS Foundations Benchmark のセキュリティ標準チェックも自動で有効化されます。
2020/2/13 から利用可能になった PCI DSS のセキュリティ標準チェックは有効化されないため
利用者が明示的に有効化する必要があります。
以下の API リファレンスにも記載があります。**AWS Security Hub > API Reference > EnableSecurityHub**
https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_EnableSecurityHub.html> When you use the EnableSecurityHub operation to
AWS Lambda + Python + Slack でサイトの監視・アラート通知
運用中のサイトがたまに落ちていることがあったので、
簡易的にですがサイト監視を用意してみました。
(世の中にはサーバーのメトリクス取得含め手厚い監視サービスが様々ありますが、今回は低コストかつSlackとも簡単に連携できる方法という位置づけで作っています)## サイトのstatusをチェックしてSlackに通知する
では、サイトチェックをするコードを書いていきます。
おおまかな流れとしては、指定されたURLのHTTP statusをチェックし、200以外のサイトがあれば、Slackに通知するというようになっています。
(逆に問題が無ければ、Slackには何も通知されません。テストの際には404ページのURLなどを含めてあげてください。)
全体は以下のようになります。“`health_checker.py
# -*- coding: utf-8 -*-
import requests
import json# 監視したいサイトのURLを配列で指定
urls = [‘https://www.rakuten.co.jp/’]def post_slack_h(c):
AWS Lambdaの例外処理の仕方(同期実行・非同期実行・ストリームベース実行)
### 前置き
本記事は、AWS Lambda(以下、Lambda)のコード内で起きた例外処理の仕方を書きます。つまり、以下で紹介するものは、Lambdaの起動には成功しているという前提なので、起動自体に失敗しているちう人は、別の記事を参照してください。### 概要
Lambdaに限らず、例外処理というのはプログラムにつきものです。何等かの不具合で例外が発生させる場合や、意図して例外を発生させる場合があります。
**Lambdaでも同じように例外処理をするわけですが、Lambdaはイベントトリガーによって例外処理の仕方を変える必要があります!** Lambdaのイベントトリガーについては、以下のようなものがあります。[参考]
AWS Black Belt の AWS Lambda Part1
https://d1.awsstatic.com/webinars/jp/pdf/services/20190402_AWSBlackbelt_AWSLambda%20Part1%262.pdf以下で Pythonプログラムを用いて、簡単例外処理の仕方を紹介したいともいます。
#
Lambda FunctionsをCloudFormationでデプロイするbashスクリプト
Lambda FunctionをCloudFormationでデプロイするときの考え方は、やってみて以下がしっくりきました。
> Lambda関数は別ファイルとして保存し、aws cloudformation packageしてaws cloudformation deployする
> ([CloudFormationでAWS Lambdaを作成・更新する際のベストプラクティス](https://qiita.com/kihoair/items/fe204fc8582946646d07))実際の実施時には、デプロイ後に不要になるS3バケットに置いたソースコードファイルや、中間ファイル的に作成されるテンプレートファイルなどの削除もしているので、それを含めた手順をメモしておきます。またその手順が繰り返し行っているとちょっと手間に思えてきたので、 bash スクリプトにまとめてしまうことにします。
# AWS CLIでのLambda Functionのデプロイ
AWS CLIでLambda Functionをデプロイする手順を確認しておきます(もしスクリプトが使えればいい、動作は分か
Serverless Frameworkのlambdaアプリにカスタムドメインを付与する
[前回作成したLaravelのサーバレスアプリ](https://qiita.com/umihico/items/64fcf159f68ebd866170)にカスタムドメインでアクセスできるようにします。
ACMで証明書を取得します。Route53経由の方はDNS経由で簡単に取得できます。サブドメインはワイルドカードで申請するのみです。
**Lambda関数がEdgeの場合は、`us-east-1`(バージニア北部)のACMである必要があります。東京のACMは関係ありません。**発行済になったら`serverless-domain-manager`のインストールします。[a4e6e25d](https://github.com/umihi
Lambda@Edgeを完全に理解する?♀️
# 何者だお前は
2017年7月17日に正式リリースされたサービス。
[Lambda@Edge の一般提供を開始](https://aws.amazon.com/jp/about-aws/whats-new/2017/07/lambda-at-edge-now-generally-available/)>AWS Lambda にコードをアップロードし、Amazon CloudFront イベント (ビューワーリクエスト、ビューワーレスポンス、オリジンリクエスト、オリジンリクエストなど) によってトリガーされるように設定するだけです。関連するリクエストが CloudFront によって受信されると、ビューワーに近い最適な AWS のロケーションに実行のためルーティングされます。次に、Lambda@Edge はコードを実行し、CloudFront のグローバルなネットワーク間のリクエストのボリュームに応じてスケールします。Lambda@Edge により、コードを実行して各個別のリクエストに基づいてウェブページをカスタマイズし、グローバルに実行されるカスタム認証ロジックを作成して、安全な
Laravelのサーバレス用ライブラリbrefを使い、lambdaでhello world
プロジェクトを作ってから少し手を加えるだけで、Laravelのサーバレス化ができました。
AWS上のデプロイはServerless Frameworkが全てやってくれます。[本家のドキュメントはこちら](https://bref.sh/docs/frameworks/laravel.html)
[Githubはこちら](https://github.com/umihico/laravel-demo)“`bash
composer create-project –prefer-dist laravel/laravel laravel-demo #プロジェクト作成
cd laravel-demo
composer require bref/bref #肝のbrefインストール
“`以下の編集を加えます。[b508b15](https://github.com/umihico/laravel-demo/commit/b508b15edf5d1f0a0a7b51e2360e4f390da3dac1)
“`diff:.env
– SESSION_DRIVER=file
+
AppSyncでLambdaを呼び出す
# AppSyncでLambdaを呼び出す
## はじめに
先日「[API Gatewayでリクエストして、Lambdaで処理させて、AppSyncで受け取る](https://qiita.com/w2or3w/items/227465969ecbbef21787#lambda%E3%81%AE%E4%BD%9C%E6%88%90)」という記事を書きました。この記事のあとがきにも書いたのですが、フロントエンドからLambdaを実行させるために何の迷いもなくAPI Gatewayを利用していたのですが、どうやらAppSyncでも出来そうだぞということで。データソースにDynamoDBを指定しているAppSyncへ、LambdaをデータソースとするIFを追加します。
## スキーマへIFの追加
AppSyncのスキーマに、モザイク処理を実行するためのIFを追加します。
AWSコンソール > AppSync > 目的のAPI > スキーマ
MutationへprocessApplyMosaicという関数、そして入出力用のデータ型を定義します。
入出力用のデータ型はAPI Gatewa
GPSマルチユニットSORACOM Edition 使ってみて、だいたい1ヶ月経ちました。
ソラコムTシャツ欲しいけど、これじゃ貰えないなーって思っている人です。
—
[GPSマルチユニットSORACOM Edition 使ってみた(開封の儀)](https://qiita.com/keni_w/items/f8e78812298093aab9b4)の続きです。GPSマルチユニット SORACOM Edition購入して、約1ヶ月経ちました。
とりあえず行ったことは、**SORACOM Laggon**による可視化、***SORACOM Funk***経由で、AWS LambdaでSlack通知の2つです。### Lagoonによる可視化
とりあえず、オフィスの気温、湿度の可視化をしてます。
とりあえず、平日の10時から19時までの15分置きに加速度を除くデータを送信させてます
API Gateway-lambda DBメンテナンス時はどうする?
下記の構成で、DBサーバをメンテナンスする場合にどうすればよいか?
APIの戻りとしては、エラーではなくメンテナンスのJSONを返却したい。。
--------------------------------
API Gateway → lambda → EC2にインストールした自前のDBサーバ
--------------------------------##考えたこと
API Gatewayでスケジューラでメンテナンスの期間を設定できたら便利だなーと。
その時間になったら設定したメンテナンス用のJSONが返却される。とはいえ、今はないのでどうすればよいか?
考えた方法
APIGatewayのリソースポリシーでAPIへのアクセスをすべて遮断。
アクセス拒否時のゲートウェイレスポンスのJSONをメンテナンス用に変更
そして、デプロイでその後、メンテナンスを終わらせてから、もとに戻す。
こんなところでしょうかねぇ。
以上です。
NestJSで特定のサービスのメソッドを直接実行する
NestJSをLambdaでホストしているとき、特定のサービスのメソッドをダイレクトに実行したい場合があります。
例:cronジョブをCloudWatch Event -> Lambdaで実行する
そういう時はこんな感じのhandlerを作ればOKです。
“`typescript
import {
NestFactory
} from ‘@nestjs/core’
import { Handler } from ‘aws-lambda’// 実行したいサービスのあるモジュール
import {
SiteModule
} from ‘./site.module’// 実行したいサービス
import {
SiteService
} from ‘./site.service’export const handler: Handler = async (event) => {
// Create NestJS application
const app = await NestFactory.create(SiteModule)
AWS Lambdaのカスタムランタイムを開発する際、失敗したこと
# 概要
とある作業にてAWS lambdaで今度はperlを動かすことになりました。
その際、perlのライブラリ`/usr/share/perl5`などが見えなかったり、コマンドが実行できなかったりしたので、いろいろ調べたことをメモしておきます。~~用意されているランタイム使えば余計な苦労しないのにね~~
# 結論
さっさと結論だけ記載すると、以下の環境のカーネルとlibcなどの基本的なライブラリが乗っているものになります。
– Amazon Linux
– イメージ – amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2
– Linux カーネル – 4.14.154-99.181.amzn1.x86_64
– ami-00a5245b4816c38e6注意点として、このイメージは、EC2インスタンスを作るときに、クイックスタートとして表示される、Amazon Linuxのイメージとは別物ということです。
– Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Typ
node.js @line/bot-sdk を使ってAWS lambdaからLINE Messaging APIのpushMessageを使用する時に1時間位右往左往した時の話
https://developers.line.biz/en/reference/messaging-api/#send-push-message
にて“`
const line = require(‘@line/bot-sdk’);const client = new line.Client({
channelAccessToken: ‘‘
});const message = {
type: ‘text’,
text: ‘Hello World!’
};client.pushMessage(‘
‘, message)
.then(() => {
…
})
.catch((err) => {
// error handling
});
“`でいけよ、
みたいに書かれていたので、
自分のパソコンからこれを適宜当てはめたら、
普通にpush出来たので、意気揚々とAWS lambdaで使用したら、
なんかエラー出ていた。connectionが確立されてないよ、
と
Windows10ProでAWS SAMを使ってローカルでHelloWorld(サンプルはnode.js)
# 初めに
Windows10ProでAWS SAMを使ってHelloWorldしようと思ったら意外と大変だったので自分用メモ。
何も入っていない前提ですが、Dockerやnode等が入っている場合は飛ばしてください(特にこだわりがなければこの機会にすべて最新化をおススメします)#### この記事ですること
– node.jsを使ってローカルでHelloWorldする
#### この記事でしないこと
– AWS上にソースをアップロードする
– node.js以外を使ってHelloWorldする# 執筆時の各バージョン
#### GitBash
v2.25.1#### Docker
v2.2.0.4#### node.js
v12.16.1#### aws sam
v0.45.0# 必要なものインストール/設定
### Git for Windowsインストール
[Git for Windows公式](https://gitforwindows.org/)からダウンロードし、インストールする。
(特にチェック付けなくて大丈夫です)### Dockerの
[fondesk用bot]SlashCommandで表記ゆれに抗う
# はじめに
皆さんリモートワークしていますか?慣れてきましたか?
[前回の記事](https://qiita.com/myonoym/items/0541c0e74e0006a71870)で弊社が[fondesk](https://www.fondesk.jp/)を導入し、メンションをつけてくれるbotを開発しましたよというお話をしました。(無事にfondeskは正式採用されたようです。)今回は、メンションをつけるために必要になる、表記ゆれ対策用の辞書を更新するSlash Commandを開発した話です。
# 関連ツール&技術
今回紹介する機能の関連項目です。– Slack
– AWS
– API Gateway
– Lambda
– S3
– Serverless Framework
– Python3.7# 事の発端
前回紹介のbotを導入してから、良い感じにメンションがついているのを喜んでいたのですが、(見ないふりをしていた)事態が勃発しました。そう、表記ゆれです。。田が「た」なのか「だ」なのか、漢字で投稿されるのかカタカナで投稿されるのか等々…少
Lambdaで使うKinesis Data Streamテストイベントの作成
ちょっとメモ。LambdaでKinesis Data Streamのテストイベントを作るときは、「テストイベントの設定」画面でイベントテンプレートに「Amazon Kinesis Data Stream」を選択する。イベントの内容に、それらしいJSONデータが設定される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/78c5dd7f-fd5a-09ea-818c-7d44c9d746c6.png)
ここで `data` に収められているのは、デコードすると “Hello, this is a test 123.” となる文字列なのだけど、実際にはテストをする上でここに任意のデータを入れておきたい。その時は、Pythonでは次のようにbase64変換した文字列を生成する。
1. データをJSON文字列などに変換する(`str`型になる)。
2. データをUTF-8に変換する(`bytes`型になる)。
3. データをbase64エンコードする。例えば、以下のようにす
Lambdaプロキシ統合でmultipartのフォームデータをパースする
ファイル添付とかmultipartで送信されてくることがあるので、そのパース方法。
busboyというライブラリを次のように使うことで実現可能。`event`はlambda関数の入力。
“`
if (event.headers[‘content-type’] && (event.headers[‘content-type’] as string).includes(‘multipart/form-data’)) {
console.log(‘IT IS MULTIPART’);
const input: CreateMeProfileInput = {};
const busboy = new Busboy({
headers: event.headers,
defCharset: ‘utf8’
});
return new Promise((resolve, reject) => {
busboy.on(‘file’,
HTTPクライアントにおけるaspidaという選択
## 概要
– aspidaでaxiosやfetchをラップすると型のサポートが厚くなる
– aspidaを使ったユースケース
– tips等## 背景
近年のWebアプリケーション・フロントエンド開発において、型の付いた言語(主にTypeScript、場合によってはFlow。今回は前者の話)によってJavaScriptを比較的安全に扱えるような開発を試みるケースが増えていることは皆さんもよくご存知の通りだと思います。
型による安全性向上の他にもVSCode等のエディタ補完機能による開発体験の良さや、仕様のコードへの内包化により、保守性と開発速度の両方を上げることに一役買っており、可能な限りフロントエンドはTypeScriptで書いていきたいという気持ちがあります。また、フロントエンドにおける役割の1つとしてHTTPメソッドにより、ブラウザでリクエストを生成 -> サーバーからレスポンスを取得 を通してデータのやり取りをすることが多々あります。
この際によく用いられる、PromiseベースのHTTPクライアントのaxiosではどうしても型による恩恵を受けづらいです。
具体的に
日向坂46齊藤京子のバビ語をノーコードかつサーバレスで google home に喋らせてみた
#はじめに
こんにちは,ぱそきいろ: [@takacpu55](https://twitter.com/takacpu55)と申します.
最近巷でノーコードが流行っているみたいです.
私も流行りに乗ってノーコードのVoiceflowというサービスを使ってgoogle home で開発したので久しぶりに投稿しようと思います.
[ブログ](https://www.takacpu55.xyz/)もやってますので,興味がある方は除いてもらえたらと思います.
「いいね」,ではなく「LGTM」を頂けましたら幸いです.#作ったもの
バビ語メーカーというアプリを作りました.
google home に日本語を喋りかけると,バビ語に変換して読み上げてくれます.バビ語メーカー pic.twitter.com/8UzcnQ7RRD
— ぱそきいろ (@takacpu55)
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた