- 1. AWS Lambda(Node.js)においてmiddyを使ってAmazon RDSに接続する方法
- 2. AWS Systems Manager パラメータストアを使った、AWS Lambda関数を登録して動かしてみる
- 3. AWS Lambdaからコンテナを呼び出してみた。
- 4. AWS LambdaからAWS AppConfigを呼び出してみた
- 5. TwitterAPIをServerlessを使ってLambda + Nodejsで動作させてみた
- 6. VPC内でLambda to Athenaを実現する
- 7. Terraformで、AWS Lambda関数を登録して動かしてみる
- 8. AWS Lambda with EFS で MeCab, NEologd & CaboCha を動かす (2020年7月時点)
- 9. 【サーバーレス初心者向け】Serverless Framework + SwaggerでWeb APIを作る!第1回(全3回)
- 10. Lambda(node.js)とJavaScriptのタイムゾーン
- 11. Serverless Frameworkを使ってsqs+lambda
- 12. 逆引き Serverless Framework events for AWS
- 13. AWSを利用した会員サイトをサーバーレスで実装しました
- 14. SwaggerでLambdaのデバッグ環境を作る(7):AWS S3トリガをデバッグする
- 15. Slack から KING OF TIME に打刻する社内ツールで Rust 入門しました
- 16. AWSハンズオン実践メモ 〜AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン〜
- 17. 基本的なREST-APIをAWSのAPI GatewayとLambdaとDynamoDBで作るための参考サイトまとめ
- 18. Lambda+SAMテンプレートのBlue/Greenデプロイメントで「デプロイの再試行」した際の動作を検証する
- 19. Python + Selenium Chromedirverとserverless-chromeの相性問題
- 20. [Next.js/Vercel]LambdaとDynamoDBでJamstackなアプリを作ってみた
AWS Lambda(Node.js)においてmiddyを使ってAmazon RDSに接続する方法
AWS Lambda(Node.js)において、[middy](https://middy.js.org/)を使ってAmazon RDSに接続する方法を紹介します。
## はじめに
### データベースエンジン
この記事ではデータベースエンジンとしてAurora MySQLを使用している場合の例を示しますが、他のデータベースエンジンの場合も基本的な実装は変わりません。
### プログラミング言語
この記事ではソースコードをTypeScriptで書いているので型定義をインストールしたり型アノテーションを記述したりしていますが、JavaScriptで書く場合は不要です。
### ミドルウェア
middyでRDSに接続するために、[@middy/db-manager](https://www.npmjs.com/package/@middy/db-manager)を使います。
@middy/db-managerでは、データベースクライアントとして[Knex.js](http://knexjs.org/)が使われます。## 接続情報をAWS Secrets Managerで管
AWS Systems Manager パラメータストアを使った、AWS Lambda関数を登録して動かしてみる
# What’s?
前にこんな記事を書いたのですが、環境変数がふつうに見えてしまうことに困っていました。
[Terraformで、AWS Lambda関数を登録して動かしてみる](https://qiita.com/charon/items/19ab5087f7036dafce4b)
「転送時の暗号化に使用するヘルパー」という話もあるのですが、そういえばと思い、設定をAWS Systems Managerのパラメータストアから取得する方法も試してみようかなと。
[AWS Systems Manager パラメータストア](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-parameter-store.html)
AWS Systems Manager パラメータストアを使う場合は、AWS Lambdaの環境変数とは別に設定することになります。
[Lambda 関数のグループに共通の環境変数を設定できますか?](https://aws.amazon.com/j
AWS Lambdaからコンテナを呼び出してみた。
## はじめに
Web APIを提供する際に、Amazon API GatewayとAWS Lambdaを組み合わせて実装するケースがあるかと思います。API Gateway + Lambda 関数で処理を完結するケースもあれば、既に実装されている他のサービスを呼び出して処理を完結させるケースもあるでしょう。今回は、後者、つまり、ALambda関数が他のサービスを呼び出して処理を完結するケース、具体的には、AWS Lambdaが AWS Fargateのタスクで実装されたサービスを呼び出す場合の方法と応答結果について書きたいと思います。ちなみに、2020年8月2日に東京リージョンのAWS Lambdaを使って試した結果であり、仕様について、挙動について解説するものではありません。
## 要約
– Lambda関数から NLB/ALBを経由で呼び出す場合とPriateHostedzoneに登録されたサービス名で呼び出す場合のレイテンシーは大差ない結果となった
– CloudMap経由で呼び出す場合、それだけでCloudMapの応答時間が上乗せされてレイテンシーが大きくなる結果と
AWS LambdaからAWS AppConfigを呼び出してみた
## 1. 初めに
皆さん、AWS AppConfigを利用されていますか? AWS AppConfig は 2019年12月にリリースされた機能で、[こちらのブログ](https://aws.amazon.com/jp/blogs/news/safe-deployment-of-application-configuration-settings-with-aws-appconfig/)が出た際には私は記事を何度も読み直し、一番の売りは何だろう?他のデータストア(例えば、DynamoDBやParameter Store)に設定情報を格納するのと何が違うのだろう?と考えたものです。その AWS App Configについて簡単にご紹介したいと思います。
## 2. 要約
– より安全なデプロイをしたい場合に活用すると効果的
– 設定はアプリ側でキャッシュすることでレイテンシーやAWS サービス利用料の削減につながる
– 設定のリリースにカナリア・リニアデプロイを実現## 3. AWS App Configとは
冒頭にもリンクを付けましたが、AWS AppConfigは、
TwitterAPIをServerlessを使ってLambda + Nodejsで動作させてみた
# 概要
TwitterApiを使ってあれこれしたいと思ったので動かすまでの手順をまとめてみた
Nodejsで作成した理由はなんとなくフロントエンドと同じjavascriptでやれたら楽かなーと思ったぐらいです。# 基本セットアップ
ServerlessやNodejsなどのインストールは以前私が書いた記事ですが、こちらが参考になるかと思います。
https://qiita.com/tama0571046/items/cfe262b002f6434b915eTwitterAPIを使用するまでの流れは記事がたくさんありますので、調べるとすぐに出てくるかと思います。
私が参考にしたサイト
# Serverless
### ServerlessをAWSの連携
まずはAWSにログインして[IAM]の[ユーザー]からアクセスキーとシークレットキーを取得してきてserverlessに教えます“`zsh
sls config credentials –p
VPC内でLambda to Athenaを実現する
# はじめに
VPC内で全体的に終わらせる方法がまとまってなくてめちゃくちゃハマったので、ここでまとめておきます。# 今回のゴール
VPC内にあるAthenaに対してLabmda上からクエリを正常に投げて結果を取得する。
Security面の細かい話はここでは触れないので、ご了承ください。# Athenaを使えるようにする
## Ahtenaの前にS3の準備
AthenaはS3上のファイルに対してSQLを投げれる仕組みみたいな感じのサービスになっています。
なので、まずはS3の準備を行います。と言っても普通にバケットを作成するだけです。
ただし、今回はVPC内で全てを完結させたいので、「パブリックアクセスをすべてブロック」で作成するものとします。## S3のVPCエンドポイントを作成する
S3にVPCから繋ぐにはエンドポイントが必要なので、VPCサービスからVPCエンドポイントを作成します。
この際のVPCには今回閉じ込めておきたいVPCを指定しておいてください(この後特に言及しませんが、VPC指定する際は全てこのVPCを設定してください)。サブネットは分かるまで
Terraformで、AWS Lambda関数を登録して動かしてみる
# What’s?
* はじめてのAWS Lambdaを試してみたい
* AWS LambdaのデプロイはTerraformで行いたいというお題で。
やっておきたいこと、動かし方としては
* AWS Lambda関数は、Terraformでzip圧縮してアップロードする
* AWS Lambda関数からログを出力する
* Amazon CloudWatch Logsへ出力するようにロググループを作成する
* AWS Lambda関数から環境変数を読み込む
* 環境変数の暗号化にはAWS KMSのCMKを用いる
* 動作確認はAWS CLIで行うというところで。
# 環境
今回の環境は、こちらです。
“`shell
$ terraform version
Terraform v0.12.29
+ provider.archive v1.3.0
+ provider.aws v2.70.0$ aws –version
aws-cli/2.0.36 Python/3.7.3 Linux/4.15.0-112-generic exe/x86_64
AWS Lambda with EFS で MeCab, NEologd & CaboCha を動かす (2020年7月時点)
# はじめに
過去に以下のような記事を書きました。
[AWS Lambda で MeCab を動かす (2018年9月時点)](https://qiita.com/rtaguchi/items/e6cb594196fa8186e9a2)この記事で最後に
>「Neologdも入れたかったけれども、Lambdaのtemp領域の制限でアウト。
>(中略)
> そうこう言っている間にLambdaのtemp領域の制限が一気に3GBくらいになってくれないかな。と書いて終わりました。それから約2年。Lambda の temp 領域制限は変わりませんが、代わりに(?)Lambda から EFS にアクセスできるようになりました。これでようやく念願の NEologd を手軽に Lambda 上で動かせるようになりましたので、その方法をまとめます。
まぁ、ホントに EFS に MeCab と NEologd を突っ込むだけなので特別なことはしていません。
# NEologdとは
正式には`mecab-ipadic-NEologd`という名称で、多数のWeb上の言語資源から得た新語を追加すること
【サーバーレス初心者向け】Serverless Framework + SwaggerでWeb APIを作る!第1回(全3回)
# はじめに
こんにちは!
最近、仕事で初めてサーバーレスアプリを作る機会がありました。その際Serverless Frameworkを使ったのですが、結構お手軽にアプリを作ることができたので、初めてサーバーレスをする方にお勧めだと思いました。今回は自分の整理も兼ねてその手順を記事として残したいと思います。
今回はSwaggerをAPI Gatewayのテンプレートの一部として組み込む方法もご紹介したいと思います。
全部で記事が三つと長いですが、サーバーレスが初めての方でもAPIを構築できるように書きましたので、最後までご覧いただけたら嬉しいです。# 今回作るもの
今回は以下のアーキテクト図のようなWeb APIバックエンドを作っていきます。
API GatewayでクライアントからのAPIリクエストを受信し、該当するLambda関数を呼び出し、必要に応じてDynamoDBからのデータ読み出しおよび書き込みを行います。さらに、WAFを適用することでセキュアにします。![slsTestAppArchitect.png](https://qiita-image-store.s3.a
Lambda(node.js)とJavaScriptのタイムゾーン
Lambda(node.js)で日付の計算をしたら思ったより面倒だったのでまとめる。
# やりたかったこと
日本標準時(JST)で先週/先月の範囲を、世界標準時(UTC)で取得したい。
例えば、今日が 2020-07-29 とすると先週の範囲は日曜日始まりでこんな感じ。| タイムゾーン | 開始 | 終了 |
|:-:|:–|:–|
| JST | 2020-07-19T00:00:00+0900 | 2020-07-26T00:00:00+0900 |
| UTC | 2020-07-18T15:00:00Z | 2020-07-25T15:00:00Z |# やりたくなかったこと
大した処理じゃないので余計なライブラリは使いたくない。
# 結論
– タイムゾーンの設定はそのままにプログラム内で対応する
– タイムゾーンオフセット値からJSTを自力で設定する
– UTCへの変換も自力でやる# それぞれのタイムゾーン
## Lambdaのタイムゾーン
UTCに固定されている模様。
ググるとTZ環境変数を設定すればいいという記事が大量にヒットする。
ただ、
Serverless Frameworkを使ってsqs+lambda
# はじめに
仕事でsqs+lambdaを使って非同期処理を実装したので、復習がてら記事にしています。
本当は、 DLQを設定してDLQに入るとCloudWatchからslackに通知を飛ばすという風にしたかったのですが、上手くいかなかったので、追記するか別記事にしようと思います。# Serverless Frameworkからプロジェクトの作成
まず、Serverless Frameworkをインストールします。“`
@ueMac [~/dev]
[ueyuki]-> npm install -g serverless@ueMac [~/dev]
[ueyuki]-> serverless -v
Framework Core: 1.74.1
Plugin: 3.6.15
SDK: 2.3.1
Components: 2.31.11
“`Serverless Frameworkでは、テンプレートを使用してプロジェクトを作成することができます。
今回は、lambdaでgoを使っていくので、goのテンプレートを使用します。“`
@ueMac [~/dev]
[ue
逆引き Serverless Framework events for AWS
最近、既存の lambda を全て Serverless Framework を使って置き換えました。
Lambda は色んな event をトリガーにできるのですが記述方法を毎度ど忘れしてしまい、調べ直すことがあったのでメモを残します。もちろんこれで網羅しているわけではないので気づいたことあればご指摘ください。# serverless.yml
ざっくりと基本構成について。以下のように外部ファイルに値を定義している方法についてはこちらを参照
`${file(../variables-${self:provider.stage}.yml), file(../variables-dev.yml)}`
[Serverless Framework + Kotlin + Gradle で Lambda をデプロイする – Qiita](https://qiita.com/Nabesuke/items/40139ee441a33cb1dcf2#custom)“`serverless.yml
service: my-service # サービス名provider: # 各fun
AWSを利用した会員サイトをサーバーレスで実装しました
AWSを利用した会員サイトをサーバーレスで実装しました。
始めはCognitoとS3でなんとかなるだろうと思っていましたが、
いざやってみるとどうにも思い通りにならず、四苦八苦しました。調べてみると、どうやらCognitoとS3だけでは、S3に対して**ユーザー単位のコンテンツ**にしかアクセスできず、**ユーザー共有のコンテンツ**にはアクセスできないみたいです。(私の調査不足/理解不足かもしれませんが…)
というわけで、以下のAWSの機能を利用して実装してみました。
* S3
* CloudFront
* Cognito
* API Gateway
* Lambda## 処理手順
1. S3に公開フォルダと会員限定フォルダを作成する。
1. S3に対してはCloudFrontを通してアクセスする。
1. S3の会員限定フォルダへは、**CloudFrontの閲覧者のアクセスを制限する機能**のCookieを使用する。
1. Cognitoで認証が成功した場合、認証情報のJWTトークンをAPI Gatewayのオーソライザーで検証する。
1. API Gatewayの
SwaggerでLambdaのデバッグ環境を作る(7):AWS S3トリガをデバッグする
久しぶりの、SwaggerでLambdaのデバッグ環境を作る の拡張です。
第一回の投稿はこちらから:[SwaggerでLambdaのデバッグ環境を作る(1)](https://qiita.com/poruruba/items/e3a46787c79517a815f9)AWS S3にファイルがアップロードされたときにLambdaを起動するスクリプトを書こうと思っても、Lambda上でのデバッグは大変なので、ローカルでデバッグ(実行中のブレイクを入れたり、変数を参照したり)できるようにします。
S3は、本物ではなく、S3互換のMinIOを使います。
今回のローカルデバッグ環境は以下のGitHubに反映済みです。
poruruba/swagger_template
https://github.com/poruruba/swagger_template#MinIOのセットアップ
ほぼこちらに書いてある通りに進めます。
MinIO Quickstart Guide
https://docs.min.io/今回は、Distributed MinIO Quicksta
Slack から KING OF TIME に打刻する社内ツールで Rust 入門しました
とりあえず [The Book](https://doc.rust-lang.org/book/) やってたんですが、座学続けられないタイプなもので 12 章あたりで疲れてしまったので、
もう書いてみるかということで、もともと TypeScript で書いて AWS Lambda で動かしている Slack [Slash Commands](https://api.slack.com/interactivity/slash-commands) で会社の勤怠管理システム [KING OF TIME](https://www.kingtime.jp/) に打刻するプログラムをリプレースしてみました。## インストールしておくもの
– [Rust](https://www.rust-lang.org/)
– [musl-cross](https://github.com/FiloSottile/homebrew-musl-cross)
– [AWS CLI](https://aws.amazon.com/jp/cli/)## とりあえず AWS のドキュメントを参考に Lambda
AWSハンズオン実践メモ 〜AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン〜
# はじめに
AWS公式の[ハンズオンシリーズ](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/?trk=aws_blog)の中から、AWS Lambda と AWS の各種 AI サービスを組み合わせて、**“音声ファイルがアップロードされると文字起こしと感情分析を自動的に行う”** パイプラインを構築する[ハンズオン](https://pages.awscloud.com/event_JAPAN_Ondemand_Hands-on-for-Beginners-Serverless-3_LP.html?trk=aws_introduction_page)を実施しました。
本記事は自身のハンズオン学習メモとして投稿します。
# 目次
– [ハンズオンの目的](#ハンズオンの目的)
– [本編](#本編)
– [おわりに](#おわりに)# ハンズオンの目的
– 音声の文字起こし、およびその感情分析を行うパイプラインをサーバーレスアーキテクチャで構築する
– S3トリガーでLambdaを
基本的なREST-APIをAWSのAPI GatewayとLambdaとDynamoDBで作るための参考サイトまとめ
ゼロからAWSでREST-APIを一気通貫で実装してみましたが、それなりの苦労があったため、次はもっと効率よく作りたいので、参考サイトをまとめておきたいと思います。
# やってみたこと
超シンプルなREST-APIを作ってみました。シンプルですがいろいろ知る必要がありました。+ 一覧は、GETでパスパラメータがあり、パーテーションキーだけ渡す、レスポンスはJSONでBODYが配列
+ 追加は、POSTでパスパラメータがあり、パーテーションキーだけ渡す、リクエスト本文はJSON、レスポンスもJSONでBODYが1件、ソートキーが採番される
+ 更新は、PATCHでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はJSON、レスポンスもJSONでBODYが1件
+ 検索は、GETでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はなし、レスポンスはJSONでBODYが1件
+ 削除は、DELETEでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はなし、レスポンスはJSONでBODYが0件# 参考サイ
Lambda+SAMテンプレートのBlue/Greenデプロイメントで「デプロイの再試行」した際の動作を検証する
# はじめに
デプロイ運用は、Blue/Greenでシームレスにサービス移行できるのも重要だが、デプロイに失敗した際のロールバックと再デプロイをスムースに行えることも重要だ。Canaryなデプロイにおける自動ロールバックについては、[過去の記事](https://qiita.com/neruneruo/items/2e7bf289f375ccc91356)で調査を行ったので、今回は手動ロールバックと再デプロイについての動作検証を行う。
なお、最初に断っておくと、この方法は結果的に期待した動作になっているが、途中でエラーが出たりして怪しさ満点である。もう少しちゃんとした検証が必要かもしれない。
# 前提条件
– Lambda+SAMテンプレートでの基本的な動作の仕様を理解している([過去の記事](https://qiita.com/neruneruo/items/73906cdc3c2aa699644f)で紹介済み)
– デプロイは以下の仕様とする
– Prodのエイリアスを使用してCanaryの向き先を制御する(SAMテンプレートで“`AutoPublishAlias: P
Python + Selenium Chromedirverとserverless-chromeの相性問題
# 環境
AWS SAM + Python 3.7
AWS LambdaのAmazon Linuxコンテナ上で動作。# 動作を確認できた組み合わせ
“`
serverless-chrome 1.0.0.37 + Chromedriver 2.37 + Selenium 3.141.0
“``chrome_options` ではなく `oputions` にセット。
“`python:
from selenium import webdriver
from datetime import datetimeCHROME_DRIVER_PATH = “/opt/python/bin/chromedriver”
HEADLESS_CHROMIUM_PATH = “/opt/python/bin/headless-chromium”def lambda_handler(event, context):
options = webdriver.ChromeOptions()
options.binary_location = HEADLESS_CHROMIU
[Next.js/Vercel]LambdaとDynamoDBでJamstackなアプリを作ってみた
## 概要
– 以前にQiitaの前日のいいね数を通知してくれるLINE Botを作りました
– [Qiitaのいいね数を通知してくれるLINE Botを作ってみた](https://qiita.com/ozaki25/items/03b834de8c0c175d955d)
– この延長でいいね数の推移をグラフで表示するWebページを作ってみたというのが今回の内容です
– せっかくなので技術検証も兼ねてJamstackな構成で作ってみました
– 前述の記事の通りデータはDynamoDBにデータを蓄積しているのでHeadlessCMSなどは使わずにチャレンジしてみます## 作ったもの
– 直近1週間のいいね数をグラフで表示するWebアプリをLIFFアプリとして表示しています
![Screenshot_20200726-014511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175213/a656b608-38c1-afa4-52ac-1428c92e63a8.png)