テック

AWS KinesisをLambdaのイベントリソースとして設定する

KinesisはLambdaのイベントリソースとして設定することができます。 Lambda関数にKinesisイベントリソースを設定する Kinesisのストリームにデータが積まれた時にLambda関数を実行する $ aws lambda create-event-source-mapping \ --event-source-arn arn:a…

AWS Kinesisのストリームへの入力レコード数を監視する

KinesisとはSQSのようなデータ配送サービス。SQSと違って、大量データの書き込み、転送の用途に向いています。つまりログデータのように連続的に大量に流れてくるデータの転送などに有効。 一定期間、stream内に保管され、順列に読み出しても削除されるよう…

AWS CDKを使用してAWS構成をデプロイする

AWS CDKはPythonやTypeScriptで記述できるAWSの各サービスを構築からデプロイまで行えるツール。 つまり、CloudFormationのテンプレートをプログラム言語で記述できる。というツール。 cdkはnpmパッケージとして提供されています。 cdkからAWSプロジェクトの…

書籍:AWS Lambda実践ガイド

一通り読みながら手を動かし終えました。 (function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a; b[a]=b[a]||function(){arguments.currentScript=c.currentScript ||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)}; c.getElementByI…

AWS SESから送信したBounceメールを処理する

SESで送信したEメールがBounce(不達)だった場合、Bounce情報をLambda関数で受け取る例。 BounceはSESの差出人アドレス宛に通知がくるので、 SESのアドレスにBounce通知時にSNSトピックに通知する設定を行う SNSはサブスクリプション先のLambdaを起動する 流…

AWS DynamoDB 対象のアイテムが更新できたかを確認する

RDBのupdateやdeleteは影響を受けた行数をAffectedRowsで確認できるが、DynamoDBの場合、ReturnValueでそれに該当するattributes指定はないようです。 update tablename set field1 = 1 where pkey = :val and field1 = 0 RDBのこのようなケースの場合、pkey…

AWS SNSについて 通知の送信とサブスクリプションの種類

SNS (Simple Notification Service)はPub/Subメッセージングサービスを提供する。 他サービスからTopicに対しての通知を受け取り、他サービスへ再び通知します。 通知先はサブスクリプションで定義を行います。 SQSがメッセージの配送だとしたら、SNSは到着…

AWS SQSメッセージの取得と削除

Python boto3のサンプルコードを示します。 Queueメッセージの取得 import boto3 sqs = boto3.resource('sqs') #取得するqueue queueBox = sqs.get_queue_by_name(QueueName='YourQueueName') #queueメッセージの取得 messages = queueBox.receive_messages(…

AWS DynamoDBのフェッチ操作

Python boto3でのDynamoDBのデータフェッチ。一覧性のあるデータを取得する場合はqueryメソッドを使用します。 ステップ 4: データをクエリおよびスキャンする - Amazon DynamoDB scanでもフィルタリングは出来るが、全件取得した後にフィルタするので、速度…

AWS SQSへのメッセージ送信

SQS( Simple Queue Service )は完全マネージドのメッセージキューイングサービス。 各システム間でのメッセージ伝達に利用します。 データベースが情報の記録を目的としたものだとしたら、キューサービスはメッセージの配送を目的とする。 尚、SQSの標準キュ…

Scala AWS SESを使用してメール送信を行う

AWS Java SDK v2 を使用して、ScalaからAmazon SES( Simple Emai Service )を利用してメール送信を行います。 こちらのページにマルチパートのメールの送信方法も含めて詳細に記述されています。 AWS SDK を使用したメールの送信 - Amazon Simple Email Serv…

AWS SESを使用してメール送信を行う

AWS SES( Simple Email Service )はAWS上で利用できるMTA。みたいなもの。 AWSから提供されているライブラリを利用することでビルトインのメールサーバのような感覚で使用できます。 SESのリージョン SESは東京リージョンはサポート対象外なので、対応してい…

AWS S3 パブリックアクセス禁止のオブジェクトに署名して一時的にアクセス可能なURLを生成する

S3のオブジェクトは署名を付与することで、署名が有効な期間内中はアクセス可能にすることができます。 署名の作成 以下の例ではPython boto3を利用して署名付URLを作成しています。 48 * 60 * 60 (48時間)内でオブジェクトの取得可能なURLを生成。 s3 = bot…

OSI参照モデル レイヤ4とレイヤ5とレイヤ6

レイヤ5とレイヤ6の記憶がいつも曖昧なので再勉強しました。 レイヤ4 トランスポート層 レイヤ4はエンドツーエンドの通信規格。 TCP TCPでは以下のような規格。 3ハンドシェイク ウィンドウ、シーケンス番号と確認応答番号による伝達メッセージの到達確認 ポ…

リピーターハブとスイッチングハブ

リピータハブ リピーターハブは接続された機器すべてに対して受け取ったパケットをブロードキャストする。 OSI参照モデルでいうところのレイヤ1の規格。接続された機器の宛先を管理しない。 ちなみにL1でスイッチするものもあるらしい。 L1スイッチの使い道:…

Scala DynamoDBを利用する

