- 0.0.1. Python3: Lambda で DynamoDB を使う
- 0.0.2. Basic認証付きWebページを定期的に確認し、エラーログ出力時、Slackに通知するLambdaを作成
- 0.0.3. URLパラメータで指定したEC2の起動・停止
- 0.0.4. 【FlutterWeb + AWS API Gateway + Lambda + DynamoDB】FlutterWebでAPIを呼び出した時にXMLHttpRequestエラーが発生した際の対処
- 0.0.5. Pythonの無名関数(ラムダ式)
- 0.0.6. サーバー内のエラーログ出力時、CloudWatch Logsサブスクリプションフィルタを使用し、LambdaでSlackに通知
- 0.0.7. Fortran 関数を AWS Lambda に Docker コンテナを使ってビルド & デプロイ
- 0.0.8. 定期的に最新データに生まれ変わる開発用DBを作成する
- 0.0.9. Kinesis データストリームを DynamoDB で保存
- 0.0.10. MySQL のクエリ処理速度早くしたい
- 0.0.11. 【Python】importが必要なPythonをAWS Lambda へ移行してみた EventBridge編
- 0.0.12. API Gateway+Lambda+SESで簡易お問い合わせフォーム実装
- 1. はじめに
- 2. HTMLの入力フォーム
- 3. お問い合わせフォーム
- 3.0.1. 【Python】importが必要なPythonをAWS Lambda へ移行してみた Lambda編
- 3.0.2. Lambda(Go)のCICDをGitHub Actionsで構築
- 3.0.3. serverless frameworkを試した
- 3.0.4. 【Python】importが必要なPythonをAWS Lambda へ移行してみた 事前準備編
- 3.0.5. AWS lambda@Edge単体テスト(イベントテンプレート)
- 3.0.6. GETリクエストするときは、リクエストボディを使わないでね
- 3.0.7. CloudFrontでS3の署名付きURLを発行する
- 3.0.8. Cloudformation + Lambdaで環境変数にパラメータストア-SecureString-の値を設定する
Python3: Lambda で DynamoDB を使う
こちらのプログラムを Lambda で使えるように書き換えました。
[Python3: DynamoDB を使う](https://qiita.com/ekzemplaro/items/e7e566a079c677d4e0fc)city という名前のテーブルを作成
“`py:dynamo_create_table.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# dynamo_create_table.py
#
# Sep/20/2021
# ——————————————————————–
import sys
import json
import boto3
#
# ——————————————————————–
def create_table_proc(name_table):
dynamodb = boto3.resource(‘dyn
Basic認証付きWebページを定期的に確認し、エラーログ出力時、Slackに通知するLambdaを作成
#はじめに
管理しているwebページにエラーが発生した場合、URL:`https:hoge.com/Log/error_20210920.log`にログが出力されます。Status Codeは200です。
対してエラーが発生していない場合、URL:`https:hoge.com/Log/error_20210920.log`にアクセスすると、Status Codeは、404 Not Foundが返されます。
一般の方には、`https:hoge.com/Log/error_20210920.log`にアクセスできないよう**Basic認証をします。**
Lambdaは、`https:hoge.com/Log/error_20210920.log`にアクセスしたときのStatus Codeの確認を実行します。**Basic認証付きWebページに対して、CloudWatch EventでLambdaを定期的にエラーログが出力されていないか確認し、出力されていればSlackに通知する仕組みを作成していきます。**
ちなみにURL末尾の`error_20210920.log`は、毎日、当日
URLパラメータで指定したEC2の起動・停止
## 最小限の手順でサクッと構成したい
「EC2の起動とか停止とかをURLアクセスでできないかね。URLパラメーターでサーバー名を指定して(Nameタグで指定して)起動する、みたいな。」
という要望は、EC2の起動・停止を手動で運用している環境で生じていると思います。
実現する投稿は多くあるけれども、セキュリティや拡張性も考えて実装している例が多く(まあそうするのが当然なので)、その結果として難しくなってしまい、やっぱコンソールで手動操作でいいやとあきらめてしまうことも考えられます。
ちょっともったいないですね。そこで、API Gateway + Lambda を使用して **できるだけ少ない手順で** 実装してみます。
入力値や変更する選択肢は全て書き起こしてみます。
・EC2は全て ap-northeast-1(東京リージョン)にある前提です。※AWSでEC2の”起動”はローンチのことを指しますが、ここでは最初のセリフのように”起動”を一般的な使われ方(AWSでは”開始”の意味)で使っています。
では進めましょう。
## 1.IAMポリシーの作成
IAM > IAM
【FlutterWeb + AWS API Gateway + Lambda + DynamoDB】FlutterWebでAPIを呼び出した時にXMLHttpRequestエラーが発生した際の対処
## はじめに
– [Tutorial: Build a CRUD API with Lambda and DynamoDB – Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-dynamo-db.html)
– [AWS API GatewayとLambdaでDynamoDB操作](https://business.ntt-east.co.jp/content/cloudsolution/column-try-20.html)
– [API Gateway + Lambda + DynamoDB](https://qiita.com/leomaro7/items/314a80b6d91f9e6b4060)上記などを参考にしてDynamoDBへ値を保存するAPIを作成し、Flutter Webで呼び出すとXMLHttpRequestエラーが発生したため、その際に対処した方法を備忘録として残します。
(余談ですが、普段のAndroidやiOSへビルドす
Pythonの無名関数(ラムダ式)
## 無名関数とは?
Pythonの関数には、無名関数と呼ばれるものがあり、これを使えばコードを簡素化できます。無名関数とは、その名の通り名前がない関数であり、関数をその場に記述する記法です。
無名関数を書くには、`lambda`というものを使います。普通の関数を作るときと同じで、`lambda`と記述して引数を設定した後、その処理を記述します。
簡単のため、足し算をするcalc_add関数を例に見ていきます。
### 足し算を行う関数での例
“`python# calc_add関数を定義
def calc_add(a, b):
return a + b# それを実行
calc_multi(3, 9)#calc_multi(3, 9) = 12
“`
`lambda`というキーワードを使って、その場で関数を記述する無名関数として書くと、このコードは、次のように書けます。“`python
(lambda a, b: a + b)(3, 9)
“`上の`lambda a, b:`が、`関数名(a, b)`に相当する部分であり、`:`で区切って、その関数
サーバー内のエラーログ出力時、CloudWatch Logsサブスクリプションフィルタを使用し、LambdaでSlackに通知
#はじめに
エラーログ(今回はlaravelのログ)出力時、CloudWatch Logsサブスクリプションフィルタを使用し、slackに通知する仕組みを作ります。
CloudWatch Logsの収集対象としているログにErrorという文字列が出力されたらLambdaが起動し、Slackに通知します。
#事前に準備
・EC2サーバーでwebページを構築済み
・統合 CloudWatch agent についての理解
統合 CloudWatch agentとは、EC2などのサーバーにインストールする CloudWatchのagent (パッケージ) のことです。
インストールすることでカスタムメトリクスが取得できるようになったり、CloudWatch Logs にログを送信できるようになります。#流れ
①EC2アタッチ用I
Fortran 関数を AWS Lambda に Docker コンテナを使ってビルド & デプロイ
# シリーズ目次
– [AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ](https://qiita.com/sasaco/items/b65ce36c05c50a74ac3e)
– Fortran 関数を AWS Lambda に Docker コンテナを使ってビルド & デプロイ# 概要
記事 [AWS Lambda Custom Runtimesを利用してFortranで数値計算 #reinvent](https://dev.classmethod.jp/articles/lambda-custom-runtimes-fortran/) を参考に
mac で Fortran 関数を AWS Lambda に Docker コンテナを使ってビルド & デプロイ する方法を書きました
AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ するには、前回の記事
以下の3ステップが必要です1.**Docker イメージ**を作成する
2.**Docker イメージ**を **Amazon ECR リポジトリ*
定期的に最新データに生まれ変わる開発用DBを作成する
#目的
以下の図のようにAWS上で、開発者全員で使える開発DBを作成する。
![スクリーンショット 2021-09-18 18.16.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664524/aa4dd4c8-4b2a-2a91-6a71-3d1b100802b9.png)## 開発DBで行いたいこと
■ 本番に近いデータで開発のテストを行いたい。
◦ メリット
・ 想定外のデータの存在によるバグの発生をなくす。
・ パフォーマンスの悪い箇所に気づきやすくする。■ 本番に近いデータで不具合の再現などを行いたい。
◦ メリット
・ 本番データでしか発生しない不具合の調査スピードを上げる。
・ 本番に近い自由にいじれるデータがあれば、
新しく入ってきたエンジニアのキャッチupや、ビジネスサイドとのコミニュケーションに役立つ。#実現方法
単純に本番DBから開発用DBを作る方法は以下の二つが挙げられる。
① 新しくDBを立ち上げて本番DBからダン
Kinesis データストリームを DynamoDB で保存
Kinesis データストリームを DynamoDB で保存する Lambda の環境構築です。
Kinesis データストリームの作成はこちら
[AWSIOT: デバイスデータを Kinesis データストリームに送信](https://qiita.com/ekzemplaro/items/d9b2689b4c6c1b038300)Lambda のプログラムはこちらです。
[lambda_function.py](https://awsj-iot-handson.s3-ap-northeast-1.amazonaws.com/aws-iot-core-workshop/lambda_function.py)次の5ステップになります。
1) DynamoDB でテーブルを作成
>テーブル名 table_sep19>|キー|名前|型|
>|:—————–|:——————|:——————|
>|ハッシュキー |deviceid |String |
>|レインジキー |timestamp |Str
MySQL のクエリ処理速度早くしたい
#はじめに
Laravel ✖️ Lambda ✖️ API Gateway ✖️ RDS MySQL
によるアプリケーションで、30万レコード以上あるテーブルを同じく3以上の他テーブルたち(それぞれ数万行ある)と結合して読み込む際に、処理速度のアップで四苦八苦したので記録として残します。APIGateway を使っており、30秒以内にレスポンスを返す必要がありました。
## バージョン
MySQL 5.7
# 調べてわかったこと試したこと
## キーワード大文字小文字で処理速度が変わる?
**少なくともMySQLでは変わりません。**
この記事では変わると書かれてありますが。。これは他のDBエンジンのことだと思ってます。
## Nested Loop Join を知る
2つのテーブルを結合させるときに使うJOIN
その際の結合方法が数種類あるらしいです。
処理速度を上げたいときに理解必須の仕組みです。– merge join
– hash join
– n
【Python】importが必要なPythonをAWS Lambda へ移行してみた EventBridge編
#昨日の記事からの続きとなります。
https://qiita.com/hirockio2206/items/9129b5d541452c958bf8https://qiita.com/hirockio2206/items/4f3d57ae8291bad31004
◆事前準備編◆
1.macOSのデスクトップにtempフォルダを作る
2.tempフォルダにccxtをpip3でインストールする
3.既に作ったpythonプログラムを lambda_function.py へリネームしてtempフォルダに入れる
4.lambda_function.py の先頭に指定プログラムを追記する
5.ターミナルでzipでまとめる◆Lambda編◆
6.AWSへログインし、5をアップロードする◆EventBridge編◆
7.EventBridge (CloudWatch Events)に定期実行ルールを登録する####今回は7の説明をします。
#手順
####7.EventBridge (CloudWatch Events)に定期実行ルールを登録する
7-1.AWS
API Gateway+Lambda+SESで簡易お問い合わせフォーム実装
はじめに
htmlフォームからPOST送信して、SESを使って、通知メールが飛び、リダイレクトページを返却するお問い合わせフォームを実装した。実装手順を忘れないように、備忘として残しておく。
※当初リターンメールを返す想定だったので、SESにしているが、SNSでもいいHTMLの入力フォーム
値をPOSTして、API Gatewayに渡すためのサンプルフォーム
※API Gatewayのエンドポイントの部分は後ほど修正する必要あり“`html:sample.html
お問い合わせフォーム
お問い合わせフォーム
【Python】importが必要なPythonをAWS Lambda へ移行してみた Lambda編
#はじめに
昨日の記事からの続きとなります。https://qiita.com/hirockio2206/items/9129b5d541452c958bf8
◆事前準備編◆
1.macOSのデスクトップにtempフォルダを作る
2.tempフォルダにccxtをpip3でインストールする
3.既に作ったpythonプログラムを lambda_function.py へリネームしてtempフォルダに入れる
4.lambda_function.py の先頭に指定プログラムを追記する
5.ターミナルでzipでまとめる◆Lambda編◆
6.AWSへログインし、5をアップロードする◆EventBridge編◆
7.EventBridge (CloudWatch Events)に定期実行ルールを登録する####今回は6の説明をします。(次回7を説明します)
#手順
####6.AWSへログインし、5をアップロードする6-1.AWSのマネジメントコンソールヘログインします。
https://aws.amazon.com/jp/console/
Lambda(Go)のCICDをGitHub Actionsで構築
## 以下の記事を参照して頂ければと思います
https://note.com/shift_tech/n/n6eebcb1393da
**※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です**
## 補足
GitHub ActionsのCICDパイプラインの結果は以下https://github.com/yuta-katayama-23/Go/actions/runs/1190312687
update-function-codeの実行後のレスポンスで環境変数が見えてしまっているパイプラインの結果は以下
https://github.com/yuta-katayama-23/Go/runs/3400418691?check_suite_focus=true
serverless frameworkを試した
# 背景
* AWS上にlambda関数を開発した
* codecommitから各環境にlambda関数をデプロイする
* DBやS3と接続するのでローカルで開発してテストしにくい# serverless frameworkとは
* サーバーレス開発ツーるである
* https://github.com/serverless/serverless## メリット
* インフラ自動構築
* Cloudformationのstackを自動的に作れる
* デプロイ簡単
* Lambda関数を1コマンドでデプロイできる
* 複数functionを管理とデプロイできる
* 環境と環境変数の管理
* 環境を分けることが簡単
* Dev, stg, pro
* 環境変数を簡単に定義
* IAMロールの定義も簡単
* Functionよりroleを定義できる# 簡単な使い方
* serverless frameworkのインストール“`
npm install –
【Python】importが必要なPythonをAWS Lambda へ移行してみた 事前準備編
#はじめに
昨日、macOSのcronで自動実行するためにmacOSの省電力モードをOFFにすると1ヶ月で1,200円程度電気代がかかるのでは!?という記事を書きました(あくまで試算です)https://qiita.com/hirockio2206/items/2ce4fcac798a21ad40b4
やはり、オンプレ運用はよくないと。これからはクラウドっしょ!
ただ、AWS Lambdaってよくわからん。
って思っている方いますね?(私)ってことで本日はAWS Lambda へPython実行環境を移行にチャレンジしてみました。
少し長くなるので、事前準備編とLambda編とEventBridge編で分けて投稿します。#環境
・既にAWSのアカウントを持っている(お持ちでない方でもすぐ発行できますよ。)
・Python3.9
・macOS Catalina10.15.7
・定期実行したいpythonがある#事前解説
今回はサンプルとして、ccxtという複数の仮想通貨取引所のAPI操作が集約されたライブラリをAWS Lambdaで実行したいと思います。AWS La
AWS lambda@Edge単体テスト(イベントテンプレート)
AWS lambdaを書く時、いちいちデプロイしてテストしてました。
実際どういうリクエストが来るかはある程度イベントテンプレートでまかなえるようです。
lambda@edgeを書いていて、デプロイなどがとても面倒でしたが、これでかなり進みました。以下の画像は`cloudfront-normalize-querystring-to-improve-cache-hit`というテンプレートです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213689/00c80761-4629-87d1-e7fb-5760718bea81.png)
単純にCloudfrontにGetリクエストが来たような感じですかね
“`
curl https://[CFドメイン]/test?size=LARGE&color=RED
“`実際に受け取るeventと比較してキー名などは一致してるみたいなので、使えそう.
もしCookieをつけるなら以下のようなものを`headers`ブロックに追
GETリクエストするときは、リクエストボディを使わないでね
# 結論
GETリクエストするときは、リクエストボディではなくクエリストリングかパスパラメータを使いましょう。(掲題どおり)# ハマったこと
クライアント側はこのように呼び出し(ちなみにReactでAmplifyを使っています)
“`react:apiCall.tsx
import { API } from “aws-amplify”;export const hoge = async (
hogeId: string
): Promise=> {
const apiName = “hogeAPI”;
const path = “/”;
const params = {
body: {
hogeId: hogeId,
},
};
return await API.get(apiName, path, params);
};
“`APIはLambdaを使います。Lambda側ではこのように受け取り
“`js:lambda.js
exports.handler = async (event) => {
CloudFrontでS3の署名付きURLを発行する
CloudFrontでS3の署名付きURLを発行する方法です。
## 暗号鍵、公開鍵の生成
“`bash
openssl genrsa -out private_key.pem 2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
“`## CloudFrontキーグループに公開鍵の追加
ここはAWSコンソールで作成するだけなので割愛します。
## SecretsManagerに暗号鍵を登録
今回、作成した暗号鍵はシークレットキーに保存し、Lambdaから取得します。
AWSコンソールを利用して暗号鍵を貼り付けると値がおかしくなるようなので
AWS CLIを利用し登録します。“`bash
aws secretsmanager create-secret –name <シークレット名> –secret-string file://private_key.pem –region ap-northeast-1
“`## 署名付きURLの発行(Lambda)
“`python
imp
Cloudformation + Lambdaで環境変数にパラメータストア-SecureString-の値を設定する
LambdaProjectを新設したので、デプロイ周りを構築中。
環境変数をパラメータストアから取得しようとしたら・・・“`
SSM Secure reference is not supported in: [AWS::Lambda::Function/Properties/Environment/Variables/ENV_NAME]
“`
なん….だと?[公式ドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#template-parameters-dynamic-patterns-resources)を見ると。
> Resources that support dynamic parameter patterns for secure strings
Resources that support the ssm-secure dynamic reference pattern currently include:
– AW