- 1. lambda 関数作るとき【完全自分用メモ】
- 2. Cloud9でLambdaレイヤーをサクッとつくる(スクレイピング環境構築
- 3. API Gateway + Lambda + S3で音楽ファイルのタグ情報を取得するアプリを作成する
- 4. Notion API + LINE + AWS Lambda他でメモ内容をLINEにしゃべらせる
- 5. Chalice with DynamoDB
- 6. Lamda作成テンプレートCloudFormation
- 7. LocalStackを用いたKinesisをトリガーとしたLambda実行
- 8. AWS Cloud9を使ってGoのコードをLambdaにデプロイする
- 9. Amplify CLIを使って、ローカルで実行&AWSにデプロイ
- 10. CloudWatchAlarmのアラーム発動時間をスケジューリングしました。(EventBridge + Lambda + CloudWatch)
- 11. Lambda(SAM)からAmazon SNSトピックへpublishを行う方法メモ
- 12. Amplify FunctionsをTypeScriptで書く
- 13. 【AWS】LambdaからCognitoユーザーを削除する
- 14. LINE + AWS Lambda + API Gateway でおうむ返しBotを作る
- 15. さっくり解説するAWS Lambda
- 16. aws-nodejs-typescriptのテンプレートを使ってみる
- 17. API Gateway + Lambdaを設定して、ブラウザから関数を呼び出せるようにする。
- 18. Lambdaで当日との日付の差分を算出する [ Node.js・Python ]
- 19. Workload Identityを使用してAWS LambdaからBigQueryにキーレスで接続する
- 20. SAM CLI + DynamoDB Local 環境構築手順メモ
lambda 関数作るとき【完全自分用メモ】
### 1. 概要
lambda関数作成するとき、忘れてググるやるまとめる
### 2. 目次
– [1. 概要](#1-概要)
– [2. 目次](#2-目次)
– [2.1. layer の追加](#21-layer-の追加)
– [3. 参考](#3-参考)#### 2.1. layer の追加
1. `pip install -t {dir_name} {package_name}` でパッケージをdir_nameにインストールする
* dir_name を python にする事で、lambda関数内でパスを指定する必要がなくなる
2. `zip -r9 layer.zip python` で zip化する
3. AWS コンソールからレイヤーの作成→zipをアップロードする
4. arn を取得し、レイヤーの追加でarnを指定する### 3. 参考
* [Lambda レイヤーの作成と共有](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.htm
Cloud9でLambdaレイヤーをサクッとつくる(スクレイピング環境構築
# はじめに
Lambdaでスクレイピングしたいですよね。じゃあChromedriverにSeleniumいるね。
そして取得したデータ、良い感じに取りまとめしたいですよね。じゃあBeautifulsoupとかPandasいるね。
という感じで、ピュアではないライブラリやドライバが欲しくなることが多々あります。で、Lambdaレイヤーつくるかあ。となるのですが
Winで落としてきたChromedriverはそのままでは動かなかったり,
ローカルで作ったzipもレイヤーに上げようとすると「AmazonLinux以外お断り!」とか怒られたりするわけです。
もう全部AWS上で完結してしまいたい。となってAWS経済圏に入り込むわけです。
商売上手(for 開発下手)。# AWS Cloud9の活用
ということでペアプログラミングでお世話になることの多いCloud9を使います。
それにしてもAWSのサービス名はおしゃれですね。クラウド使って最高にハッピー(Cloud nine)になるだって。AWS Cloud9にアクセスをして,
↓Create Environmentして…
![
API Gateway + Lambda + S3で音楽ファイルのタグ情報を取得するアプリを作成する
ローカルに持っている音楽ファイルのタグ情報(曲名・アーティスト名・アートワーク)を取得する簡単なアプリケーションを作成したので、実装の流れを記事にまとめます。
今回はAWSの学習も兼ねて、API Gateway、Lambda、S3(Presigned URL)を組み合わせて実装してみました。タグ情報の抽出には、mutagenというPythonライブラリをLambda内で用いています。* この記事では主に実装の流れを説明していますが、Presigned URL(以下署名付きURL)、mutagenについても軽く説明しています。
* 機能実装の流れをわかりやすくするため、セキュリティ面の処理の実装を一部省いています(実際は許可されたユーザーだけがAPIエンドポイントにアクセスできるようにする必要があるなど)。そのため、あくまで練習用だと思ってください。#目次
– 実装機能の構成
– 音楽ファイルをS3にアップロードする
– 署名付きURLとは
– S3バケットの作成
– ロールの作成
– Lambda関数の作成
– API Gatewayの作成
– クライ
Notion API + LINE + AWS Lambda他でメモ内容をLINEにしゃべらせる
# 野望
相も変わらずNotionをDBに用いたLINE Bot的なものが作りたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/7acc353d-96ab-d5a0-8a5d-289b8e41e0c0.png)# 前回のあらすじ
Notion APIの前にまずはLINE Messaging APIの検証から始めました。
どうやら用意したLINE公式アカウントで受信したテキストをもとに応答をすることができるようになったっぽいです。
https://qiita.com/DJROU/items/900e3c32b87b5d43d8ed# 今回やったこと
いきなりNotionを繋げて読み込みと書き込みをできるようにするのは荷が重いので、LINE公式アカウントに対してユーザが送ったテキストをNotionで検索した結果を返せるようにしました。
指定したDBのキーに対する値がゲットできるところまでのお試しです。![image.png](https://qiita-im
Chalice with DynamoDB
## この記事の目的
この記事の目的は、AWS製のサーバーレスフレームワークChaliceとDynamoDBを組み合わせて利用する手順を個人的なメモとして記すことです。
以下の内容を含みます。
– Chalice, DynamoDBともにAWS上で利用します
– Chalice, DynamoDBLocalを用いてローカルマシンでも利用します(長くなるので次回投稿にします)以下の内容はカバー出来なかったので今後の課題とします。
– ローカル環境でのIDEを利用したデバッグ
– DynamoDB構築のCDKなどの利用(今回はaws-cliコマンドで実行)
– ユニットテスト## 前提事項
以下のインストールについては済んでいるものとします。
– Python3
– chalice
– aws-cli
– docker-composeちなみに、私の環境は以下のようになっています。(2022/1/24時点)
– Python 3.9.7 (pyenv利用)
– chalice 1.26.4
– aws-cli 2
Lamda作成テンプレートCloudFormation
# はじめに
他のAWSサービスに対して自動操作ができるかなど、試しにLambdaを作ってみる際に、都度IAMロールやログの管理を考慮するのが面倒と感じていました。
なので、必要最小限のリソースをCloudFormationで作ることで、削除時にまとめて消せるようにしました。# CloudFormation
各部分の解説をし、全体は最後に記載します。
## パラメータ
“`
Parameters:
LambdaFunctionName:
Type: String
“`
`Type: AWS::Lambda::Function`ではFunctionNameは任意ですが、本番使用の関数作成時も想定して、名前を付けられるようにしました。## ロググループ
対象のLambda関数の出力先ロググループを作成します。“`
FunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub “/aws/lambda/${LambdaFunctionN
LocalStackを用いたKinesisをトリガーとしたLambda実行
* LocalStack上で動作するKinesisへのレコード登録をトリガーとしてLambdaを起動し、LambdaからDynamoDBへレコード登録を行う方法についてメモする。
## 構成
![kinesis-trigger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/fb89f035-75f4-e38c-492d-6b74c842b769.png)
## Kinesis準備
* ストリーム作成
“`shell
aws kinesis create-stream –stream-name test-stream –shard-count 1 –endpoint-url http://localhost:4568 –profile localstack
“`* ストリーム確認
“`shell
aws kinesis describe-stream –stream-name test-stream –endpoint-url http://local
AWS Cloud9を使ってGoのコードをLambdaにデプロイする
# はじめに
久々に投稿するのですが、学生時代に投稿した昔の自分のQiitaが(意味不明で)可愛いですね。今回Cloud9を触ってみたので、「Cloud9でGoのコードを書き、それをLambdaにデプロイするまで」を書いていきたいと思います。
# 目次
– Lambdaの作成
– Cloud9の作成と使い方
– Cloud9からLambdaにGoコードをデプロイ
– デプロイしたLambdaを実行する
– Cloud9を使ってみた所感# Lambdaの作成
まずはLambda関数を作成しておきます。
手動で作ったのですが、そういえばCloud9の中からcliで作れるのでしょうか。関数名は`cloud9-demo`にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347108/03661b31-bae4-2735-8bb3-871b0fc5c99e.png)今回はデモ用に作成したので、
– メモリは512MB -> 128MB
– 最大時間は15秒 –
Amplify CLIを使って、ローカルで実行&AWSにデプロイ
Amplify CLIを使って、REST APIや静的コンテンツのサーバを立ち上げます。
ローカル環境で実行・デバッグして確認したのち、AWS上にデプロイ・実行します。ローカル環境でのデバッグには、node.jsとVisual Studio Codeを使います。
AWS上には、API Gateway、Lambda、S3を使います。
上記の橋渡しに、Amplify CLIを使います。今回使うのは、AmplifyではなくAmplify CLIです。
なぜこのような言い方をしているかというと、Amplifyは、いろいろ自動化してくれているのですが、何をしているかよくわからないので、長期的にメンテナンスがしづらく、バグに遭遇する可能性もあるためです。
なので、Amplify CLIを使って、API Gateway、Lambda、S3を一つ一つ作っていきます。それと、Amplifyで構築すると、今までS3やAPI Gateway、Lambdaにばらばらで分散していたパーツ群がAmplifyに集約されるので、まとめてみやすくなります。
目指す形は以下の通りです。
![image.p
CloudWatchAlarmのアラーム発動時間をスケジューリングしました。(EventBridge + Lambda + CloudWatch)
#はじめに
こんにちは、山田です。
今回は、CloudWatchAlarmのアラーム発動時間をスケジューリングしました。#構成図
EventBrigdeにて、CloudWatchAlarmを無効/有効化する時間帯をスケジューリングする。
Lamandaにて、時間になったら、CloudWatchAlarm無効/有効化アクションを実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1096361/686c6f7c-fea9-a093-84ff-8aafd5422b9c.png)#Lambdaの作成
① AWS管理コンソール -> Lambda -> 関数 -> 関数の作成をクリックする。② 関数名を入力する。
※今回は`「CloudWatchAlarm-enable-action」`と`「CloudWatchAlarm-disable-action」`としました。③ 使用する言語は`Python3.8`を選択する。
④ 設定 -> アクセスの権限 -> 実行ロール
Lambda(SAM)からAmazon SNSトピックへpublishを行う方法メモ
* LocalStack上で動くAmazon SNSのトピックに対して、AWS SAM CLIで動くLambdaからpublishを行う方法をメモする。
## 構成
![sam-sns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/ede9f228-fef0-f12c-76cc-62a82f1aefe6.png)## LocalStack準備
* `docker-compose.yml`
“`yaml
version: “3.8”
networks:
container-link:
name: docker.internal
services:
localstack:
container_name: “${LOCALSTACK_DOCKER_NAME-localstack_main}”
image: localstack/localstack
ports:
– “127.0.0.
Amplify FunctionsをTypeScriptで書く
早速`amplify add function`していく。
“`:console
❯❯❯ amplify add function
? Select which capability you want to add:
❯ Lambda function (serverless function)
Lambda layer (shared code & resource used across functions)? Provide an AWS Lambda function name: function名
? Choose the runtime that you want to use: (Use arrow keys)
.NET Core 3.1
Go
Java
❯ NodeJS
Python? Choose the function template that you want to use: (Use arrow keys)
CRUD function for DynamoDB (Integration with API
【AWS】LambdaからCognitoユーザーを削除する
LambdaからCognitoユーザーを削除することがあり、少し手間取ったので残しておきます。
## 前提
– **Cognitoの削除が可能なポリシーをLambdaのロールにアタッチしていること。**
– ※今回はAWS管理ポリシーの AmazonCongitoPowerUser をLambdaのロールにアタッチしています。
– LambdaのランタイムはNode.js 14.x です。## Lambdaのコード
“`javascript:index.js
let aws = require(“aws-sdk”);exports.handler = async (event) => {
// eventから削除するCognitoユーザーのユーザー名リストを受け取る
let userNameList = event.userNameList;// Cognitoユーザーの無効化メソッドをコール
await disalbeCognito(userNameList);const response = {
LINE + AWS Lambda + API Gateway でおうむ返しBotを作る
# 野望
・インターフェース:LINE公式アカウント
・処理:AWS Lambda(+API Gateway)
・DB:Notion
として簡単なツールを作ろうとしています。イメージはこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/35a9401a-055e-9151-b992-e381700d741f.png)
# 今回やったこと
まずはLINE公式アカウントに対する投稿の取得とLambdaでのLINE Messaging API動作検証のため、投稿した内容をそっくりそのまま返すおうむ返しBot的なものを作りました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/40233e98-ac4e-3f51-5010-c4adf4a3f354.png)
# 前提
・LINE Developersでユーザ登録を実施し、公式アカウントを作成している
さっくり解説するAWS Lambda
#はじめに
私自身、業務で3年ほどAWS Lambdaを触っていますが、
まだまだ知らないことも数多くあり、自身の復習も兼ねて、
少し用語が多く難しいかもしれませんが、初心者にもなるべく分かりやすく解説してみようと思います。
※この記事には、私の独断と偏見が多少含まれています。#AWS Lambdaとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392337/2f46cec1-8287-36a1-866f-ccfe79a20dfc.png)
公式ドキュメントによると、
>Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。Lambda は可用性の高いコンピューティングインフラストラクチャでコードを実行し、コンピューティングリソースの管理をすべて担当します。これにはサーバーおよびオペレーティングシステムのメンテナンス、容量のプロビジョニングおよびオートスケーリング、コードのモニタリングおよびログ記録などが含まれます。
aws-nodejs-typescriptのテンプレートを使ってみる
## はじめに
業務でServerlessFrameworkを触ることがあり、typescriptのテンプレートを使用すると
`serverless.yml`から`serverless.ts`になったことやビルドツールが`webpack`から`esbuild`になったことにより詰まったので、シェアできればと思い、まとめてみます。## Serverless Frameworkとは
Serverless Frameworkとはなんでしょうか?
https://github.com/serverless/serverless によると、>The Serverless Framework – Build applications on AWS Lambda and other next-gen cloud services, that auto-scale and only charge you when they run. This lowers the total cost of running and operating your apps, enabling you to
API Gateway + Lambdaを設定して、ブラウザから関数を呼び出せるようにする。
# 目的
AWS外のサービスからURL形式でLambdaを呼び出せるようにAPI Gatewayの発行とLambdaの統合をしました。# 前提
AWSアカウントを有しており、コンソール上で操作ができること。# やったこと
①適当なLambdaの作成
②API Gatewayの発行とLambda統合# ①適当なLambdaの作成
AWSコンソール > Lambda にて関数の作成を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/865f24af-71ba-8f97-d5c9-34f3bee156a1.png)今回はNode.jsで適当なLambdaを作るだけなので「一から作成」とNode.jsのバージョンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455207/5752a4a4-23a1-cd11-f7d3-115940b3a258
Lambdaで当日との日付の差分を算出する [ Node.js・Python ]
#はじめ
Lambdaで、当日の日付を`20220116`の形にし、5日後の日付`20220121`を引くと、`5`という数字が出せるようにすることを目的として、Lambdaを作成したため、まとめます。#Lambdaコードの流れ
###当日の日付
1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
– ↓UTCをJSTに変換する
2. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
– ↓タイムスタンプに変更
2. 1642765665851
– ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
2. 20210116###5日後の日付
1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
– ↓日付を5日進める
1. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
– ↓UTCをJSTに変換する
2. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
– ↓タイムスタンプ
Workload Identityを使用してAWS LambdaからBigQueryにキーレスで接続する
# はじめに
AWS LambdaからBigQueryに接続し、その結果を使って後続の処理を行いたい場合、Lambda上にGCPのサービスアカウントの認証キーを配置することで可能になりますが、認証キーの発行やLambda上への配置はできればしたくありません。そういった時に便利なのが、GCPのWorkload Identityです。
https://cloud.google.com/blog/ja/products/identity-security/enable-keyless-access-to-gcp-with-workload-identity-federation
この方法では、GCPのサービスアカウントとAWS等のロールを紐付け、サービスアカウントの権限を借用して認証することができます。
今回はこの方法でLambdaからBigQueryに接続する方法を確認して行きます。
# 実行準備
以下は作成済みである前提で進めて行きます。– GCP側
– プロジェクト
– BigQueryにについて操作可能なGCPのサービスアカウント
– Big
SAM CLI + DynamoDB Local 環境構築手順メモ
* SAM CLIとDynamo DB Localを使用してローカル環境でサーバーレスアプリを構築する手順についてメモする。
## 前提条件
* Docker、docker-composeインストール済みであること。
* dynamodb-admin(DynamoDB GUIツール)インストール済みであること。[インストール手順](https://qiita.com/KWS_0901/items/5768bafe84cf86766645)
* SAM CLIインストール済みであること。
* ディレクトリ構成
“`shell
local_app – dynamodb — docker-compose.yml
| |_ docker – dynamodb
|_ sam-app
“`## 構築手順
### DynamoDB Local準備
1. `docker-compose.yml`準備
“`yaml
version: ‘3.8’
services:
dynamodb-local: