- 1. 登山の新しいお供?やまみちあんしんボタン。
- 2. AWSの請求を日次でLambda for RubyでSlackに通知する
- 3. 初体験したときのことをお話します
- 4. 【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定
- 5. 【Lambda】import requests が使えるようにする【python】
- 6. AWS API Gateway がリクエストヘッダーを小文字にしてしまう時の解決策 (golang)
- 7. [AWS] Lambda関数のユニットテストをローカル環境で実行してみよう
- 8. AWS LambdaにてPython3でS3でファイルが追加されたイベントを取得し、実行する。
- 9. Amazon Sagemakerで作成したモデルによる推論処理をREST APIとして公開する
- 10. ECSのデプロイ中の正常性確認を自動化するAppspecのHooks設定
- 11. RDSをlambdaで定期的に停止を開始を行う
- 12. Slack アプリを AWS Lambda で動かす
- 13. Docker×Lambda環境簡単構築
- 14. AWS Lambdaを使ってAPI簡単作成
- 15. 特定のLambdaからのアクションをS3バケットポリシーで拒否したい時
- 16. 【AWS API Gateway】Lambda関数(DynamoDBデータの取得)実行API作成
- 17. CSV→スペース区切りに変換する処理でも、真面目に入出力とルールを分離をしてみる
- 18. WebページのボタンからAWS MediaLiveを起動させる
- 19. API Endpointのエントリポイント・コードの書き方
- 20. AWS Lambdaのロガー設定
登山の新しいお供?やまみちあんしんボタン。
#概要
SORACOM Button を使って山登りがちょっと安全になる?デバイスつくりました。###機能
– ボタンを押した位置を地図上に表示する
– 緊急時に特的の連絡先にメッセージを送る###言い訳
今回は SORACOM Button のメリットを生かすため、極力スマホに頼らない構成にしました。と、言うのは半分言い訳で正直なとこ今回の機能はスマホのアプリで出来ちゃいます…
( [YAMAP](https://yamap.com/) さんめっちゃ便利だからみんなも使おう!僕もいつもお世話になってます!)でもスマホってバッテリーの持ちが悪かったり、モバイルバッテリーは重たかったりしますよね?
SORACOM Button なら…
**電池式だから予備電源の確保は簡単!**
**持ち運びも便利な軽量設計!**なんて山登りに最適なんだ!
と言うことで、宜しくお願いします。#インデックス
– [なぜ SORACOM LTE-M Button なのか](#なぜ-soracom-lte-m-button-なのか)
– [構成](#構成)
– [今回の詰まり
AWSの請求を日次でLambda for RubyでSlackに通知する
先行事例をググると Python の例が多かったので、[Ruby][doc] で手でポチポチやったときの最低限の設定メモ。
# 1. AWS Lambda をランタイム Ruby で作成
WebのLambdaコンソール画面からボタンポチポチで作成
– ランタイムを `Ruby 2.7` で
– 実行ロールに `ce:GetCostAndUsage` 付与
– [Cost Explorer の権限は root で有効にすると出てくる][ce_auth]はず# 2. Rubyで取得処理を書く
“`ruby:lambda_functions.rb
require ‘aws-sdk’
require ‘net/http’
require ‘uri’
require ‘json’# Lambdaのエントリーポイント
def lambda_handler(event:, context:)
fetch_cost
.then { |response| pretty_response(response) }
.then { |message| notif
初体験したときのことをお話します
どうも、こんにちは。お元気ですか?
コロナ禍(コロ中?)ではいかかお過ごしでしょうか?
体調など崩しておりませんでしょうか?わたしは以前、こんなこと↓を書いていました。
**[試験に出るAWS:SAAでしょう 第6夜](https://qiita.com/han-aru/items/652dd12c92c1b8f69ac0)**
あれから早、3ヶ月が過ぎようとしております。
あれから更新しておりませんし、いまだ試験も受けておりません!が、勉強は続けており、もうすぐ終わりますので
近々試験を受けようと思っております。多分!さて、今回は有識者の方々のを見たり、聞いたりして、教わりながら
色々と新しいことを体験しながら覚えていったので
それらの知見? 感想? をここに残しておきたいと思います。## 準備として、すでに行っていたところ
– [AWS CLIをインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html)した
– [Serverless Framewor
【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定
# はじめに
Labmda関数から別のAWSサービスを使用したい…
でも、現在リージョンと別リージョンのサービスを使いたい!そんな時に使用する設定をご紹介します。
Pinpointなど、まだ東京リージョンで使用できないサービスを使う時にも役立ちます。
# 方法
以下はNodeの例です。
“`javascript
const AWS = require(‘aws-sdk’);
// 以下を追加
AWS.config.update({ region:’us-west-2′ });
“`# まとめ
`AWS.config.update`することで、リージョンを切り替えできます。
【Lambda】import requests が使えるようにする【python】
# やること
↓これを実行したら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7689356e-1f61-9b71-1fcd-0d8aca43f25c.png)↓こうなってほしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/15a381c6-b741-152a-d16b-f11e20bf0430.png)↓しかし、こうなってしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185989/7d209b66-33d7-41b4-e024-3c81cbd9f7da.png)“`json
{
“errorMessage”: “Unable to import module ‘lambda_function’: No module named ‘r
AWS API Gateway がリクエストヘッダーを小文字にしてしまう時の解決策 (golang)
ここ最近業務で API Gateway + Lambda を使った開発を行っており、API Gateway の振る舞いで注意しなければならない点を見つけたので、解決方法も添えて記事にしたいと思います。開発言語は Go言語です
## AWS API Gateway がリクエストヘッダーを小文字にしてしまう
– 今回使用するサンプルプログラムです
“`go
package mainimport (
“errors”
“fmt”
“log”“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-lambda-go/lambdacontext”
)type (
request = events.APIGatewayProxyRequest
response = events.APIGatewayProxyResponse
)// handler handles AWS Lambda execution.
func h
[AWS] Lambda関数のユニットテストをローカル環境で実行してみよう
# 前提
今回は、以下のような前提で検証してみたいと思います。– SAM
– Lambda
– Python3.8
– pytest
– moto(モック)
– DynamoDBなお、SAMを使用すると、Dockerん環境を使って擬似的にローカル環境にDynamoDBなどを構築することができますが、今回は、ユニットテスト(将来的な自動テスト)を見据えてのテストについて検証してみたいと思います。
# プロジェクト作成
では、まず最初にプロジェクトを作成します。
もし、SAMでのプロジェクト作成がよくわからない方は、事前に– [[AWS] Serverless Application Model (SAM) の基本まとめ](https://qiita.com/herohit-tool/items/420f4a7b294cfcf56ed7)
– [[AWS] Serverless Application Model (SAM) でAPI Gateway + Lambda + DynamoDBなサンプルを作成してみる](https://qiita.com/herohit-tool
AWS LambdaにてPython3でS3でファイルが追加されたイベントを取得し、実行する。
# 概要
調べたので備忘録# 手順
1. Lambda上部のデザイナーから「トリガーを追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/2e3c8db7-3228-1ecc-63e0-c28b5a6c5e88.png)2. S3を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/ed6ae4b7-03d2-8fb8-0038-f5d64c409b9f.png)
3. 対象バケットを選択、「全てのオブジェクト作成イベント」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89227/02db54d1-ac97-33c9-5cb0-d2a6441aa4db.png)※必要あればプレフィックスなどは自由に設定してください。
Amazon Sagemakerで作成したモデルによる推論処理をREST APIとして公開する
#やったこと
SageMakerで作成したモデルを使った推論処理をREST APIとして公開してみた。#構成
API Gatewayで公開されるAPIにアクセスし、Lambdaを実行。LambdaからSageMakerで作成したModelをエンドポントから呼び出し、推論処理を実施、リクエスト側に結果を返す、という感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187747/a5ab192f-be98-4b22-cfe6-43a9c3371cf0.png)#構築手順
1. SageMakerで学習モデルを作成
2. モデルをデプロイ&エンドポント作成
3. LambdaからSageMakerのエンドポイントを呼び出すためのロールを作成する
4. Lambda関数実装
5. Amazon API Gateway設定
6. CurlでREST APIの動作確認1,2だけでかなりの量になるので別で執筆中。
以下、3以降について記載。## 3. LambdaからSageMak
ECSのデプロイ中の正常性確認を自動化するAppspecのHooks設定
# はじめに
デプロイに失敗した際に自動でロールバックできるというのは重要だ。
ECSのCodeDeployによるデプロイでは、End-to-Endの正常性確認を自動化することができる。
今回はチュートリアルとほぼ同じ内容ではあるが、AppspecのHooks設定による正常性確認のやり方を整理する。# 前提条件
少なくとも以下のことを理解していた方が飲み込みが早いはずである。– ECS+Fargateのデプロイパイプラインを自分で作ったことがある
※デプロイパイプラインのサンプルは[以前の記事](https://qiita.com/neruneruo/items/d5e58b4013debdf9ebbe)で書いているので参考までに。
# やること
パイプラインの整理までできているのであれば、それほど大変ではない。
以下の作業をやればよい。– Appspecの編集
– IAMポリシーの点検
– 正常性確認用Lambda関数の作成## Appspecの編集
Appspecでは、CodeDeployの各ライフサイクルイベントをフックしてLambda関数をコールすることがで
RDSをlambdaで定期的に停止を開始を行う
# はじめに
勉強も兼ね個人開発しているアプリをawsで公開しているのですが、AWSのEC2とRDSの料金が結構高い。
特にRDSは最低スペックでも確か2000円くらいかかってしまう。とりあえず料金下げるため開発を行わない平日の昼間はRDSを停止する様にして、ちょっとでも節約したかったのでlambdaで自動的に
平日の昼間は停止する様にしました。lambdaの言語に関してはRubyを使いました。
# lambdaの作成
まずlambdaを作成します
![スクリーンショット 2020-08-22 19.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207921/6d01c1d7-20f6-4f09-7fb1-012dc3eb79eb.png)
作成したらlambdaの詳細の画面から
アクセス権限を表示して、実行ロールのロール名の部分をクリックします。
そしてポリシーのアタッチからRDSの権限を付与します。
権限に関しては調べるの面倒だったので自分はRDSのFullAcc
Slack アプリを AWS Lambda で動かす
# Slack アプリを AWS Lambda で動かす
## やること
Slack アプリを `AWS Lambda` で動かす。
Slack アプリは `Slack Bolt` で開発し、Slackのショートカットからモーダルを起動する。## [Slack Bolt](https://slack.dev/bolt-js/ja-jp/tutorial/getting-started) とは?
Slack アプリを手軽に作成するためのフレームワークで、Slack 社が提供している。Bot だけを作れるとかそういうわけではなく、色々なトリガーからアプリを起動させて色々な処理をさせることができる。トリガーは以下の通り。
– Webhook 起動
– ショートカット起動(イナズママークのやつ)
– スラッシュコマンド起動また、[BlockKitBuilder](https://app.slack.com/block-kit-builder/) を使えば、よりリッチな UI を実現することができる。
## シーケンス
![スクリーンショット 2020-08-22 2.0
Docker×Lambda環境簡単構築
# Docker×Lambda環境簡単構築
## はじめに
AWS Lambda Function を実装するときは docker-lambda を使用すると開発も容易で、デプロイまで簡単にできます。その環境構築手順、実際にデプロイするまでを簡単にご紹介します。## 前提
以下はすでに準備されている前提となります。
– AWSアカウント
– dockerインストール
– docker-composeインストール## 構成
最終的に以下のような構成になります。“`
.
├── deploy.sh
├── docker-compose.yml
├── lambda
│ └── SampleFunction
│ ├── Dockerfile
│ └── index.js
└── opt
├── Dockerfile
└── package.json“`
## 手順
### 1. AWS Lambda関数作成
詳細手順は[こちら](https://qiita.com/A-Kira/items/293808eb44afcb3672
AWS Lambdaを使ってAPI簡単作成
# AWS Lambdaを使ってAPI簡単作成
## はじめに
AWS Lambda Function を使ってAPIを作成する方法をご紹介します。## 前提
以下はすでに準備されている前提となります。
– AWSアカウント## 手順
### 1. AWS Lambda関数作成
AWSにログインして、「サービス」→「コンピューティング」→「Lambda」と進みましょう。
そして、「関数の作成」をクリックして作成画面に進みます。
(初めてLmbda関数を作る場合は画面が異なるようです。)
![スクリーンショット 2020-08-21 10.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290840/10349a7a-678f-1c03-0b4d-012ed4143b8f.png)今回は、「一から作成」、関数名を「SampleFunction」、ランタイムを「Node.js 12.x」とします。
![スクリーンショット 2020-08-21 10.56.09.png](https
特定のLambdaからのアクションをS3バケットポリシーで拒否したい時
# 概要
S3バケットポリシーで、あるLamdba関数からのアクセスを拒否しようとした際に詰まったところをメモ。# 設定したいこと
Lambda関数 `function-a` からの、S3バケット `bucket-a` へのReadアクションを拒否する。ケースとしてあまりないと思うが、今回は、S3へのアクセスが何らかの理由で失敗したという想定をテストしたいためにこの方法を取ることとした。
# 間違ったバケットポリシーの設定
Lambda関数からのアクセスを拒否するということで、以下のように、Conditionに該当のLambda関数をSourceArnとして設定した Deny ルールを書けばいいと考えた。“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Deny”,
“Principal”: *,
“Action”: [
“s3:ListBucket”,
【AWS API Gateway】Lambda関数(DynamoDBデータの取得)実行API作成
##目標
API Gatewayを利用して、Lambda関数(DynamoDB内データを取得する関数、Rubyでの作成とする。)実行API(※)を作成する。※作成するAPIの詳細要件
・URLのクエリパラメータとしてDynamoDBのプライマリキー情報を指定し、取得するデータを絞り込む。
・クエリパラメータが指定されていない場合、ステータスコード400エラーを返す。
・DynamoDBからクエリパラメータに紐づくデータを取得出来ない場合も同様に、ステータスコード400エラーを返す。##API Gatewayとは
API Gatewayを利用することでバックエンドリソースのLamda関数、その他AWSサービス、httpエンドポイントに対するRestfulAPI(※1)やWebSocketAPI(※2)を作成することが可能となります。API Gatewayに関するより詳細な知識を掲載している記事のリンク記載致します。
[Amazon API Gateway](https://qiita.com/leomaro7/items/66ea3233097fa410fef9)※1
U
CSV→スペース区切りに変換する処理でも、真面目に入出力とルールを分離をしてみる
# はじめに
外部からCSVを取り込み、自分のところのシステムで使うファイルに変換をする処理を作ることになりました。
ボリューム的にもそこまででもないので、ちゃちゃっと手続き的なプログラムを書いてしまっても良かったのですが、多少余裕があったため、真面目にレイヤー分けをしてみました。
そのとき、どんな風に作ってみたのかを、サンプルの要件と合わせて書いていきたいと思います。
今回は勉強も含め、Python3.7とLambdaで作ってみます。
# サンプルコード
https://github.com/jnuank/io_logic_isolation
[最終的な分離のイメージ](#最終的な分離のイメージ)と合わせてご参照下さい。
# ありそうな要件
あるチェーン店が会社で使用しているレジから取引データを吸い上げ、各店舗のレジ毎に発生した取引を他システムからの売上のCSVを取り込み、自システムで使えるデータに変換をします。
そのとき、今回読み込むCSVは、そのままスペース区切りに変換をするわけではなく、いくつかはシステムが持つ値に変換をする必要があります。# レジから吸
WebページのボタンからAWS MediaLiveを起動させる
##はじめに
ライブ配信で利用するAWS MediaLiveの起動・停止は
通常、AWSコンソールやCLIから操作することが多いと思います。ただ、開発者以外の人に操作してもらう場合は、それだとハードルが高いため、
Webページに配置したボタンから起動・停止を操作できるような仕組みを考えてみました。##構成図
S3にHTMLを配置して、CloudFrontで配信します。Web利用者はHTML上に配置されたボタンを押します。
すると、APIが実行され、Lambdaがキックされて、MediaLiveが起動・停止する仕組みになります。
![ScreenShot 2020-08-19 19.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277934/0fcc7cbd-7709-7c2c-fb19-6e6f01b1ac67.png)##MediaLive
今回、操作対象とするMediaLiveチャンネルは、1つとします。##IAM
Lambda用のIAM Roleを作成しておきます。
API Endpointのエントリポイント・コードの書き方
API Gatewayとかから飛んできたリクエストをLambdaでいい感じに処理する、よくあるバックエンドコード
この辺のいい感じの記述を模索してて最近こんな感じになっています。## 最近の自分の書き方
“`js
/**
* フォーマットに関してはこいつに任せる。
*/
const run = async(event, hoehoe) => {
// どでかいtry-catchで例外をアプリ内に封じ込める
try {
// 悩むけどこの辺の情報はこっちでいいかな
const name = event.pathParameters.name;// 処理は極力別クラスに任せる
const service = new Service(hoehoe);
const pet =service.getPet(name);// 仕様と対応するので正常系の出口は一箇所
return getSuccessResponse({
color: pet.color.value,
size: pet.si
AWS Lambdaのロガー設定
# はじめに
俺俺ロガーをつくりました。## 参考
– [AWS Lambda Logs to One JSON Line](https://stackoverflow.com/questions/50233013/aws-lambda-logs-to-one-json-line)
– [Lambda + Python3.7のログをJSON形式で出力してみる(行ごとに分割されない形で)](https://dev.classmethod.jp/articles/lambda-python-log-output-json/#toc-5)
– [AWS Lambda/PythonでJSON形式でログを出すベストプラクティス](https://qiita.com/tonluqclml/items/780370a4575781eb19df)## コード
ぶっちゃけ参考サイトのロガー設定を良いとこドリップしただけです。改良点は以下です。– エラーレベルや、ロガーを仕込んだ関数、位置が分かるようにしている。
– `logger(‘parameter %s’, x)`のような形で、第一引