- 1. Layer付きのAWS Lambda functionをServerlessFrameworkでローカル実行するとLayerが参照できない
- 2. AWS StepFunctionsで、クロスアカウント でAWS Lambdaを呼び出す
- 3. AWS IoT CoreとAWS Lambdaを連携して温度データをslackに送信する
- 4. TypeScriptによるServerless Frameworkの利用
- 5. AWS CDKのaws-lambda-nodejsで”Error: spawnSync docker ENOENT”が出るとき
- 6. [Go言語] Golang + AWS Lambdaを実行するとfork/exec /var/task/main: exec format error: PathError
- 7. AWS PrivateLink 経由で ALB 配下 の Lambda 関数を起動する
- 8. Lambda, Amazon Textractを利用してS3に保存した画像からテキストを抽出する(Golang)
- 9. AWS Systems ManagerのParameter StoreからLambdaでパラメータ取得
- 10. AWS Lambda プロビジョニング済み同時実行を設定する
- 11. AWS API Gateway バージョンやエイリアスを指定して Lambda 関数を呼び出す
- 12. LINEbotに画像を送信すると、その画像をS3に保存
- 13. LambdaEdgeを利用したcognitoのトークン検証
- 14. React応用 – PartX – React > Netlify > Lambda > Python > MySQLどこまでいけるんだろう
- 15. AWS Lambdaで使いたい環境変数をAWS SAM CLIでどうするか
- 16. 爆速でモックAPIを構築する
- 17. AWS CLIのインストールからLambda作成までの流れ
- 18. CloudWatch LogsInsightsでLambdaの速度を計測してみよう
- 19. CloudFormationの更新なしでLambdaをデプロイする
- 20. AWS初学者がちょっとした分析基盤作ってみたのでメモ
Layer付きのAWS Lambda functionをServerlessFrameworkでローカル実行するとLayerが参照できない
# 概要
タイトルの通り、Layerを用いて一部ライブラリを共通化しているAWS Lambda functionを、serverlessでローカル実行しようとした時につまずいたので備忘録として残しておく。
# 経緯
最近、趣味でAWS Lambda上で動かすpythonプログラムを作成していて、デプロイが楽になるとのことなのでserverlessを導入していた。
その際、functionを複数作成しており、一部ライブラリはLayerを用いて共通化していた。作成したプログラムの構成は以下。
“`
プロジェクトルートディレクトリ
├─function1
│ └─src
│ └─handler.py
├─function2
│ └─src
│ └─handler.py
├─layer
│ ├─layer1
│ │ └─layer1のpythonライブラリ・ソース群
│ └─layer2
│ └─layer2のpythonライブラリ・ソース群
└─serverless.yml
“`また、serverless.ymlの記述内容は以下。
(本
AWS StepFunctionsで、クロスアカウント でAWS Lambdaを呼び出す
### TL;DR
– Resourceキーの値をLambdaのARNから、`arn:aws:states::: Lambda:invoke` に変更する
– Parametersキーを追加して、呼び出したいクロスアカウント 先のLambdaのARNを指定する
– クロスアカウント先のLambdaには、呼び出し元のAWSアカウントからの呼び出しを許可する必要がある### 事前準備
1. AWSアカウントを2つ用意する(アカウントA, アカウントB)
2. アカウントBに対して、以下のようなLambdaを用意する“`js
exports.handler = async (event, context) => {const response = {
body: JSON.stringify({
foo: ‘Hello, world’,
bar: ‘Goodbye, world’,
})
};return response;
};
“`## 手順
### ス
AWS IoT CoreとAWS Lambdaを連携して温度データをslackに送信する
# はじめに
> raspberryPiで温度センサーのデータをAWS IoT Coreで受信してlambdaと連携しslackに送信する所までやってみようと思います。AWS IoT Coreの作り方などは、前の記事で書いています.
– [AWS IoT Coreを使ってみた](https://qiita.com/arakirai1128/items/8d2b790d10d3b1b1ee32)
# 開発構成
– 構成イメージとしては、こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533263/39185cbf-8f4a-7e28-ec75-7765af1c3aa3.png)# 検証環境
– raspberryPi3B+
– 温湿度センサー(DHT22)
– AWS IoT Core
– AWS Lambda# 前提
– デバイスから送られてくるデータをAWS IoT Coreで受信出来ていること# Lambdaの作成
1) マネージメントコ
TypeScriptによるServerless Frameworkの利用
# はじめに
– Serverless FrameworkをTypeScriptテンプレート(aws-nodejs-typescript)で利用した情報があまり見当たらなかったので、プロジェクト作成から設定内容、ファイル構成なんかについて記載します。
– 今後利用する方の参考になればと。# プロジェクト作成
– Serverless Frameworkをインストールした後にプロジェクトを作成します。
– テンプレートにaws-nodejs-typescriptを利用します。“`bash
$ sls create –template aws-nodejs-typescript –path serverless-typescript-sample
“`
– [こちら](https://github.com/serverless/serverless/tree/master/lib/plugins/create/templates/aws-nodejs-typescript)にある内容でプロジェクトが作成されます。
– README.mdファイルに詳細が記載さ
AWS CDKのaws-lambda-nodejsで”Error: spawnSync docker ENOENT”が出るとき
# 問題
Lambda関数をTypeScriptで書くために`aws-lambda-nodejs`を使おうとしたら、下記のエラーが出た。“`sh
Error: spawnSync docker ENOENT
at Object.spawnSync (node:internal/child_process:1083:20)
at Object.spawnSync (node:child_process:812:24)
at dockerExec
…
“`# 解決策
実行環境がmacOSの場合は、ビルドモジュールである`esbuild`を手動でインストールするのが良いらしい。“`
$ npm install –save-dev esbuild@0
“`
or“`
$ yarn add –dev esbuild@0
“`# 参照
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html#local-bundling
[Go言語] Golang + AWS Lambdaを実行するとfork/exec /var/task/main: exec format error: PathError
## 概要
Serverless FrameworkやSAMやbuildしたものをそのまま上げてみるなどして、AWS LambdaにGoをデプロイするとどのケースでも以下のエラーがCloudWatchに出力されていた。筆者はM1 Macを使っていることで詰まった。“`
fork/exec /var/task/main: exec format error: PathError
null
“`## 解決策
### 一般的な解決法
go buildがなんかしらおかしいはずです。以下のようにgo buildはしましたか?
生成したバイナリのディレクトリ位置も確認してみたください。“`
$ GOOS=linux go build .
“`### M1 Macユーザー
go build時にLambdaで指定しているアーキテクチャに合わせていますか?
デフォルトはx86_64のため設定を変更をしていなければ以下のようにamd64でbuildするようにする“`
$ GOARCH=amd64 GOOS=linux go build .
“`
AWS PrivateLink 経由で ALB 配下 の Lambda 関数を起動する
## はじめに
2021/9/28 のアップデートで NLB のターゲットグループに ALB を指定できるようになりました :tada:https://aws.amazon.com/jp/about-aws/whats-new/2021/09/application-load-balancer-aws-privatelink-static-ip-addresses-network-load-balancer/
これにより AWS が提供する機能だけを使用して、ALB 配下にある Lambda 関数を PrivateLink 経由で呼び出すこともできるはずです。ALB ターゲットタイプの使い方や注意点等は他の記事に譲るとして、本記事では以下の構成を試してみます。
![image.png](https://qiita-i
Lambda, Amazon Textractを利用してS3に保存した画像からテキストを抽出する(Golang)
# はじめに
S3に画像を追加すると、自動的にその画像内のテキストを抽出し、テキストファイルとして保存する、というシステムを[Lambda](https://aws.amazon.com/jp/lambda/)・[Amazon Textract](https://aws.amazon.com/jp/textract/)・Golangを利用して作りました。
作成手順を共有します。
### 完成イメージ
![ocr.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/80ef8a6e-a645-99ad-8d4e-ab1f62fb8046.png)
### Textractとは
[Amazon Textract](https://aws.amazon.com/jp/textract/)はAWSが提供するクラウドOCRサービスです。詳しくは以下の記事を参照してください。
https://qiita.com/windows222/items/07c3683c052d6e2b
AWS Systems ManagerのParameter StoreからLambdaでパラメータ取得
#パラメータの作成
パラメータの作成ボタンからパラメータを2つ作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/e0952c93-d95a-2fcf-0e27-29c49235b86a.png)
今回サンプルとして作ったパラメータの値は、テキスト型の架空のURLです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/7195f374-0777-6d22-7080-ee26d10364ab.png)#Lambdaの作成
①関数名とランタイムだけ変更し関数を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/ce775a2c-51e1-39ee-912c-45b7a3c3b57c.png)
②設定タブ→アクセス権限
AWS Lambda プロビジョニング済み同時実行を設定する
# プロビジョニング済み同時実行とは
コールドスタートを防ぐ機能です。コールドスタートとは Lambda 関数の呼び出し時にインスタンスを初期化してから関数を実行することです。プロビジョニング済み同時実行数に 0 より大きな値を設定することで追加料金が発生します。# 設定手順
「新しいバージョンを発行」をクリックします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/1ea6eb7a-33a1-d93e-f774-d6ba8ae349e4.png)
「発行」をクリックします。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/fec4f794-71ac-537d-ffe0-6e6a56ace2be.png)
「設定タブ」$\to$「プロビジョニングされた同時実行」$\to$ 「編集」の順にクリックします。
![3.png](https://qiita-image-s
AWS API Gateway バージョンやエイリアスを指定して Lambda 関数を呼び出す
# 設定の概要
やることは以下の通りです。
– Lamdbda
– バージョンやエイリアスを作成する
– API Gateway の呼び出し許可のためにリソースベースのポリシーを作成する
– API Gateway
– Lambda 関数名に `{stageVariables.version}` や `{stageVariables.alias}` を含める
– ステージ変数を追加する# 手順
## Lambda
– バージョンやエイリアスを作成する
ここではバージョンを作成します。
「新しいバージョンを発行」をクリックします。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/a1b3ee28-7343-9884-2122-71b70761f039.png)
「発行」をクリックします。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/efbfa
LINEbotに画像を送信すると、その画像をS3に保存
# 前提
・Lineデベロッパーアカウント開設済み
・LinebotのwebhookにApiGatewayのpostエンドポイント設定済み
・LambdaとApiGatewayの紐づけ
・その他LINE発行のトークンを環境変数に設定やS3へのアクセス権限付与などLambda周り
詳しくは下記記事が参考になります。
https://qiita.com/w2or3w/items/1b80bfbae59fe19e2015# コード
Lambdaに下記コード記述・デプロイ
あなたのバケット名はS3のバケット名に変えてください“`lambda_function.py
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.models import (
MessageEvent, Te
LambdaEdgeを利用したcognitoのトークン検証
通常、認証確認処理はwebサーバーでやることが多いと思いますが、
グローバルサイトでかつ同時に多量のアクセスが考えられる場合、lambdaEdgeで認証チェックを実装すると
静的なサイト全体に認証がかけられ、かつWEBサーバーにアクセス負荷をかけずに認証確認処理を実装できます。今回は、cognitoから発行されたid_tokenをでコードして検証するコードをご紹介します。
#Lambda関数でのnpm moduleの利用法
今回、実装するにあたって– jsonwebtoken
– jwk-to-pemこれら2つのモジュールを利用しています。これらはnpmでinstallを行うのですが、Lambdaコンソール上ではもちろんnpmは実行できません。
このため、まずはlambdaのコンソールからアクション>関数のエクスポートでデプロイパッケージをDLしてください。
DLできたら解凍し、そこにpackage.jsonを追加するなどしてnpm installで上記の2つのモジュールをinstallしてください。開発についてもローカル環境でエディタを使って行う方が圧倒的に効率的だ
React応用 – PartX – React > Netlify > Lambda > Python > MySQLどこまでいけるんだろう
# タイトルの件
妄想してみました。
どこまで出来るか試してみたいと思います。# React ⇒ Netlify
いつものように`create-react-app`
“`
npx create-react-app プロジェクト名 –template typescript
“`いつものように`yarn start`でReact初期画面を`localhost:3000`で表示されることを確認します。
“`
cd プロジェクト名
yarn start
“`gitにコミット&プッシュ
※git@github.comXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXは、後述のGitHubで新しいリポジトリ作成の際に表示されるものを入力します。“`
git init
git remote add origin git@github.comXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
git push -u origin master
“`Githubで新しいリポジトリを作成した際に表示されるURLみたいなやつ。
![im
AWS Lambdaで使いたい環境変数をAWS SAM CLIでどうするか
##はじめに
環境変数の扱いについて、戸惑いがありましたのでまとめます。
用途や仕様の背景が理解し切れて一ませんが、少なくとも現状はベストエフォートとは思えず、改善が進むと嬉しいです。##やっていたことの概要
– 言語:Rust(記事としては、Rustに依存する内容ではないです)
– 作っていたもの:AWS Lambda関数
– 動作確認の方法:後述(※)
– デプロイの方法:AWS SAM CLI(`sam deploy`)
– その他:AWSの設定はCloudDormation(`template.yaml`)に集約#####※動作確認の方法
AWS SAMを使うとローカルでLambda関数の動作確認が可能ですが、私の環境ではビルドが遅くデプロイ直前までは、`cargo run`で動作確認を行っていました。| 動作確認タイミング | 動作確認の例 | 動作確認環境 |
| —- | —- | —- |
| 開発時 | `cargo run`, `cargo test` | MacOS |
| デプロイ前検証 | `sam loc
爆速でモックAPIを構築する
AWS Chalice を使って爆速でモックAPIを作ってみました。
AWS Chalice は Python 製のフレームワークで API Gateway と Lambda をサクッと構築できます。(詳細は[公式](https://aws.github.io/chalice/index)を参照ください。)
### 構成
構築する環境はAPI Gateway + Lambdaとなります。
![composition.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167819/7fb64117-dfd2-937f-800d-f705428feb73.png)
今回は以下前提にて構築します。
– pythonインストール済み
– Lambdaに付与するロールは事前作成済み(ロールの自動生成は使わない)
– AWS CLIの設定済み### 構築
何はともあれ作っていきます。1. chalice インストール
“`
pip install chalice
“
AWS CLIのインストールからLambda作成までの流れ
# はじめに
GCP好きですが、わけあってAWSを使う必要がでてきました。
そんなAWS初心者のメモです。# AWS CLIインストール
macOSの手順は以下にまとめられています。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html色々書いていますがユーザーインターフェースを使用したインストールが楽そうだったので、最新バージョンのAWS CLIをダウンロードしてインストールしました。
## インストールの検証
以下のコマンドで確かめます。“`shell
$ which aws
/usr/local/bin/aws
$ aws –version
aws-cli/2.1.29 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0
“`# AWS CLIのセットアップ
手順は以下にまとめられています。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configu
CloudWatch LogsInsightsでLambdaの速度を計測してみよう
隙あらばCloudWatch LogsInsightsで速度集計したりしています。(自己紹介)
本記事はCloudWatch LogsInsightsでやってみよう記事第2弾です。前回の記事はこちら。
https://qiita.com/zom/items/310b7995135b3edcc093
第2弾としてLambdaの速度計測をします。
## Lambdaのログの基本(デフォルトの設定の場合)と余談
私自身、Lambdaに出力されるログをいじったことがないので、そもそもデフォルト以外のログが存在するのか把握しておりません。
Lambda関数内でログを仕込んでおけば話は別ですが。CloudWatch Logs上には `/aws/lambda/$Lambda関数名` といったロググループで出力されます。
そしてログの中身としてはこのようになります。 `$` の部分は適宜置き換えて読んでください。“`
START RequestId: $request_id Version: $$version
END RequestId: $request_id
REPORT R
CloudFormationの更新なしでLambdaをデプロイする
特にCIでのテストをスムーズにするのに使いたいですね。
# Serverless Flamework
`serverless deploy function -f Lambda名`
https://dev.classmethod.jp/articles/serverless-deploy-aws-whats-going-on/
https://www.serverless.com/framework/docs/providers/aws/cli-reference/deploy
# CDK
`cdk deploy –hotswap`
https://github.com/aws/aws-cdk/blob/master/packages/aws-cdk/README.md# Zappa
`zappa update`ほかは見つけたら随時更新
AWS初学者がちょっとした分析基盤作ってみたのでメモ
# はじめに
AWSをほとんど使ったことがなかった私がAWS上でちょっとしたものを作る際に、
`考えていたこと`や`調べたサイト`などをメモ書きとして残します。⚠︎自分用のため読みづらかったらすみません。。# 作りたいもの
定期的に特定のアプリのAppStoreレビューをスクレイピング => 整形 => データ格納 => 集計 => 可視化をAWS上でできるように構築したい# 作る前注意点
`AWS 高額請求`や`GCP 高額請求`で検索するとやらかした話が思った以上に出てくる。。– [10日間 で AWS Lambda 関数を 28億回 実行した話](https://blog.mmmcorp.co.jp/blog/2019/12/25/lambda-cloud-bankruptcy/)
– [BigQueryで150万円溶かした人の顔](https://qiita.com/itkr/items/745d54c781badc148bb9)
– [AWS 高額請求 |クラウド利用の注意点!高額請求事例と対策方法](https://www.3sss.co.jp/tis/medi