PlayframeworkからAWS SDK for Java 2.0を使用して、DynamoDBを利用したので記録しておきます。 といってもJavaのAWS SDKを使用するだけなので、Scalaはあまり関係ないかも(^_^;) 依存ライブラリ build.sbt libraryDependencies += "software.amazon.awssdk"…

AWS API Gatewayからのevent['body']がbase64 encodeされて渡される

表題の通り。 method="POST"で送信した値がHTTP APIとしたAPI GatewayからLambdaにeventを渡す際、bodyの中身がbase64 encodeされた文字列として渡される。 API GateWayから渡されるevent['body']は今の仕様だとbase64エンコードされて渡されるみたい。from …

AWS Python boto3でDynamoDBを扱う

PythonからAWSの各リソースにアクセスするにはboto3を利用します。 AWS Lambdaで利用する際は、そのままboto3が扱えるのでLambdaパッケージにboto3を含める必要はありません。 DynamoDBのリソースを取得 import boto3 dynamodb = boto3.resource('dynamodb')…

AWS DynamoDBメモ書き

インスタンスについて VPCではなくS3のようにグローバルセグメント?(この言い回しが正しいか謎(^_^;))に配置される。 プライマリキーについて RDBと同様、データを一意に特定できるプライマリキーの設定が必要。プライマリキー以外の項目はスキーマレスで自…

AWS docker-lambdaでローカル環境でlambda関数の開発を行う

先日はEC2上でLambda関数の開発を行いましたが、EC2を立てるのが手間・費用がかかるのがちょっと...という方は、docker-lambdaを使用することでLambdaコンテナの動作をエミュレートすることができます。 GitHub - lambci/docker-lambda: Docker images and t…

AWS S3イベントをトリガーにLambda Functionを実行する

Lambda FunctionはS3で発生したイベント(例えばオブジェクトのputやdelete)をトリガーに実行することができます。 ここではS3にオブジェクトをputした契機でLambda Functionを実行する方法を記述します。 Lambda関数の作成 関数の設計図から作成するとS3イベ…

lambda関数パッケージビルド用EC2を構築する

lambda関数からCPU依存のライブラリや各AWSサービスに接続を行う場合、lambdaが実行されるOS、Amazon Linuxからパッケージビルドを行えばトラブルが少ないです。 EC2にIAMロールの割り当て Lamdaで使用するIAMロール同様のEC2用のIAMロールを作成しておき割…

AWS Lambda Functionをスケジュールして定期実行する

AWS LambdaはCloud WatchのEventトリガーと連動してCronのように定期実行することができます。 定期実行Functionの作成 Cloud WatchのルールとLambda ファンクションを別々に定義することも可能ですが、Lambda関数定義時に設計図から定義すると関数作成と同…

brewでws-sam-cliとsawを導入

brewでAWS toolをインストールした時のメモ aws-sam-cli macOS への AWS SAM CLI のインストール - AWS サーバーレスアプリケーションモデル $ brew tap aws/tap $ brew install aws-sam-cli $ sam --version SAM CLI, version 0.52.0 saw saw is a multi-pu…

Playframework application.confに環境変数をbindする

環境ごとに異なる設定値をapplication.confに設けます。 OSの環境変数設定 ~/.bash_profileとかに、 export SECRET_KEY="****" と記述しておく。source ~/.bash_profileしておこう。 application.confの記述 環境変数は${?varName}で読み込めます。envvalの…

Scala Playframework S3にファイルアップロードを行う

2.x系のAWS SDK for JavaでScala + Playframework + S3アップロードを行ったのでメモしておきます。 AWS SDK for Java 2.x AWS SDK for Java 2.0 開発者ガイド - AWS SDK for Java バージョン 2 依存ライブラリの導入 僕の環境では40分ほどbuildに時間を要し…

AWS S3アクセスIAMユーザの作成とaws cliでのファイルアップロード

S3バケット 以下の作業は予めS3にYourBucketNameというbucketを作成しているものとする。 S3アクセス可能とするIAMユーザの作成 IAMユーザ作成後、インラインポリシーを作成。以下は指定のバケット(YourBuketName)に対するS3FullAccessのポリシーとなる。 { …

Playframework データアクセスするRepositoryクラスのDependencyInjection

PlayでAnornを使用していて、RepositoryクラスをDIした時のメモ。といってもAnormは関係ない。 Repositoryクラス 差し替え可能であること前提で抽象化するようtraitを用意しておく。 Trait trait ShopRepositoryTrait { def withBegin():ShopRepository def …

Vue.jsでJsonと画像をmultipartでPlayframeworkにPOSTする

WebAPIとして動作しているPlayframeworkにmultipartでJsonとファイルデータを送信します。 Vue側の実装 template axiosでPOSTするので、formにはmultipartをつけず、prevent指定でページロードしないように制御する。 <template> <form> <input type="text" v-model="shopMame"> <input @change="changeFile" type="file" name="upfile[]" multiple accept="image/*" /> </form></template>

Playframework 複雑なJsonデータをオブジェクトにmappingまたはForm bind、validateする

WebAPIとして動作しているPlayframeworkのJsonデータのパースについて。 Jsonデータは、 { "shopName":"Let it Ride", "position":{ "lat":35.66530148846749, "lng":139.41634567694945 }, "testArray":[1,2,3,4] } のように入れ子、または配列のデータを含…