- 1. FlutterとAWSで始めるサービス開発 (8)Cognitoの認証情報を使ってAPIを呼び出す
- 2. 【今日から始めるAWS】LambdaでLINEのbotをつくる
- 3. AWSサーバレス環境でSPARQLエンドポイントを作ろうとしたが上手くいかなかった話
- 4. 毎朝5時にGoogle Formに自動回答したい
- 5. AWS SAMとStepFunctionでAthenaの集計処理を自動化する
- 6. AWS CDKでurl短縮サービスをサーバーレスで作ってみた
- 7. Amazon CloudWatchロググループ保持期間をAWS Lambdaで管理しよう
- 8. 【AWS】API Gateway Lambdaオーソライザー「User is not authorized to access this resource」エラーの原因と対応
- 9. Zoomのミーティング入退出のwebhookをLambdaで受け取るAPIの下調べをした (1)
- 10. [AWS] CDKで、API Gateway + Lambda + DynamoDBなサンプルを作成してみる
- 11. API Gateway + Lambdaのマルチリージョン構成をServerless Frameworkで作る
- 12. AWS Lambda+API Gateway+DynamoDBでCRUD APIを作るのをGolangでやってみた
- 13. Amazon Cognitoの認証情報をAmazon API Gateway+AWS Lambdaで取得
- 14. AWS Lambda(Node.js)においてmiddyを使ってAmazon RDSに接続する方法
- 15. AWS Systems Manager パラメータストアを使った、AWS Lambda関数を登録して動かしてみる
- 16. AWS Lambdaからコンテナを呼び出してみた。
- 17. AWS LambdaからAWS AppConfigを呼び出してみた
- 18. TwitterAPIをServerlessを使ってLambda + Nodejsで動作させてみた
- 19. VPC内でLambda to Athenaを実現する
- 20. Terraformで、AWS Lambda関数を登録して動かしてみる
FlutterとAWSで始めるサービス開発 (8)Cognitoの認証情報を使ってAPIを呼び出す
# はじめに
「[(5)AWS Cognitoでログイン](https://qiita.com/makotomi/items/a0b05e8819270072780b)」や、「[(7)AWS Cognito Googleでログイン](https://qiita.com/makotomi/items/e7ee81006a9505d468a0)」で、Cognitoを使ったログイン処理を一通り実装完了しました。今回はそれら認証情報がないと呼び出せないAPIを実装していきたいと思います。前回まででCognito ユーザープールからID Tokenを取得するところまではできています。APIを呼び出すために、ID Tokenを要求し、それを検証してから実行するAPIを作っていきます。つまり、ログインした場合だけサービスのAPIを呼び出せるというモデルを実現するための構成です。認証した上でさらに特定の権限を持っているユーザーだけが利用できるといったAPIも考えられますが、今回はそこまでは踏みこみません。# 参考文献
– 公式サイト
– [サインイン後に API Gateway および La
【今日から始めるAWS】LambdaでLINEのbotをつくる
#はじめに
30代未経験からエンジニア転職をめざすコーディング初学者のYNと申します。お読みいただきありがとうございます。
コーディング初学者にとってのAWS入門といえば`Lambda`!、サーバレスアプリを作ろう!、ということでメッセージをオウム返ししてくるLINEのbotをつくりました。
下記参考記事をそのままコピーした内容になってしまったのですが、学習ログとして投稿させていただきました。* [LambdaではじめてのLINE Botを作る](https://dev.classmethod.jp/articles/lambda-line-bot-tutorial/#toc-2)
* [AWS Lambdaを使ってLINEBotを作ってみよう!](https://qiita.com/shinbunbun_/items/ae09364504002d0c25f1)#今回やったこと
下記のように、こちらが送ったテキストメッセージをそのまま返答してくれる、オウム返しbotを作ります。
AWSサーバレス環境でSPARQLエンドポイントを作ろうとしたが上手くいかなかった話個人的に[SPARQLエンドポイント](https://ja.wikipedia.org/wiki/SPARQL)を作るときに、運用やメンテナンスが楽になればということでサーバレスでSPARQLエンドポイント作れないかと思い、AWSのサーバレス環境での構築に挑戦してみました。
結論から言うと、ちゃんと動きましたが、期待してたよりもうまくいきませんでした。
一応今回使ったコードは以下で公開していますが、利用される場合は以下を最後まで読まれることをお勧めします。
## 環境
– [AWS Lambda](https://aws.amazon.com/jp/lambda/)
– [Amazon API Gateway](https://aws.amazon.com/jp/api-gateway/)
– [Amazon Cloudfront](https://aws.amazon.com/jp/cloudfront/)Lambda と API Gatew
毎朝5時にGoogle Formに自動回答したい
みなさんこんにちは。夏ですね。
僕もついに部活動が再開し、ワクワクドキドキな訳ですが、一昨日の夜顧問からこんな連絡がきました。“`
– 毎朝5時20分までに検温を行い、結果をGoogleFormから報告してください
– 報告がなかった部員は朝練の参加を認めません
“`そもそも朝練が6時半から始まる時点でイッているので5時20分に連絡しろと言われてもさほど驚かなかったのですが、ここで一つ問題が発生しました。
というのも僕は普段朝5時に起き、そのままパンをかじりながら自転車で駅に向かうので、検温をする時間がないのです。もう少し早起きすれば済む話なのですが、4時起きは流石にきついし体がもたないのでやりたくない。かといって5時に起きて検温なんかしていたら朝練そのものに遅れてしまう。というわけで、朝5時くらいに、心配されない程度の体温をよしなに指定のFormに入力して送信してくれるプログラムを作りたいと思います。
## Seleniumでフォームを送信する
本物のフォームを使ってやると僕の身元がバレてしまうので、今回は[テスト用に僕が作成した本物と同じ内容のフォーム](http
AWS SAMとStepFunctionでAthenaの集計処理を自動化する
AWS SAMを見ていたら `AWS::Serverless::StateMachine` というStepFunctionのコンポーネントがあったので、それを使ってAthenaの集計処理を実装してみた。
実際は集計期間に応じて処理を分岐してリトライ間隔など調整できるようにしたが、ここではシンプルにした。# 余談:VSCode + AWS Toolkit
`*.asl.json` ファイルを編集するとlintやグラフの描画をリアルタイムに行ってくれるので便利だった。
できれば `Fail` タスクはもっと軽く扱って欲しい。![vscode+stepfunction](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379/6021521f-0099-c585-5e66-cbfecdb37f51.png)
# やりたいこと
下記の5タスクをステートマシーンにした。
この処理を週次/月次で実行する。1. 集計期間の計算
1. Athenaへのクエリー
1. クエリー進捗の確認/待機
1. クエリー結果の
AWS CDKでurl短縮サービスをサーバーレスで作ってみた
長い長いリンクを共有する際に短縮したいねということがあったので、いろいろ調べた結果、いくつかのチュートリアルが見つかりました。
[AWS Cloud Development Kit(CDK)でURL短縮サービスを作ってみた](https://dev.classmethod.jp/articles/implement-url-shorten-service-with-aws-cdk-python/)
[自社で使えるURL短縮サービスを低コストにサーバーレスで構築した話](https://engineer.retty.me/entry/2019/05/31/120000)
一旦後者のチュートリアルで作成したものの、CloudFrontのカスタムドメイン設定がどうにもうまくいかなかったのとコンソールをポチポチするのに嫌気がさしたので、前者のチュートリアルをベースにカスタマイズするという結果になりました。# 作成の流れ
* aws cdkのセットアップ
* CloudFormationのstackの作成
* カスタマイズ# cdkセットアップとチュートリアル
[AWS CDKとは](h
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/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