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

Lambda関連のことを調べてみた2020年08月07日
目次

Amazon CloudWatchロググループ保持期間をAWS Lambdaで管理しよう

こんにちは、stremapackのrisakoです。
長い梅雨が明けて夏がやってきましたね:sunny:
コロナに気をつけながら、マスクで熱中症にならないようにもっと注意が必要ですね:mask:
今年の夏は体調管理に気をつけて過ごそうと思います。
#今回したいこと
今回のテーマは「Amazon CloudWatchロググループ保持期間をAWS Lambdaで管理しよう」です!
Amazon ECSやAWS Lambda(以下Lambda)を使っていると、Amazon CloudWatch(以下CoudWatch)にログが溜まり続けてしまいます。
しかも、CloudWatch LogGroupの保持期間はデフォルトで「失効しない」に設定されるため、永遠にログが残り続けてしまい金額も増えてしまいます。今回は、金額を少しでも抑えるために、新規作成されたロググループの保持期間を自動で「1ヶ月」に変更する仕組みをLambdaで入れてみたいと思います!

#今回のアイテム
– IAM role
– IAM policy
– Amazon CloudWatch LogGroup
– AWS Lam

元記事を表示

【AWS】API Gateway Lambdaオーソライザー「User is not authorized to access this resource」エラーの原因と対応

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312085/322187ad-6ff5-1eb3-5044-8c2e12891a23.png)

上記のようなAPIGatewayで構築したAPIにLambdaオーソライザーを適用した際に、正しい認証情報、正しいAWSリソースへのアクセス権限を設定しているにも関わらず「**User is not authorized to access this resource**」エラーが発生することがあります。
本記事ではその原因と対応を記載します。

## 原因
**Lambdaオーソライザーから返却される認可情報のキャッシング**が原因です。

以下のようなアクセスポリシーを返却するコードを記述した際に発生します。

“`node.js

statementOne.Action = ‘execute-api:Invoke’;
statementOne.Effect = ‘Allow’;
// ↓ 以下のアクセス承認するリソースを

元記事を表示

Zoomのミーティング入退出のwebhookをLambdaで受け取るAPIの下調べをした (1)

会社のハッカソンでZoomのAPIを使ったサービスを作ろうとしているので、その下調べを行った。

# Zoom API 認証

使えそうなものとして、JWT トークンか OAuth 2.0 が用意されている。
すぐに使えるJWTトークンは画面に表示されるものを使った。

会社のco.jp ドメインで登録されているzoomユーザーは、会社アカウント配下にあり、その場でJWTトークンを取得することができなかった(appの作成権限がなかった)ため、別途個人のGmailでユーザーを作って appを作成し、JWTトークンを入手している。

# Webhook のURLを用意する

お手軽に API Gateway + Lambda のAPIを作る事ができるフレームワークである **Chalice** を選択した。手間のかかる権限周りの設定もAPI Gatewayの設定もほとんど意識することなく、関数を書いて deployコマンド一発で諸々をデプロイしてくれるのでとてもお手軽です。

Chalice
https://github.com/aws/chalice

デプロイされたら、REST AP

元記事を表示

[AWS] CDKで、API Gateway + Lambda + DynamoDBなサンプルを作成してみる

# はじめに

以前投稿した「[[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool/items/5b0fe520f6f28fb5b4bc)」のCDK版だと思ってください。

# CDKとは?
AWS Cloud Development Kitで。クラウドアプリケーションリソースをモデル化、およびプロビジョニングするためのフレームワークです。
SAMは、Serverless Applicationに重きを置いたフレームワークだったのに対し、CDKはIaC(Infrastructure As Code)の要素が強い開発フレームワークということになります。
さらに特徴的なのは、それをYAMLやJsonではなく、複数の言語で記述できる、ということです。

## 対応言語
以下の言語に対応しています。

– JavaScript
– TypeScript
– Python
– Java
– C#

## 前提条件

元記事を表示

API Gateway + Lambdaのマルチリージョン構成をServerless Frameworkで作る

# 概要
Amazon API Gateway + AWS Lambda で作るサーバーレスなアプリケーションを、マルチリージョン構成にする。
普段から使っているServerless Frameworkで構築してみた。

# 参考
以下のAWSブログの記事が参考になる。記事自体は古いが構成は変わらない。

[Building a Multi-region Serverless Application with Amazon API Gateway and AWS Lambda](
https://aws.amazon.com/jp/blogs/compute/building-a-multi-region-serverless-application-with-amazon-api-gateway-and-aws-lambda/)

# 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241369/d688f2de-348f-0872-2c08-4275efa9e15f.png)

元記事を表示

AWS Lambda+API Gateway+DynamoDBでCRUD APIを作るのをGolangでやってみた

# この記事について
Developers.IO 2020のサーバーレスセッションに触発されました。
[[動画公開] 初めてのサーバーレスアプリケーション開発 #devio2020](https://dev.classmethod.jp/articles/devio2020-first-serverless-application/)

というわけで、Golangを用いてAWSで基本的なサーバーレスをやってみたその手順をまとめました。
具体的には以下の手順を紹介します。

1. GolangでLambdaを動かしAPI Gatewayと連携させる
2. LambdaとDynamoDBと連携してAPIを作る

## 使用する環境・バージョン
– OS : macOS Mojave 10.14.5
– Golang : version go1.14 darwin/amd64

## 読者に求める前提知識
Golangの基本的な文法がわかること。

# Lambda関数の作成
## コンソールで関数を作成
AWS Lambdaのコンソールを開くと、以下のような画面になります。

元記事を表示

Amazon Cognitoの認証情報をAmazon API Gateway+AWS Lambdaで取得

Goで取得してみます。

APIGatewayの統合リクエストで **Lambdaプロキシ統合の使用** にチェックを入れてください。

Go側では、“` github.com/aws/aws-lambda-go/events “` の “` events.APIGatewayProxyRequest “` で受け取ります。
下記のように取れます。

“`go
func handler(ctx context.Context, req events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error) {
claims := req.RequestContext.Authorizer[“claims”].(map[string]interface{})
res := &events.APIGatewayProxyResponse{
StatusCode: 200,
Body: claims[“cognito:username”].(string),
}
return res

元記事を表示

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 AppConfigとは
冒頭にもリンクを付けましたが、AWS AppConfigは、A

元記事を表示

TwitterAPIをServerlessを使ってLambda + Nodejsで動作させてみた

# 概要
TwitterApiを使ってあれこれしたいと思ったので動かすまでの手順をまとめてみた
Nodejsで作成した理由はなんとなくフロントエンドと同じjavascriptでやれたら楽かなーと思ったぐらいです。

# 基本セットアップ
ServerlessやNodejsなどのインストールは以前私が書いた記事ですが、こちらが参考になるかと思います。
https://qiita.com/tama0571046/items/cfe262b002f6434b915e

TwitterAPIを使用するまでの流れは記事がたくさんありますので、調べるとすぐに出てくるかと思います。

私が参考にしたサイト

2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説

# 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の

元記事を表示

OTHERカテゴリの最新記事