- 1. M5StackとSORACOM Arcを使って「消耗品の減少をお知らせするボタン」を作ろう
- 2. Rustのlambda_http辛すぎなのでaxumしてみた
- 3. [AWS] Step FunctionsのoutputPath、resultPath、resultSelectorを使いこなす
- 4. DockerのLambdaコンテナイメージをgolangで動かしてみた
- 5. [Lambda]s3.putObjectが初回実行時に完了しない時の対処法
- 6. REST API としてAWS Lambda関数を呼び出す
- 7. AWS Lambdaの用語要点まとめ(自分用メモ
- 8. API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方
- 9. lambdaのメモリとCPU数はどこが切れ目なのか調べてみた
- 10. AWS CDK + TypeScript でサーバレス開発その1 : Hello world!
- 11. WebhookとAPIのちがい ~Kintone編~
- 12. Lambdaの関数 URL(Function URLs) を使用時、Basic認証をかける
- 13. AWS Cognito ユーザープールを認証制御に利用してLambda関数を呼び出す
- 14. AWS Lambda,DynamoDB間のCRUD操作
- 15. Lambdaをコンテナイメージから作る
- 16. 【AWS】Lambda + API Gatewayを触ってみる【API Gateway編】
- 17. 【Serverless Framework】コンテナイメージを使ってPackageする際はアーキテクチャに気を付ける【Python】
- 18. SwitchbotをLINE BOTから操作してみた(Lambda,API Gateway,Go)
- 19. OCI Functions vs AWS Lambda
- 20. AWS日記43 (AWS Lambda – Rust)
M5StackとSORACOM Arcを使って「消耗品の減少をお知らせするボタン」を作ろう
みなさんはAmazonダッシュボタンのことを覚えていますか?ボタンを押すだけで商品をAmazonに発注できるというもので、今思えばIoTの先駆けとも言えるサービスでした。
残念ながら現在はこのサービス自体が終了しています。ですが、今も消耗品の棚卸しに苦慮している会社・オフィスは多いのではないでしょうか?
そこで今回、M5StackとSORACOM Arcを使って「オフィスの消耗品の減少をお知らせするボタン」を作ってみました。
消耗品をストックしている棚にこういったデバイスを設置しておき、
![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3893817a-8128-1277-6a75-1642fca1b26e.jpeg)
上下ボタンで
Rustのlambda_http辛すぎなのでaxumしてみた
# 目的
AWS LambdaでAPIっぽいことをするには[lambda_http](https://crates.io/crates/lambda_http)を使うことになるんですが、HTTPの低レイヤーを相手にすることが多くて辛いです。
何かいいものが無いかと調べていたら、数日前に[axum-aws-lambda](https://crates.io/crates/axum-aws-lambda)というものが出来ていたのでこれを使ってみました(この記事を書いた日からだと27日前でした)。# コード
## lambda_httpだけでやってみる。
“`rust:Cargo.toml
[package]
name = “web”
version = “0.1.0”
edition = “2021”[dependencies]
lambda_http = “0.5.2”
serde_json = “1”
tokio = { version = “1”, features = [“full”] }“`
“`rust:main.rs
use lambda_http::{
[AWS] Step FunctionsのoutputPath、resultPath、resultSelectorを使いこなす
# はじめに
AWS Step Functions の各タスクへの入力は、inputPathでJSON pathを指定することで、雑多な入力から必要な項目だけを拾うことができます。
出力側にはoutputPath、resultPath、resultSelectorというものがありますが、どうにも動作がわからなかったので調べてみようと思い立ちました。
と、勢い込んでみたものの、AWS Console に[Data flow simulator](https://console.aws.amazon.com/states/home?#/simulator) というよいものがありました。この記事読むより、シミュレーターで試してみたほうがよいです。
でも、めげずに書いてみます。
# 動作を確認した環境
## Lambda
入力と出力を確かめたいだけなので、値を返すだけのLambdaを作りました。これをStep Functionsの中で呼び出してみます。
“`ts:
export const sampleLambdaHandler = async (event: unknown
DockerのLambdaコンテナイメージをgolangで動かしてみた
AWSで公開されているgolangのLambdaコンテナイメージを動かしてみました。
## パッケージの構成
“`
├── docker
│ └── lambda-go-test
│ └── Dockerfile
├── docker-compose.yml
└── lambda
├── go.mod
├── go.sum
├── main
├── main.go
└── pkg
“`## Dockerファイル作成
[こちら](https://gallery.ecr.aws/lambda/go)を参考にDockerファイル等を作成。
“`dockerfile
FROM public.ecr.aws/lambda/go:1# Copy function code
COPY ../../lambda ${LAMBDA_TASK_ROOT}WORKDIR ${LAMBDA_TASK_ROOT}
# golangをinstall
RUN yum install -y golang# Set the CMD to y
[Lambda]s3.putObjectが初回実行時に完了しない時の対処法
AWS SDK for JavaScriptのs3.putObjectが、1回目は通らないのに2回目は通るという事態が起きました。
結論から言うと、promiseを返していなかったことが原因でした。だめだったコード
“`
s3.putobject({
Body: {body},
}, function(err, data) {“`
REST API としてAWS Lambda関数を呼び出す
## REST API とは
– APIをインターネットへ公開し、JavaScript等から呼び出すしくみです。
– 呼び出しのパラメータ及び戻り値はJSONが使われる場合が多いです。## API Gateway とは
– [AWS Lambda関数](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)をインターネット経由でREST API として呼び出すことができます。
– [Amazon API Gateway の概念](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-basic-concept.html)## この記事の目的
– AWS API Gatewayを経由してLambda関数を呼び出すよう構成します。
– Angularのタイプスクリプトから定義したAPIを呼び出します。## Lambda関数を作成
– 関数を作成します。
![image](https://us
AWS Lambdaの用語要点まとめ(自分用メモ
・AWS Lambda
サーバーレスでプログラムのコードを実行できるサービス。
サーバーレスとはAmazon EC2などのサーバーを必要とせず、リクエスト発生時にだけプログラムが実行されるアーキテクチャのこと。
Lambdaを利用すると次のようなメリットがあります。
・プログラム実行環境の構築や運用が必要なくなる
・プログラムはリージョン内の複数のAZに分散して配置される(耐障害性・可用性の向上)
・プログラムへのリクエスト数に応じたスケーリングが自動的に行われる(拡張性の向上)
以上のメリットから、開発者はプログラムの開発に集中できるようになります。Lambdaで実行されるコードを「Lambda関数」といいます。Lambda関数はJava、Node.js 、Pythonなど様々な開発言語に対応しています。
Lambda関数の実行時間は1回につき最長15分で、実行時間と選択したメモリの容量に対して課金されます。そのため実行時間が15分以上になる処理や、常時稼働が必要なアプリケーションには向いていません。【Lambda関数のトリガー】
Lambda関数実行の起点となるイベントを「
API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方
API Gateway、Lambda、DynamoDB を使ったAPIの作り方を備忘録も兼ねて記載します。
プログラム言語にはNode.jsを利用します。# システム構成
システム構成は以下のようになります。
![AWS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/d172c951-87f7-ef41-4bb4-cf660f65d99b.png)# システム概要
今回はサンプルとして、DynamoDBに格納されているイベント情報をPOSTリクエストで取得して、Jsonを出力するAPIを作ります。# 1. DynamoDBにテーブルを作成
最初にイベント情報を格納するテーブルを作成します。
![dynamodb1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/c813f1e4-6c70-8b35-a53a-57a532ede10a.png)テーブル名は **event**、
lambdaのメモリとCPU数はどこが切れ目なのか調べてみた
すでにほかの記事でも触れられていますが、lambdaはメモリを増やすとCPUが増えるようです。
https://qiita.com/hamadu/items/12303d9f9cb800db14d3
https://aws.amazon.com/jp/lambda/faqs/128MBでもすでに2つ割り当てられていたり最大でも6つだったりどこが区切れなのか調べてみました。
ソースコードは以下に置いてあります。
https://github.com/misogihagi/lambda-cpuinfo
## 結果
128MBごとに増やした結果です。ざっくりいうと3GB,5GB,7GB,9GBでスレッドが一つ増えるみたいです。
![visualization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/ad4c5b74-d42a-df4d-bd09-a1e0559eb58a.png)
“`json:vega-light
{
“data”: {
“values”: [
AWS CDK + TypeScript でサーバレス開発その1 : Hello world!
# 概要
AWS CDKでサーバレス環境を構築するシンプルな方法のメモ。
# 前提
– 筆者の環境はMac + VSCode。
– AWS CDKを使ったことがある。
– Node.jsがインストールされている。# 手順
## 雛形の作成
aws-cdkを使ってプロジェクトの雛形を作成する。
“`bash:ターミナル
mkdir project-name
cd project-name
cdk init app –language typescript
“`TypeScriptは直接ts-nodeが実行するので、typescriptパッケージはアンインストールしておく。tsconfig.jsonも削除する。
“`bash:ターミナル
npm uninstall typescript
rm tsconfig.json
“`package.jsonからtsc関連のスクリプトも削除しておく。
“`diff:package.json
“scripts”: {
– “build”: “tsc”,
– “watch”: “tsc -w”,
WebhookとAPIのちがい ~Kintone編~
# WebhookとAPIのちがい
今回はWebhookとAPIの違いをやってくよ。
:::note info
~おしながき~
1. 前置き
2. WebhookとAPIのちがい
2. 使ってみる(Kintone):::
## 前置き
とある日の出来事。
同僚「ISEYAくん、WebhookとAPIのちがいってなんなん?」
ISEYA「うーん、、コードを書かないか、書くかのちがいとちゃいますかね:baby:」そう、実際**私は雑魚**のためあまり腑に落ちていないので曖昧な表現で回答してしまいました。
しっかりと理解を深めるため、調べてみたが、
コードを書くか書かないかの違いは正解のようで不正解なようだ。今日はそれを紹介していく。
## WebhookとAPIのちがい
##### 結論 自動か手動かのちがい
です。
じゃあ具体的に自動と手動ってどういう意味?について深堀していきます。まず、APIの一例をシーケンス図にしてみました。
するとこんな感じ。“`plantuml
クライアント->サーバー : リクエスト
クライアント<-サーバー : レス
Lambdaの関数 URL(Function URLs) を使用時、Basic認証をかける
# はじめに
先日、Lambda単体でHTTPSエンドポイントから実行可能になる機能が追加しました。
特定のリソースのみLambdaを実行できるようにするためには、Basic認証を適用する必要があったため、その方法についてまとめます。https://dev.classmethod.jp/articles/aws-lambda-function-urls-built-in-https-endpoints/
# Lambdaを実行する認証タイプ
– `AWS_IAM` – IAM の権限に基づいて、リクエストを認証および承認します。権限は、`lambda:InvokeFunctionUrl`を付与したIAMポリシーをIAMロール、もしくは、IAMユーザーに適用し、lambdaを呼びます。
– アクセスするためには`AWS Signature Version 4 (SigV4)`を使用して、HTTPリクエストに対して署名する必要があります。– `NONE` – Lambda を呼び出す前の認証を実行しません。関数 URL への、未認証でパブリックなアクセスを許可するには、
AWS Cognito ユーザープールを認証制御に利用してLambda関数を呼び出す
## AWS API Gateway とは
– [AWS Lambda関数](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)をインターネット経由でREST API として呼び出すことができます。
– API呼び出し毎の認証が設定可能です。本記事では認証のバックエンドにCognitoを利用します。
– [Amazon API Gateway の概念](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-basic-concept.html)## この記事の目的
– AWS Cognitoから発行した認証トークンを利用してAWS API Gatewayを経由してLambda関数を呼び出すよう構成します。
– これによりセキュリティが確保されたAPI呼び出しを実現します。## ?これより先は下記記事の内容を前提とします
– [REST API としてAWS Lambda関数を呼び出す](htt
AWS Lambda,DynamoDB間のCRUD操作
## DynamoDBの環境準備
DynamoDB→テーブル→テーブルを作成からテーブル名peopleを作る。
パーティションキーを文字列型のSrとする。
そして、以下のようなテーブルを作成する。
![スクリーンショット 2022-07-03 14.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2040882/ec6515e6-c6c9-9575-5c35-5c0fa5e6edf3.png)## AWS Lambdaの下準備
流れとしてはロールにポリシーを当て、そのロールをサービスで使用するといった流れになる。まず実行ロールを作る。IAMからアクセス制限→ロール→ロールの作成を選択。
信頼されたエンティティタイプ:AWSのサービス
ユースケース:Lambdaを選択。
次に、AmazonDynamoDBFullAccessを許可ポリシーに選択。
ロール名をここではlambda-dynamodb-fullaccessとする。
## AWS Lambdaの下準備2
Lambdaをコンテナイメージから作る
# はじめに
AWSのLambdaはOSがAmazon Linux 2上で実行されるとのことです。ですがPowerShellの一部のモジュールなど、Amazon Linux 2上では動かないものもあったりします。今回、別のOSで動かす必要があったため、自作のコンテナからLambdaを作成する方法が記載されいているページありましたので、それをやってみました。
普通になぞるだけでは味気なかったので、一部CloudFormationを使うようにしてみました。# 参考
https://aws.amazon.com/jp/builders-flash/202103/new-lambda-container-development/?awsf.filter-name=*all# 環境
– Cloud9
– Docker
– インストール済み
– コンテナを扱うので、そこそこの容量は必要かも
– 自分は50GBで行いました。# やったこと
## ディレクトリ・ファイル作成
まずはプロジェクトのディレクトリを作成し、よく使う情報を環
【AWS】Lambda + API Gatewayを触ってみる【API Gateway編】
LambdaとAPI Gatewayを使って簡単なAPIを作成してみます。
AWSはほとんど触ったことがないため、内容としては初歩の初歩となります。
今回はAPI GatewayでAPIを作成して、APIを呼び出すとLambda関数が実行されるようにしていきます。
使用するLambda関数については以下の記事で作成しております。https://qiita.com/Hamoto/items/bd486937de142a589f8f
# HTTP APIを作成
マネジメントコンソールでAPI Gatewayのページを開くとAPIのタイプを選択する画面が表示されるので、今回はHTTP APIを選択します。
![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2300564/2176922f-50e6-6652-592f-2d36e964e877.png)APIの設定を行います。
統合とAPI名の設定が表示されるので、「統合を追加」を押下して、追加されたセレクトボックスで「Lambda」を選択
【Serverless Framework】コンテナイメージを使ってPackageする際はアーキテクチャに気を付ける【Python】
# はじめに
Pythonで書かれたLambda関数のコードをServerless Frameworksを使ってデブロイする際に、[serverless-python-requirements](https://www.serverless.com/plugins/serverless-python-requirements) プラグインを使うことで依存関係を含めることができる。Dockerコンテナを使ったパッケージングにも対応しており、`cryptography` のようにコンパイルが必要なライブラリが含まれる際はそれを使うのだが、設定によってはLambda実行でエラーが発生することがある。
# 環境
– Python 3.9
– Serverless Framework 3.19.0# 事象
`cryptography` を含むPythonアプリをServerless Frameworkを使ってDockerコンテナでパッケージ & デプロイ。
その後Lambdaを実行すると、Importで以下のようなエラーが発生した。> [ERROR] Runtime.Import
SwitchbotをLINE BOTから操作してみた(Lambda,API Gateway,Go)
# はじめに
自宅を完全スマートホーム化してみたい!!ということで第一弾はSwitchBotの加湿器を買ってみました。
じゃじゃん!
今回はこの加湿器をLINE上からON/OFFできるようにしてみます。
# 構成
![kousei.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2610254/eb50aeb1-4ed9-4834-f3b1-6b21d7953ad7.png)
# 準備
## LINEアカウントhttps://developers.line.biz/ja/docs/messaging-api/getting-started/
を参考にチャネルを作成します。![スクリー
OCI Functions vs AWS Lambda
# General
||OCI Functions|AWS Lambda|
|–|–|–|
|Initial Release|Jul,2019|Nov,2014|
|Based on|[Fn Project](https://fnproject.io/)|N/A|
|Support Language|✔ Java
✔ Python
✔ Ruby
✔ Go
✔ Node.js
✔ C# (.NET)
Refer to [Doc ](https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/languagessupportedbyfunctions.htm)|✔ [Java](http://docs.aws.amazon.com/lambda/latest/dg/java-lambda.html)
✔ [Python](http://docs.aws.amazon.com/lambda/latest/dg/python-lambda.html)
✔ [Ruby](https
AWS日記43 (AWS Lambda – Rust)
# はじめに
今回は[AWS SDK for Rust](https://aws.amazon.com/jp/about-aws/whats-new/2021/12/aws-sdk-rust-developer-preview/)を試します。
Lambda, DynamoDB, S3を利用し簡易な画像掲示板を作ります。
DynamoDB・S3周りは[aws-sdk-rust](https://github.com/awslabs/aws-sdk-rust)を利用し、Lambda周りやビルド・デプロイは[aws-lambda-rust-runtime](https://github.com/awslabs/aws-lambda-rust-runtime)を利用します。# [AWS SDK for Rust](https://aws.amazon.com/jp/about-aws/whats-new/2021/12/aws-sdk-rust-developer-preview/)の利点
> すべてのクレートは crates.io で入手できます。SDK は、EC2、ECS、Lambda