テック-AWS

Rust rusoto_s3でS3読み書き用署名付きURLを取得する

rusoto_s3でS3非公開bucketへのpresign URLを取得したので記録しておきます。 参考にしたページ rusoto/s3.rs at master · rusoto/rusoto · GitHub rusoto_s3 presignで検索するも上記のテストコードしかめぼしい情報がなく、テストコードを読み進めていく。…

書籍: Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド

引き続きLambdaを触っていて、手を動かしながら読み終えました。 こちらの本はLambda + API Gateway + DynamoDBを基本としながらも、Cognito、Kinesis、CloudFormationなんかも詳しく解説してくれています。私もCognito、Kinesis、CloudFormationを勉強した…

AWS GitHubと連携したCodePipelineでの自動Lambda関数のデプロイ

CodePipelineはGithubのpushイベントをウォッチし、ブランチにプッシュ後自動でbuild & deployすることが出来ます。 CodeBuildの設定 GitHubで管理しているプロジェクトのBulidの実行環境構成を記述します。 build-project.json { "timeoutInMinutes": 60, "…

AWS SAMのtemplate.yamlの構成をローカル環境でテストする

SAM使用時にtemplate.yamlの構成のlambda_functionをローカル環境でテストすることができます。 但し、DynamoDBに関しては、別途、DynamoDBローカルの導入が必要となります。 ローカル環境の構築 といっても難しいことは何もなく、コマンドツールをインスト…

AWS Rekognitionで画像解析を行う

AWS rekognitionを使用すると簡単に画像の解析を行うことができます。 Amazon Rekognition とは - Amazon Rekognition Lambda関数でrekognitionを使用する S3のPutObjectをイベントリソースにしたLambda関数の例。S3にアップロードされた画像を解析します。 …

S3 ファイル書き込み用署名付きURLを発行する

非公開のACL S3bucketに対して、オブジェクトをアップロード可能とする署名付き一時URLを発行します。 以前のGETの署名付きURLの書き込みバージョン。 AWS S3 パブリックアクセス禁止のオブジェクトに署名して一時的にアクセス可能なURLを生成する - 追憶行 …

AWS API GatewayをCognito ユーザPool認証ユーザのみアクセス可能にする

API GatewayをCognitoで認証したユーザのみアクセス可能にします。 参考: REST API を Amazon Cognito ユーザープールと統合する - Amazon API Gateway API GatewayのSwagger定義 API GatewayにCognitoのjwtをAPIキーとして送信し、検証する。という考え方で…

AWS Cognito ユーザPoolからログイン処理を行う

昨日はsignup処理を記述したので、今回はsignin処理を記述します。 AWS CognitoユーザPoolの作成とSignupの実装 - 追憶行 Signin処理の実装 import { CognitoUserPool, CognitoUserAttribute, AuthenticationDetails, CognitoUser } from 'amazon-cognito-id…

AWS CognitoユーザPoolの作成とSignupの実装

ユーザPoolの作成 CloudFormationのtemplate.yamlとして記述しました。 cognito-template.yaml Resources: UserPool: Type: 'AWS::Cognito::UserPool' Properties: Schema: - Name: 'email' StringAttributeConstraints: MinLength: '0' MaxLength: '2048' R…

AWS Cognitoについての整理メモ

AWS Cognitoについて整理したことをメモしておきます。 IDフェデレーション 認証プロバイダ(Google, Facebook, Twitterなど)から発行されたIDをCognito内のレコードとして結びつけ管理する機能。 また、認証されたユーザのCognito レコードに対して、一時的…

AWS API GatewayをSwagger仕様でExportする

$ aws apigateway get-export --parameters extensions='apigateway' --rest-api-id apiid --stage-name Prod --export-type swagger export.json とすることで、export.jsonに構成がexportされる。 参考: API Gateway から REST API をエクスポートする - A…

AWS プリフライトリクエストに対応したAPIGatewayの定義をSwaggerで記述する

SwaggerでAPIGateway + Lambdaの構成定義を書いたのでメモしておきます。 出来上がりのtemplate.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: An AWS Serverless Specification template describing …

AWS CloudFormationでAPIGateway + Lambda関数をデプロイする

ローカル環境のaws cliでAPIGateway + Lambda関数を定義したCloudFormationのスタック作成から関数デプロイまでを実行します。 作業ディレクトリの状態 template.yaml lambdaFunc1/ funcname1.py lambdaFunc2/ funcname2.py template.yaml AWSTemplateFormat…

書籍:みんなのAWS

CloudFormationとKinesisの勉強がしたくて、購入。 VPCネットワーク + コンテナアプリケーションのデプロイ SPA + GoランタイムLambda Kinesisでのログ集積・Glue、Athenaでのカタログ、ログFind といった構成。 (function(b,c,f,g,a,d,e){b.MoshimoAffiliat…

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…

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')…