- 1. StreamAPIについてまとめてみた
- 2. AWS SAM CLIの設定切替
- 3. ALB + Lambdaでお手軽3分ベーシック認証
- 4. AWS Lambdaの書き方まとめ
- 5. Java Lambda の入出力型を試してみた〜Stream 編〜
- 6. Java Lambda の入出力型を試してみた〜POJO 編〜
- 7. Java Lambda の入出力型を試してみた〜Map 編〜
- 8. メール便忘れ防止ボタンをAWS IoT ボタンで作ってみた
- 9. CDK で API Gateway Mock 統合と Lambda Authorizer を作る
- 10. Java Lambda で API Gateway の Lambda Authorizer を実装する
- 11. Go×Qiita API×LambdaでTwitter Bot作った
- 12. AWSについての学習と簡単な構築とその手順(S3にドキュメントをアップロードしたらSlackに通知が送られる簡単なシステム)
- 13. AWS Lambdaでselenium×chromeを動かす時の AWS Lambda Layers のつくり方
- 14. CloudWatchEvents (EventBridge) + StepFunctionsを使ったCron処理で同時起動を防ぐ方法
- 15. AWS Cloud9でオウム返しLINE Botを作る
- 16. AWS Systems Manager、Lambdaを使ってS3のファイルをEC2(Windows)内にダウンロード(同期)してみた。
- 17. Chalice を使って AWS Lambda 上に Flask/Bottle のようにWebアプリケーションを構築する
- 18. Ruby×Sinatraで作ったSlackBotをAWS Lambdaで動かしてみる
- 19. AWS CDKを使ってlambda layerをデプロイしてみた
- 20. C#のLambdaプロジェクトを作成してVisual Studio for Macでデバッグ実行する
StreamAPIについてまとめてみた
## StreamAPIとは
> Stream APIは名前の通り、ストリーム(Stream)という流れてくるデータやイベントを処理するためのAPI群です。
> Java SE8で追加された
> StreamはListやMapなどのデータ集合をもとに生成し、0回以上の中間操作と、1回の終端操作を実行することで結果を得る。## StreamAPIの使い方
ざっくりと概要を掴んだ上で実際にソースを見てstreamを使用した処理と使用していない処理を比べて見ます。
サンプルとしてListを加工して一件づつ処理を行うコードを記載します。
※ラムダ式については詳しく記載しません。詳しくはこちらの記事を参照してください
[Javaラムダ式についてまとめてみた](https://qiita.com/yqxxnaxr1109/items/4045a7925340088bd7e3)“`java:streamなし
ListintegerList = Arrays.asList(1, 2, 3, 4, 5);
for (Integer i : integerList)
AWS SAM CLIの設定切替
# 経緯
新規プロダクトサービスの一環で、AWS SAMでServerlessを使ったんですが、今後の開発環境どうしよう?となりまして。
基本的なテストはローカルでいいにしてもステージング的な環境は欲しいし、複数のリリース先ってどうやって管理するん?
sam deployの設定をお手軽に切り替える、そんな機能ないの?
ドキュメントやhelp(当時sam –version 1.2.0)見てもそれっぽいものは見つからなかったんですが、AWS SAMのissue探してみたらあっさりありまして。https://github.com/aws/aws-sam-cli/issues/1615
Release 1.3.0 – Support for Multi Config
https://github.com/aws/aws-sam-cli/releases/tag/v1.3.0**ついこないだリリースされてた。**
※気づいた時点でちょうど1週間前しかしまだあんまり情報ないようなので、とりあえずざっくり情報書いておきます。
あんまり詳しいわけではないので、間違ってたらごめんね!(
ALB + Lambdaでお手軽3分ベーシック認証
## 概要
ALBのリスナールールの変更とLambdaの追加でベーシック認証を行います。
ベーシック認証の処理の流れとしては以下となります。
– ALBで`Authorization`ヘッダーを検証する
– 認証OKであれば、正規のターゲットグループに転送する
– 認証NGであれば、Lambdaをターゲットとするターゲットグループに転送する
– Lambdaではベーシック認証を要求するレスポンスを返す(なお、ALBからのヘルスチェックに対しては`200`を返すようにします)## 1. Lambda関数の作成
まず、ALBが存在するリージョンで、Lambda関数を作成します。
– `一から作成`を選択
– 関数名を入力(今回は`BasicAuth`とします)
– ランタイムは`Node.js 12.x`を選択
– 実行ロールは`基本的な Lambda アクセス権限で新しいロールを作成`を選択
– VPCは特に何も選択しない
– `関数の作成`ボタンを押下![Lambda関数の作成](https://qiita-image-store.s3.ap-northeast-1.
AWS Lambdaの書き方まとめ
AWS Lambda使って○○がしたいときってありますよね。
そんなときLambdaやプログラミング言語のスキルが低い私はけっこう苦戦したので、攻略方法を自分のためにも世のためにもまとめます。
なおこの記事で扱う言語はPythonのみです。
# 基本
## 何をしたいのかを整理するまずLambdaで何をどうしたいのかを整理します。
(他のサービスで実現できないかを考えておくことが前提)以下、例を挙げていきます。
– **RDSのスナップショットを2時間おきに取りたい**
自動スナップショットは1日1回しかバックアップを取得してくれないため作成する。必要なことは、RDSインスタンスの一覧を取得して、タグのついた対象のRDSインスタンス名を取得、スナップショットを実行する。もしくはRDS名を指定してスナップショットを実行する。
– **EBSをスナップショットしたら別リージョンにコピーしたい**
EBSのスナップショットはAmazon Data Lifecycle Manager (DLM)を用いれば自動化できるが、リージョンコピーまではできないため作成する。必要なこ
Java Lambda の入出力型を試してみた〜Stream 編〜
Java Lambda の入出力の型には、いろんなパターンが使えます。
* Map 方式
* POJO 方式
* InputStream/OutputStream 方式公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。
[POJO 編](https://qiita.com/kazfuku/items/095b4fb9c37638f57457) では、POJO クラスを使用して JSON を扱う方法を紹介しました。
最後に、InputStream/OutputStream を使った Stream 編です。
前回の POJO 編に手を加えて、Jackson を使って自前で Parse、Generate するコードになります。
“`Java
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.servic
Java Lambda の入出力型を試してみた〜POJO 編〜
Java Lambda の入出力の型には、いろんなパターンが使えます。
* Map 方式
* POJO 方式
* InputStream/OutputStream 方式公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。
[Map 編](https://qiita.com/kazfuku/items/6b2e9131eb5e6e175922) では、Map 型を使用して JSON を扱う方法を紹介しました。
Map 方式のコードをみてみると、Object 型から String/Integer/Long 型などへのキャストが多数現れます。
“`Java
public class MapFunction implements RequestHandler
Java Lambda の入出力型を試してみた〜Map 編〜
Java Lambda の入出力の型には、いろんなパターンが使えます。
* Map 方式
* POJO 方式
* InputStream/OutputStream 方式公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。
まずは、Map 方式から。
Lambda 関数に渡す入力 JSON はこれです。
“`Json
{
“name”: “orange juice”,
“price”: 1000,
“releaseDate”: 1601606387939,
“rate”: 4.5,
“rawMaterial”: [“orange”, “fragrance”],
“size”: {
“height”: 10,
“width”: 20,
“depth”: 30
}
}
“`以下のコードでは、この入
メール便忘れ防止ボタンをAWS IoT ボタンで作ってみた
#若手ならではのメール便担当
僕の会社では若手の仕事として「メール便」というものがあります。
会社からの送付・受取を毎週9時・11時・15時に行うというもので、これがまた結構責任重大。
__ヤッベェェェ忘れてた郵送物を送り損ねた!__なんてことがあったら普通に先輩に迷惑が掛かります。僕自身も数回メール便を忘れた実績があり、リマインダーをつけてもアラームを消してそのまま忘れることも(ひどい)。
どうにかメール便忘れを防ぐ仕組みを作りたいと思い、AWS IoTボタンを使って実装してみました。
こいつです#完成デモ
##メール便処理したらボタンを押す
送付したい郵便物をためておくメール便ボックスみたいなものがあり、そこに設置します。
メール便担当はちゃんとメール便を処理したよ!というときにボタンをポチーと押す、という
CDK で API Gateway Mock 統合と Lambda Authorizer を作る
CDK(TypeScript) で API Gateway(REST API) の Mock 統合と、Lambda Authorizer を作ってみました。
ソースコード全体はこちらです。
https://github.com/kazfuku/apigateway-java-lambda-authorizer/blob/master/lib/apigateway-java-lambda-authorizer-stack.ts## Mock 統合
Mock 統合はこの部分です。“`TypeScript
const mockIntegration = new apigateway.MockIntegration({
requestTemplates: {
‘application/json’: ‘{“statusCode”: 200}’
},
integrationResponses: [
{
statusCode: ‘200’,
responseTemplates: {
‘application/json’:
Java Lambda で API Gateway の Lambda Authorizer を実装する
API Gateway(Rest API) の Lambda Authorizer では、Lambda のレスポンスに [指定の JSON を返す](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html) 必要があります。
Lambda Authorizer って何?って方は [こちら](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) を。
Node.js だと、こんな感じで、そのまま JSON を返せます。便利ですね。
“`JavaScript
exports.handler = async (event) => {
console.log(JSON.stringify(event, null, 4));
return {
“princi
Go×Qiita API×LambdaでTwitter Bot作った
# はじめに
Goを勉強しているのですが、自分から情報を探しにいくと当たり前ですが自分が欲しい情報しか得られません。全体的な知識を広げていくには様々な記事を読んだりする必要があると思うのですが、なかなか腰が重い。
ということで、QiitaのGoタグがついた記事をツイートしてくれるTwitter Botを作成しました![@BotQiita](https://twitter.com/BotQiita)
↑フォローしてね。# アーキテクチャ
文章で説明してもわかるくらいの構成なのですが、アーキテクチャ図作ってみました。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631794/f1a9c70e-9e61-fcb4-a3d8-228d77793753.png)– Qiita APIでGoタグがついた記事を取得
– Twitter APIで認証&ツイート
– lambdaはGoで書かれており、cloudwatchで1時間毎に定期実行といった感じになってます。
#
AWSについての学習と簡単な構築とその手順(S3にドキュメントをアップロードしたらSlackに通知が送られる簡単なシステム)
こんにちは。
社会人になってから
「普通の生活をするのって難しいな」
と感じることが多くなりました。こまっちゃんです。約半年ぶりの投稿になります。さて、くだらない近況報告はさておき
今回もウェブテクデー(会社で用意してくれたお勉強の時間)で学習を行いました。AWSのオンライン研修を受講したのですが、やっぱり触ったことがないといまいちピンとこないので、S3とLambda、Slackを使用して簡単なシステムを構築したので共有します。
ちなみにですが既に同じ構成で投稿している方がいたので、今回はAWSがどれだけ簡単に構築作業ができるのかを分かってもらえればと思います。エンジニアの新人さん向けでもあると思います。
まずは今回使う3つのサービスの紹介からしていきます。
#1.S3ってなに?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600095/b0728461-b4c5-67fb-8e46-ae5d51ce4304.png)S3とは、AWSの中のサービスの1つで、「Simp
AWS Lambdaでselenium×chromeを動かす時の AWS Lambda Layers のつくり方
# この記事では
AWS Lambdaから、selenium×chromeでブラウザ操作したい時に、
Layer の作り方でハマったので投稿します。# やりたいこと
AWS Lambdaでselenium×chromeを動かしたい。# 環境
windows 10 Pro
python 3.7
chromdriver 2.37
headless-chromium 64.0.3282.167# 記載しないこと
-AWS lambda の関数作成、呼出方法
-selenium webdriverによるブラウザ操作ができるpythonプログラムの作り方。# つまづいたところ
1.AWS Lambda Layersを作る単位
2.AWS Lambda Layersへの搭載方法と呼び出し方##1.AWS Lambda Layersを作る単位
まず、AWS Lambda Layers とはlamda から共通的に使える共通関数のようなものです。
下記のようにLambda本体から参照される形で呼び出すことができます。
機能の1部を切り出すことで、lambda本体の
CloudWatchEvents (EventBridge) + StepFunctionsを使ったCron処理で同時起動を防ぐ方法
コンテナ化やサーバレス化が進み、従来実装していた方法が通用しない場面が出てきています。
その代表的なものの一つがバッチ処理です。
従来はバッチ処理を行うサーバが存在し、crontabコマンドで設定などを行っていました。
しかしコンテナ化、サーバレス化の影響でバッチサーバというものは存在しなくなります。AWS上でサーバレスなバッチ処理システムを構築するための方法の一つにCloudWatchEvents(最近、EventBridgeになりました。以下CWEと略します)を利用する方法があります。
しかし、このCWEにはイベントが多重に発生するという仕様があります。なお、Kubernetsの `CronJob` やGCPの `Cloud Scheduler` でも同様の仕様になっています。
バッチに同実行耐性や冪等性を持たせておけば問題ないのですが、長時間バッチや特殊処理を行うバッチ、作られたのが古くて手を入れづらいバッチなどはなかなか簡単にはいきません。## 概要
今回は、CWE + StepFuntionsを使ったバッチ処理で同時実行を防止する方法を考えました。
バッチ処理自体は
AWS Cloud9でオウム返しLINE Botを作る
## はじめに
AWS Cloud9 上で`SAM Local`を使い、オウム返しするLINE Botを作るメモ
## 構成図
こんなの作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/fcf8b256-e677-df6d-abae-fa8b53835c8e.png)
## 手順の概要
– [LINE Developers] プロバイダー作成
– [LINE Developers] 作成したプロバイダーにチャネルを設定
– [LINE Developers] 作成したチャネルで2つの情報を取得
– チャネルアクセストークン
– チャネルシークレット
– [AWS] Cloud9環境を用意する(東京リージョン: ap-northeast-1)
– [AWS-Cloud9] Lambdaを作成する
– Function name
– Application name
– [AWS] Lambdaスクリプト更新
– [AWS
AWS Systems Manager、Lambdaを使ってS3のファイルをEC2(Windows)内にダウンロード(同期)してみた。
#概要図
Lambda ⇒ Systems Manager ⇒ EC2 ⇒(同期コマンド)⇒ S3▼参考(にさせていただきました!)
https://dev.classmethod.jp/articles/lambda-s3-ec2-windows-sync/#作業ステップ
▼前提
・S3にバケットを作成し、ファイルをアップロード済み
###①IAMロールを作成(EC2用)
AmazonEC2RoleforSSM
※上記権限は範囲が広いため、別のポリシーへの移行が推奨されていますので、
仕事で使用する場合は下記ページをご確認いただければと思います。
https://dev.classmethod.jp/articles/check-amazonec2roleforssm-policy/
###②EC2インスタンス作成(windowsサーバ ※ami-038c59e921e8b9c7d 使いました)
ロールに”①”をアタッチ
⇒SystemsManagerでEC2のオペレーションができるようになる
※SSMエージェントはデフォルトでインストールされていました。
###③IA
Chalice を使って AWS Lambda 上に Flask/Bottle のようにWebアプリケーションを構築する
# はじめに
小規模なWebアプリケーションを作成する場合、Pythonでは [Flask](https://flask.palletsprojects.com/en/1.1.x/) や [Bottle](https://bottlepy.org/docs/dev/) を利用できる。
これらのフレームワークは「どのURLに対して」「どのプログラムを動かす」といった対応を Python のデコレータで対応させることで実現できる。
例えば、以下の Flask アプリケーションでは `/` にHTTPアクセスした時に `Hello, World!` を返すWebサーバーを実装しており、ルーティング・レスポンス応答が非常に分かりやすい。“`python:Flaskの公式ページから引用
# https://flask.palletsprojects.com/en/1.1.x/quickstart/
from flask import Flask
app = Flask(__name__)@app.route(‘/’)
def hello_world():
return ‘He
Ruby×Sinatraで作ったSlackBotをAWS Lambdaで動かしてみる
## 本記事で目差す構成
![Untitled Diagram(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/15835a3a-f744-3f00-b6ee-d465bd9a64fc.png)
① Slackで特定のアクションを実行する。(※今回はスラッシュコマンド)
② API Gatewayを介してLambdaを起動。
③ Lambdaに配置した関数を実行し情報を返す。![slackbot(2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/f1600dad-aaa5-b64f-a0dd-e24bcfb2e0ca.gif)
↑動作イメージとしてはこんな感じ。
今回はとある地域の現在気温を返してくれるSlackBotを動かしてみる。## 対象読者
– 簡単なSlackBotを作ってみたい人
– AWSのLambdaに触れてみたい人### Lambdaとは?
> A
AWS CDKを使ってlambda layerをデプロイしてみた
# はじめに
自己研鑽の一環でAWS CDKを使っているのですが、lambda layerをデプロイするようなサンプルがあまりないように感じたので、自分で試行錯誤しながらやってみました。# 開発環境
– aws-cdk:1.58.0
– cdk使用言語:typescript# 前提として
cdkを使えるような環境のセットアップが出来ている前提で記載していきます。
私は以下の記事を参考にさせていただきました。
https://dev.classmethod.jp/articles/aws-cdk-101-typescript/# ディレクトリ構成
本記事のディレクトリ構成は以下のようになっています。“`
├─backend
│ └─ src
│ ├─function
│ │ └─sample
│ └─layer
│ └─SharedLayer
│ └─nodejs
│ └─node_modules
└─cdk-stack
├─bin
├─lib
└─test
“
C#のLambdaプロジェクトを作成してVisual Studio for Macでデバッグ実行する
# はじめに
MacでC#のLambdaプロジェクトを作成し、Visual Studio for Macでテストプロジェクトをデバッグ実行した記録です。
### できたこと
* C#のLambdaプロジェクトを作成
* AWS Lambdaへのデプロイ
* AWS Lambdaでのテスト
* Visual Studio for Macでソリューション化
* テストプロジェクトのデバッグ実行AWS Lambda上で動くプログラムをアタッチしてデバッグしたわけではありません。
テストプロジェクトをローカルPC上でデバッグ実行しました。# 準備
### アクセスキー ID とシークレットアクセスキーを設定
PCからAWSにアクセスできるようにアクセスキー ID とシークレットアクセスキーを設定します。
* AWS CLIのインストール
インストール手順は以下のURLを参照してください。
参考:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html* 設定
以下のURLを参