- 1. AWS Lambdaを利用したS3連携ハンズオン
- 2. 【AWS】オプトインリージョンへのS3アクセス時の注意
- 3. Serverless Frameworkで画像(バイナリ)をダウンロードするAPI
- 4. AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
- 5. Cloud Formationを使ってGolang製LambdaのCICDをGitHub Actionsで構築
- 6. 「法人番号システム Web-API」を利用するための覚書
- 7. AWS上でデータの収集、加工、分析を行う
- 8. lambdaでquerystringが取得されていない場合の解決方法 by cloudfront
- 9. Serverless入門で作りたいと思っている簡単なサービス
- 10. Serverless Framework スケジュール実行で Lambda に引数を渡す方法
- 11. Amazon Redshift Data APIを使ったETL
- 12. 【超初心者向け】5分でAWS Lambda + API Gateway でRest APIを作る
- 13. ポートスキャンサンプル(python 3.8 on aws-λ )
- 14. CloudFrontでContent-Typeを強制的に書き換える
- 15. Amazon Step FunctionsのWorkflow StudioでParallel, Map, Choise状態の入出力を見る
- 16. CloudFrontのキャッシュを削除するコンソール画面の作成
- 17. アプリケーションのログをCloudWatch経由で通知してみた
- 18. Github Actions(IAMロール認証)を使ったLambdaへのデプロイ
- 19. AWS LambdaにPythonサードパーティ製ライブラリを入れる
- 20. AWS Lambda を使って雨の日を通知する Twitter bot を作る
AWS Lambdaを利用したS3連携ハンズオン
## はじめに
今回はAmazon S3にオブジェクトを保存した際にAWS Lambdaが起動する仕組みを作成します。動きとしてはS3に手動でオブジェクト(sample.jpg)を保存した際に、Lambdaが起動して”オブジェクトが保存されました”というログを表示する処理を行います。
## 構成図
![スクリーンショット 2021-11-13 8.42.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/e8a18378-b0af-082b-1254-293e4bc54dd8.png)## 実装
#### 1.Lambdaを設定する
##### 1.1 AWSマネジメントコンソールからLambdaを検索する
1.検索ウィンドウよりLambdaと打ち込む
![スクリーンショット 2021-11-13 8.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694365/25daf44c-393
【AWS】オプトインリージョンへのS3アクセス時の注意
# これは何?
とある事情でLambdaからS3へファイルを転送する構成で、中東(バーレーン)リージョンに導入する必要がありました。
が少し上手くいかなかったのでメモです。## 状況
いつも通りTerraformにて同じリソースをデプロイした。
しかしながら、S3へログを転送するLambdaでエラーが発生。## エラー内容
・エラー内容は以下、調べてみるとリージョン系のエラーっぽい。“`
2021-09-02T10:58:14.881Z fe9ac618-e5a7-46ad-b53e-4e35607db33a ERROR Cannot put object!.
2021-09-02T10:58:14.821Z fe9ac618-e5a7-46ad-b53e-4e35607db33a ERROR IllegalLocationConstraintException: The ap-northeast-1 location constraint is incompatible for the region specific endpoint this request w
Serverless Frameworkで画像(バイナリ)をダウンロードするAPI
# まえがき
Serverless FrameworkとAPI Gatewayで画像をダウンロードするAPIを作ってみました。
ネット上の情報だとうまくいかなかったので、試行錯誤を繰り返すことになり大変でした。# ソース
https://github.com/t-mine/qiita/tree/master/serverless-image-dl-api
# 手順
## Serverless Frameworkインストール
“`
npm install -g serverless
“`## プロジェクト作成
“`
serverless create –template aws-nodejs –name serverless-image-dl-api –path serverless-image-dl-api
“`## Serverless FrameworkにAWSの認証情報を設定
AdministratorAccessポリシーを付与したIAMユーザーを用意して、設定します。“`
serverless config credentials –pr
AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
# AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
こんな感じでシンプルに件名とメッセージだけ入れてメールで送信します。
![rapture_20211110233814.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356208/bfde2080-2972-f579-4fd0-a459887546f9.jpeg)
AWSのapi gateway, lambda, SES, S3を用いて、S3上にアップロードした静的ウェブサイト上からメールを送信したので、その手順を記録しておきます。大まかに以下のような手順となります。
* SESへのメールアドレスへの登録
* lambdaを用いてメールの送信用の関数を作成(今回はPythonで行った)
* api gatewayへのlambda関数の登録
* apiを叩くためのwebサイトの作成
* 作成したwebサイトをS3上にアップロードし、公開する。## SESへのメールアドレ
Cloud Formationを使ってGolang製LambdaのCICDをGitHub Actionsで構築
## 以下の記事を参照して頂ければと思います
https://note.com/shift_tech/n/n28a0b7e56680
**※※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です**
## 補足
ソースコード全体は以下です。https://github.com/yuta-katayama-23/Go/tree/cloudformation
「法人番号システム Web-API」を利用するための覚書
#はじめに
法人番号のAPIを利用するための覚書です。https://www.houjin-bangou.nta.go.jp/webapi/
#環境準備
1. 上記のサイトから利用規約を読んでアプリケーションIDの申し込みを行います。1. 数日で英数字13桁のアプリケーションIDが、いかつい封筒で送られてきました。
![DSC_0238.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/445683fa-addd-c9a7-36d4-4aef07ba8d1e.jpeg)1. Python環境を準備します。今回はAmazon lambdaを利用しました。
#実装
作成したコードです。法人番号を元にAPIから取得した会社名や県名を表示します。“`python:get_houjin_info.py
import json
import requests
import xml.etree.ElementTree as ETdef lambda_handler(event, c
AWS上でデータの収集、加工、分析を行う
#はじめに
kaggleなどでデータ分析の勉強を行う際は、既に加工されて分析しやすい形になったデータに対して分析を行うことが多いと思います。しかし実務ではデータの収集から行う必要性があったり、分析に適さない生データを扱うことになると思います。そこで一からデータの入手・加工・分析までの流れをやってみようということと、AWSの経験値を積むために、AWS上で一連の流れを処理するためのアーキテクチャを作成しました。
#学習方法
AWSについてはネットで調べつつ繋げていくのがメインでした。
個々の実装やサービス同士の繋げ方については、別で記事をあげていきたいなぁと思ってます。スクレイピングについては、udemyの「【4つの実案件で学ぶ】Python Webスクレイピング完全パック」で学びました。実案件を交えつつ、非常に分かりやすい内容となっています。
#作ったもの
一週間に一回、バイク王さんの中古バイクのデータを取得し、データ分析を行える状態まで持っていくアーキテクチャです。
下図が今回作成したものになります。![image.png](https://qiita-image-s
lambdaでquerystringが取得されていない場合の解決方法 by cloudfront
# 状況
– AWSのcloudfrontを利用している。
– API GatewayとLambdaを利用してweb APIサービスを構築している。
– postメソッドをクエリパラメータで利用している。# 発生したトラブル
– クエリパラメータ(URLの後ろに?で繋げる文字列)を利用してPOSTメソッドでLambda関数を実行したときに、querystringにクエリパラメータの値が入るはずなのに入っていない。
– 代替ドメイン名、ディストリビューションドメイン名のurlでpostするときのみ、querystringにクエリパラメータの値が入らないという状況。# 原因
– cloudfrontの`ビヘイビア`の設定の`キャッシュキーとオリジンリクエスト`の設定がされていなかったので、クエリパラメータが取得されなかった。# 解決方法
`キャッシュキーとオリジンリクエスト`で、`Legacy cache settings`を選択して、クエリ文字列を`すべて`に変更して、保存すると解決します。
– 少し待ってから、再度swaggerやcurlでpostメソッドを実行後、
Serverless入門で作りたいと思っている簡単なサービス
# 書き始め
まず最初に記事にしてしまえば、やるであろうという願望のもと、書き始めています。# 目標
AWSの以下のブログから、1日に1度、スクレイピングしてきて、新しいブログが発見できたら、そのブログのタイトルとURLを一緒に自分のアカウントにツイートさせる。以下のアーキテクチャを目指します。
![Architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593337/1c2a8e88-1972-39e8-3bdd-8593148acfa5.png)# 環境
– MacOS 11.6
– VisualStudio Code
– Python3.9
– Serverless Framework 2.65.0
– エンジニア二年目# 参考にするサイト
– Tweeter APIの使い方:https://qiita.com/bakira/items/00743d10ec42993f85eb
– Scrapy(スクレイピング)の使い方:
https://ai-inter
Serverless Framework スケジュール実行で Lambda に引数を渡す方法
`serverless.yml` で `input` を定義することで、スケジュール実行に任意の引数を渡すことができます
“`yml
# serverless.yml
events:
– schedule:
rate: rate(10 minutes)
enabled: false
input:
sampleKey: sampleValue # Lambda に渡したい値
“`JavaScript の場合、handler からは以下のように値を取得することができます
“`typescript
// handler.ts
module.exports.hello = async event => {
const { sampleKey } = event; // serverless.yml に定義した値を取得
};
“`:bulb: `input` 指定の詳細は [Serverless Framework | Schedule](https://www.serverless.com/framework/do
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