- 1. Amazon Redshift Data APIを使ったETL
- 2. 【超初心者向け】5分でAWS Lambda + API Gateway でRest APIを作る
- 3. ポートスキャンサンプル(python 3.8 on aws-λ )
- 4. CloudFrontでContent-Typeを強制的に書き換える
- 5. Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態の入出力を見る
- 6. CloudFrontのキャッシュを削除するコンソール画面の作成
- 7. アプリケーションのログをCloudWatch経由で通知してみた
- 8. Github Actions(IAMロール認証)を使ったLambdaへのデプロイ
- 9. AWS LambdaにPythonサードパーティ製ライブラリを入れる
- 10. AWS Lambda を使って雨の日を通知する Twitter bot を作る
- 11. Lambda(SAM)からAWS SQS(LocalStack) へメッセージ送信/受信を行う方法 メモ
- 12. LambdaからRDSへ接続してみる
- 13. pythonのlambda関数についてまとめてみた
- 14. Step Functionsを使ってStorage Transfer Serviceの転送ジョブを管理する
- 15. 【AWS Lambda】 Lambdaで初めて環境変数を使ってみたのでその紹介とSAMでの使い方
- 16. Lambdaオーソライザで任意のエラーレスポンスを返却する
- 17. Terraform + SAM で苦労した話
- 18. LocalStack とSAM CLIを用いたローカルLambda +DynamoDB API 作成方法メモ
- 19. AWS Lambda+Seleniumでスクレイピングする話
- 20. Lambda (SAM CLI) + MySQL(docker-compose)を利用した REST API作成方法メモ
Amazon Redshift Data APIを使ったETL
# はじめに
始めまして、株式会社ジールの@KimiyukiMuramatsuです。
AWSを使ったデータ分析基盤の構築を業務としております。
その中で得たノウハウをQiitaを通して発信していきたいと思います。Lambdaを使って、S3上のファイルに対してETL処理を行い、Redshiftにロードする方法を検討しておりました。
Redshift Data APIを使って実現できると考え、検証してみました。
Redshift Data APIを使うことで、LambdaからRedshiftのSQLを呼び出すことができます。
SQLを使えれば、Redshift Spectrumにより、S3上のファイルをETL処理してからRedshiftのテーブルにロードできます。
(Insert Into Select From ~ )
# 検証したいこと
* Redshift Data APIを使って、LambdaからRedshif
【超初心者向け】5分でAWS Lambda + API Gateway でRest APIを作る
# 作ったもの
![](https://github.com/nmasashi/qiita/blob/main/lambda/apigateway_lambada/images/lambda.png?raw=true)
ただ、以下の json を返すだけの RestAPI です。
AWSを最近勉強し始めたよちよち歩きのエンジニアの第一歩です:v:“`json
{
“statusCode”: 200,
“body”: “\”Hello from Lambda!\””
}
“`# 手順
用意するもの
– AWS アカウント
## lambda 関数作成
1. 任意のアカウントでログイン
1. [Lambda 関数一覧](https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/functions)にアクセス
1. 「関数の作成」をクリック
![](https://github.com/nmasashi/qiita/blob/main/lambda/api
ポートスキャンサンプル(python 3.8 on aws-λ )
メモリは1GB推奨。がっつりスキャンするので、要チューニングして利用のこと。
“`python
import json
import socket
import random
from multiprocessing import Process, Pipe
import urllib.request#向き先
TARGET_HOST=’hogehoge.com’#通知先WEBHOOK
webhook = “https://discord.com/api/webhooks/9999999999999999/hogehoge”#生成するスレッド数:CONNECTION多重度と同義。400辺りでファイルディスクリプタ関連エラー
THREAD_MAX=300
#検査レート:何%のポートを検査対象とするか。0.3の場合、検査ポートの30%をScan対象とする
#TODO:アホほど回るのでチューニングすること
SCAN_RATE=0.3
#タイムアウト:socketのタイムアウト時間(秒)。0.3くらいで検査できそう
SOCK_TIMEOUT=0.3def portscan(
CloudFrontでContent-Typeを強制的に書き換える
## 背景
とある静的なWebサイトを、S3+CloudFrontという王道構成で運営しています。
CyberDuckというとても便利なFTPソフトがあり、そこからS3にもファイルをアップロードしたのですが、なぜか、全部のファイルが “`Content-Type: binary/octet-stream“` になってしまいました。
![スクリーンショット 2021-11-07 17.33.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135431/69e23012-35c2-0e1f-c4dc-5c7cac9adabf.png)
一つ一つ変更したり、CLIで変換してもいいのですが、面倒なのでLambda@Edgeで変換します。
Origin Response で下記のLambdaFunctionを実行するように設定しました。“`js:index.js
‘use strict’
exports.handler = (event, context, callback) => {
Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態の入出力を見る
# はじめに
本記事では、Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態を含むステートマシンを作成し、その入出力を見ていきます。Step Functionsでは、Parallelで静的並列処理、Mapで動的並列処理を実現することができます。本記事の特徴は以下です。
* Workflow Studioを使ってグラフィカルに作る
* Parallel, Map, Choise状態とLambda関数を使用
* 実践的な処理というよりは、入出力を明確にするテスト的な処理を作る
* LambdaでPythonを使用しますが、簡単すぎるコードしかないため未経験者でも問題ありません以下の内容は含まれません。
* ASL(次節で説明)を使って作る方法
# Step Functionsとは?
サーバレスオーケストレーションサービスと [公式][1] では言われています。分かり易く言い換えると、サーバレスなAWSサービス(主に [AWS Lambda][2] )をつなげて1つのワークフローを作成できるサービス
CloudFrontのキャッシュを削除するコンソール画面の作成
#はじめに
Cloudfrontのキャッシュ削除は、AWSコンソールから操作しますが、チームで開発時やお客さんに納品後、お客さん側でキャッシュ削除する場合、キャッシュ削除するためだけにIAMユーザーを作成するのは手間だったり不都合があったため、S3に配置したhtmlでEC2を操作できる仕組みを作成しました。
ただし、メンバー以外に操作されないよう、S3にはCloudfront OAI、CloudFrontとApiGatewayにはBasic認証をかけてます。#構成図
![スクリーンショット 2021-11-03 23.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/7befb5e6-1a3c-d94c-0048-988776e47d3a.png)CloudFrontのキャッシュ削除のコンソール画面用のhtmlをS3に配置して、CloudFrontで配信し、S3からアクセスできないよう制限します。
#完成ページ
![スクリーンショット 2021-11-03 23.21
アプリケーションのログをCloudWatch経由で通知してみた
前回に引き続き社内システムのお話です。
社内システムをAWSのCloudWatchに集約していますが、プロジェクト内でChatWorkを利用しているため、
チャットグループを作成し、通知するということをしてみましたので紹介します。
※ちなみに今回は一部AWSの方にもサポートいただきました#目次
[1.今回の構成について](#今回の構成について)
[2.AWS Systems Managerのパラメータストアで設定ファイルを準備する](#aws-systems-managerのパラメータストアで設定ファイルを準備する)
[3.AWS Systems ManagerのAmazonCloudWatch-ManageAgentを実行する](#aws-systems-managerのamazoncloudwatch-manageagentを実行する)
[4.Lambda経由でメール及びChatWorkへ通知する](#lambda経由でメール及びchatworkへ通知する)
[5.詰まった点](#詰まった点)
[6.まとめ](#まとめ)
[7.参考URL](#参考url)## 今回の構成
Github Actions(IAMロール認証)を使ったLambdaへのデプロイ
# はじめに
これまでGit ActionsでAWSサービスと連携する場合は、アクセスキーとシークレットキーといったクレデンシャル情報を使っていたが、IAMロール認証で行えるようになったとのこと。https://dev.classmethod.jp/articles/github-actions-without-permanent-credential/
ということで、IAMロール認証を用いたGithub ActionsのLambda関数デプロイの方法をまとめてみた。
# IAMロールの作成
– 最初に認証に必要なIAMロールの作成を行う。
– 下記のように進めていく。## IAMポリシーの作成
– IAMポリシーを作成。
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”,
“ia
AWS LambdaにPythonサードパーティ製ライブラリを入れる
# はじめに
AWS Lambda はサーバレスでイベント駆動型のコンピューティングサービスであり、非常に手軽に使えるサービスとなっている。Amazon S3 のような AWS の他サービスから Lambda をトリガーすることもでき、使い勝手が良いのだがサードパーティ製ライブラリを扱う際にはひと手間かかってしまう。そこで本記事では、Python のサードパーティ製ライブラリを Lambda で扱うための方法を紹介する。[How to use external libraries in Lambda Function](https://wakeupcoders.medium.com/how-to-use-external-libraries-in-lambda-function-df1cee4a7c3a)、[Managing external libraries in AWS lambda functions](https://dev.to/alim1496/managing-external-libraries-in-aws-lambda-functions-1g0m) を参考にし
AWS Lambda を使って雨の日を通知する Twitter bot を作る
# つくったもの
もしよければ使ってやってください:bow_tone1:
傘いるで bot(東京)[@kasairu_tokyo](https://twitter.com/kasairu_tokyo)
傘いるで bot(大阪)[@kasairu_osaka](https://twitter.com/kasairu_osaka)1. 毎朝午前 6 時にお天気情報を取得
1. 雨が降る場合はツイート(降らない日は無言)今日、傘いるで
10/31 06:00:43
6 時 小雨
9 時 厚い雲
12 時 厚い雲
15 時 小雨
18 時 小雨
21 時 小雨— 傘いるでbot(東京) (@kasairu_tokyo) O
Lambda(SAM)からAWS SQS(LocalStack) へメッセージ送信/受信を行う方法 メモ
* LocalStack上で動くAWS SQSのキューに対してAWS SAM CLIで動くLambdaからメッセージ送受信を行う方法をメモする。
## 構成
![sam-sqs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/862d727c-e543-8b0d-7c15-193655e62a39.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.1:53
LambdaからRDSへ接続してみる
#ご挨拶
タイトルの通りLambdaからRDSへ接続してみたので記事を書いていきます。
最近業務でLambdaを使用することが増えてきたので勉強になればと思いやってみました。
#やること
LambdaでプライベートサブネットにあるRDS MySQLに向けてSQLを実行して実行結果を確認します。
今回RDSの作成はCloudFormationを使用しています。
事前にプライベートサブネットを二つ作成しています。
以下の手順で進んでいきます。1. Lambda関数の作成
2. IAMロールの編集
3. RDSの作成
4. LambdaをRDSに接続できるように設定
5. テスト実行###構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/080a41ab-852d-2f12-2066-cf1b11abea77.png)#参考にしたサイト
[チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の設定](https://
pythonのlambda関数についてまとめてみた
今回のお題
–
今回は、pythonのlambda関数について取り上げます。例によって自分用のメモです。
目次
–– lambda関数概要
– 基本的な使い方
– 引数の渡し方のパターンlambda関数概要
–
まずは、lambda関数とはそもそも何ぞやという話から始めます。一旦は能書きから入りますが、イメージが湧かなければ一度飛ばした後に次項の具体例をみた上で戻ってきていただいても構いません。
ざっくりと言うと、lambda関数とは名前をつけずに定義できる関数のことを言います。
JavaScriptの無名関数に近いですね。
欠点としては、名前がつかないので複数回使いまわせない、それからpythonの場合は1行でしか書けずif文なども使えない、などがあります。
しかし一度別の箇所で定義したものを呼び出して、と言う手間を省けるので一度しか使わない関数を扱う場合にはコードがスッキリしますし、とりわけ関数の戻り値を別の関数の引数として使いたい場合には大変重宝します。
では、基本的な使い方を見ていきましょう。
基本的な使い方
–“`python
# 公式
l
Step Functionsを使ってStorage Transfer Serviceの転送ジョブを管理する
# 概要
https://qiita.com/okadarhi/items/5ff734c6472b83d51597 の続き。
AWS側で転送元のデータを作成するが、作成処理が完全に完了してから転送ジョブを実行して欲しいという要望があり、スケジュール実行ではなく、AWS側から手動で転送ジョブを実行する方法を検討した。
転送ジョブを実行するAPIがあるのだが、それは実行しかしてくれず、転送ジョブの成否は別のAPIで確認する必要があった。
実行するAPI: https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferJobs/run
確認するAPI: https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferOperations/get
なので、転送ジョブの実行と確認を管理するジョブを作成しようと思い、Step Functionsを採用することにした。
その時行った検証作業を備忘録としてまとめる。# 手順
## L
【AWS Lambda】 Lambdaで初めて環境変数を使ってみたのでその紹介とSAMでの使い方
#1. はじめに
私はlambdaを使用する際、環境毎にlambdaを作成しテスト環境ではこの関数、本番環境ではこの関数を使う、ってことをよくやっていました。そうなってくると、本番環境ではこのDBを参照、テスト環境ではこのDBを参照といったことをやりたくなってきます。私は aws-sam-cli を用いてlambdaの管理を行っているのですが、環境毎にコードの中身を書き換えることがうまくできていませんでした。
しかし! 今回紹介する環境変数というlmandaの機能を使用してみたところ抱えていた問題が解決したため、せっかくなんで紹介します。#2. lambda環境変数とは
環境変数とは何でしょうか。[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html)には以下のように記述されています。>環境変数を使用すると、コードを更新せずに関数の動作を調整できます。環境変数は、関数のバージョン固有の設定に保存される文字列のペアです。Lambda ランタイムは、環境変
Lambdaオーソライザで任意のエラーレスポンスを返却する
Lambdaオーソライザで認証結果に応じて
任意のステータスコードやエラーメッセージを返却する方法です。## 返却可能なステータスコード
ステータスコード 200, 401, 403, 500 を返却することが可能です。ステータスコードですが通常のLambdaのように直接ステータスコードを
返却することは出来ません。以下の方法でステータスコードを制御します。
・Allow IAMポリシーを返却 → 200 OK レスポンスが返却される。
・Deny IAMポリシーを返却 → 403 Forbidden レスポンスが返却される。
・’unauthorized’トークンを返却 → 401 Unauthorized レスポンスが返却される。
・上記以外のトークンを返却 → 500 Invalid token レスポンスが返却される。## エラーメッセージのカスタマイズ
403レスポンス返却時は、contextを利用することで対応が可能。
DenyのIAMポリシーの中で設定したcontextオブジェクトの情報は、
ゲートウェイレスポンスにてアクセスすることが可能です。(例)
Terraform + SAM で苦労した話
## はじめに
以下のブログを参考に SAM を Terraform に組み込んでみたところ、
色々苦労することになったので備忘録を残します
https://blog.youyo.io/posts/terraform-aws-sam/
## 実行環境
– Terraform: 1.0.6
– Terraform providers:
– aws: 3.58.0
– local: 2.1.0
– null: 3.1.0
– SAM: 1.24.1## 背景
AWS Lambda のデプロイに昔は apex を使っていましたが、メンテナンスされなくなってしまいました
https://github.com/apex/apex
昔は他に便利なツールもなかったため、
Docker コンテナで依存ライブラリをインストールしてから圧縮するスクリプトを自前で組みましたそれを Terraform から呼んで関数毎にビルド・デプロイする方法です
自前実装で長く運用してきたものの、
やはり Lambda 周りが無駄に複雑になってしまっているため、
公式の Lambda
LocalStack とSAM CLIを用いたローカルLambda +DynamoDB API 作成方法メモ
* LocalStackとSAM CLIを用いたローカルLambda + DynamoDB APIの作成方法についてメモする。
* POSTメソッドでリクエストボディに指定した値をDynamoDBテーブル検索して返却する。## 構成
![sam+dynamo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/5c881d46-febb-81c6-196c-36d81970d5d9.png)
## LocalStack 準備
* [こちら](https://qiita.com/KWS_0901/items/f9579d9c360cf42dc97d)の手順でDocker LocalStack環境を準備しておく。
## Dynamo DB 準備
* テーブル(`sample-table`)作成
“`shell
aws dynamodb create-table –table-name sample-table –attribute-definitions Attr
AWS Lambda+Seleniumでスクレイピングする話
# 導入
業務の一環で実行しているスクレイピング。
python + seleniumでツールを作って定時に社内サーバーから自動実行していた。ある日、設定していた社内サーバーが計画停止。
とりあえずは自分の環境で手動実行してデータは取得したけれど・・・「技術として汎用性もあるし、これを機にAWS Lambdaへ移動や!」
ということでやってみたのが今回のお話。
# 前提
* 実行環境:AWS Lambda
* 設定環境1:Windows10
* 設定環境2:debian10(権限設定用リモート環境・WSL2とかでもいけるかも)
* 言語:python3.7
* 追加パッケージ:selenium# コード
AWS Lambdaに配置したソースコードがこちら。
サンプルとしてYahooのプロ野球の順位表から、セ・リーグの順位を抜き出してみた。
https://baseball.yahoo.co.jp/npb/standings/
“` lambda_function.py
from selenium import webdriver
from sele
Lambda (SAM CLI) + MySQL(docker-compose)を利用した REST API作成方法メモ
* ローカル環境でLambda(SAM) + MySQL(docker-compose)を利用したAPIを作成する方法についてメモする。
## AWS SAM(Serverless Application Model)
* サーバーレスアプリのデプロイに特化したCloudFormationの拡張機能。
* YAMLもしくはJSONでリソース定義する。### SAM CLI
* SAMを利用した開発サポートツール
* サーバーレスアプリのひな形作成、ビルド、AWSへのデプロイができる。
* 開発者のローカル環境でLambdaをDockerコンテナ起動できる。## 構成
![sam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/28ba6b48-16b7-3127-3657-9604cc31e631.png)
## 準備
* SAM CLIインストール
“`shell
brew tap aws/tap
brew install aws-sam-cli