狠狠撸
Submit Search
LocalStack
?
1 like
?
2,672 views
C
chibochibo
Follow
mock framework for AWS services 第十九回 #渋谷java
Read less
Read more
1 of 43
Download now
Download to read offline
More Related Content
LocalStack
1.
LocalStack クラウドサービスのモック環境 2017-06-17 第十九回 #渋谷java
2.
Me 島本 多可子(@chibochibo03) 株式会社ビズリーチ CTO室 普段はScalaを書いてます Apache
PredictionIOのコミッタになりました 直近の著書です →
3.
今日はなすこと LocalStackってなに? 簡単な使い方 JUnitと統合できちゃう!
4.
AWSをフル活用 弊社のサービスのほとんどにおいて活用 機械学習など一部対象外あり 特性や課金モデルを把握し使いたおす
5.
AWSのサービスを活用する場合の課題 検証環境にあげないと動作確認できない DynamoDBなどモックでは開発しづらいケースもある 仕様や制限を網羅するのは結構大変
6.
AWSのサービスのローカル実装が存在する AWSサービス ローカル実装 URL RDS
MySQL等 Elasticsearch Elasticsearch ElasticCache memcached, Redis S3 s3rver https://github.com/jamhall/s3rver SQS elasticmq https://github.com/adamw/elasticmq Kinesis kinesalite https://github.com/mhart/kinesalite DynamoDB DynamoDB Local https://docs.aws.amazon.com/amazondynamodb/late st/developerguide/Tools.DynamoDBLocal.html
7.
AWSのサービスのローカル実装が存在する AWSサービス ローカル実装 URL DynamoDB
dynalite https://github.com/mhart/dynalite SNS fake_sns https://github.com/yourkarma/fake_sns CloudSearch nozama-cloudsearch https://github.com/oisinmulvihill/nozama-cloudsearch Lambda node-lambda https://github.com/motdotla/node-lambda
8.
これまで DynamoDB Localやkinesaliteを組み込んだDockerfileを用意 ローカルでコンテナをビルドして使う docker-composeでまとめて起動?停止できるようにしたり
9.
これまで DynamoDB Localやkinesaliteを組み込んだDockerfileを用意 ローカルでコンテナをビルドして使う docker-composeでまとめて起動?停止できるようにしたり (??ω?`)ショボーン ????????? 使うサービスが増えると???
10.
LocalStack https://github.com/atlassian/localstack A fully functional
local AWS cloud stack あなたのクラウドアプリケーションをオフラインで開発してテストしましょう!
11.
LocalStack クラウドサービスを使ったアプリの開発時に便利 直近はAWSのサービスに重点が置かれている KCL for Pythonの実装を提供
12.
使えるサービスがこんなにある! API Gateway http://localhost:4567 Kinesis
http://localhost:4568 DynamoDB http://localhost:4569 DynamoDB Streams http://localhost:4570 Elasticsearch http://localhost:4571 S3 http://localhost:4572 Firehose http://localhost:4573 Lambda http://localhost:4574 SNS http://localhost:4575 SQS http://localhost:4576 Redshift http://localhost:4577 Elasticsearch Service http://localhost:4578 SES http://localhost:4579 Route53 http://localhost:4580 CloudFormation http://localhost:4581 CloudWatch http://localhost:4582
13.
数が多いだけじゃない! エラーのインジェクション 実際の環境ではよく発生するエラーがある たとえば ProvisionedThroughputExceededException 動作確認でわざとエラーを出すのは意外とめんどくさい 設定で簡単にできる! (
???)???
14.
数が多いだけじゃない! プロセスはすべて独立しており、差し替え可能 デフォルトでは16サービスが有効 必要なサービスだけにすることも可能 設定で簡単にできる! ( ???)???
15.
Setup Running in Docker $
git clone https://github.com/atlassian/localstack.git $ cd localstack/ $ docker-compose up
16.
S3を使ってみる Create a bucket bash-4.3#
aws --endpoint-url=http://localstack:4572 --region=us-east-1 s3 mb s3://pio_bucket bash-4.3# aws --endpoint-url=http://localhost:4572 s3 ls 2006-02-03 16:45:09 pio_bucket (注)AWS CLI をインストールしておくこと
17.
S3を使ってみる Create a bucket bash-4.3#
aws --endpoint-url=http://localstack:4572 --region=us-east-1 s3 mb s3://pio_bucket bash-4.3# aws --endpoint-url=http://localhost:4572 s3 ls 2006-02-03 16:45:09 pio_bucket (注)AWS CLI をインストールしておくこと
18.
Dashboard
19.
Dashboard http://localhost:8080 簡易的なダッシュボードが付属
20.
作ったbucketにput AmazonS3 s3 =
AmazonS3ClientBuilder.standard() .withPathStyleAccessEnabled(true) .withEndpointConfiguration(new EndpointConfiguration( "http://localhost:4572", Regions.US_EAST_1.getName())) .build(); ... s3.putObject("pio_bucket", "key1", new FileInputStream(file), metadata); aws-java-sdkを使ってput
21.
作ったbucketにput AmazonS3 s3 =
AmazonS3ClientBuilder.standard() .withPathStyleAccessEnabled(true) .withEndpointConfiguration(new EndpointConfiguration( "http://localhost:4572", Regions.US_EAST_1.getName())) .build(); ... s3.putObject("pio_bucket", "key1", new FileInputStream(file), metadata); aws-java-sdkを使ってput
22.
確認 Lists objects bash-4.3# aws
--endpoint-url=http://localhost:4572 s3 ls s3://pio_bucket 2017-06-12 10:18:03 5411 key1 (注)AWS CLI をインストールしておくこと
23.
魅力的なのがKinesis or DynamoDB
24.
ProvisionedThroughputExceededException リクエストが失敗した なぜ?
25.
ProvisionedThroughputExceededException リクエストが失敗した スループット超過 なぜ? なぜ?
26.
ProvisionedThroughputExceededException リクエストが失敗した スループット超過 確保している処理能力を超えた なぜ? なぜ?
27.
避けて通れないスループット超過 ほんの一瞬の負荷によって失敗する可能性あり スループット超過を想定しておく必要あり アプリ側でリトライすることを前提にしておく (??ω?`)ショボーン ????????? 超過したときの動作確認???
28.
設定で簡単にできる! 環境変数に以下を設定 $ export KINESIS_ERROR_PROBABILITY=0.5 $
docker-compose up
29.
設定で簡単にできる! 環境変数に以下を設定 $ export KINESIS_ERROR_PROBABILITY=0.5 $
docker-compose up 0.0 (default) ? 1.0の範囲 0.0 => エラーなし 1.0 => 常にエラー
30.
注意 PutRecordsにしか対応してない 割合はすべてのリクエストに対して適用される 実際は独自のdocker-composeを作りたくなるケースが多そう
31.
KinesisにPutRecords 成功時 bash-4.3# aws --endpoint-url=http://localstack:4568
--region=us-east-1 kinesis put-records --stream-name foo --records Data=data1,PartitionKey=part1 Data=data2,PartitionKey=part2 { "FailedRecordCount": 0, "Records": [ { "ShardId": "shardId-000000000000", "SequenceNumber": "49574129433569033358902088269185075153412462741586706434" }, { "ShardId": "shardId-000000000000", "SequenceNumber": "49574129433569033358902088269186284079232077370761412610" } ] } (注)「foo」という名前のストリームを作成しておくこと
32.
KinesisにPutRecords 何回かputしていると??? bash-4.3# aws --endpoint-url=http://localstack:4568
--region=us-east-1 kinesis put-records --stream-name foo --records Data=data1,PartitionKey=part1 Data=data2,PartitionKey=part2 { "FailedRecordCount": 1, "Records": [ { "ErrorCode": "ProvisionedThroughputExceededException", "ErrorMessage": "Rate exceeded for shard X in stream Y under account Z." }, { "ErrorCode": "ProvisionedThroughputExceededException", "ErrorMessage": "Rate exceeded for shard X in stream Y under account Z." } ] } (注)「foo」という名前のストリームを作成しておくこと
33.
他にもこんな設定が 環境変数 説明 DYNAMODB_ERROR_PROBA BILITY DynamoDB APIでスループット超過を出す割合 SERVICES
実行するサービスとポート DEFAULT_REGION AWSリージョン(デフォルト us-east-1) HOSTNAME ホスト名(デフォルト localhost) LAMBDA_EXECUTOR ラムダ関数の実行場所。docker or local LAMBDA_REMOTE_DOCKER docker runで実行 or docker create/cp/startで実行
34.
Integration with JUnit JUnitと統合できる LocalstackTestRunner テストを実行すると、すべての依存を自動でダウンロード 一時ディレクトリにインストール
35.
Integration with JUnit 手順は
↓↓↓ https://github.com/atlassian/localstack#integration-with-javaju nit
36.
しかーし!!!!
37.
注意 JUnitと統合できる LocalstackTestRunner テストを実行すると、すべての依存を自動でダウンロード 一時ディレクトリにインストール
38.
注意 JUnitと統合できる LocalstackTestRunner テストを実行すると、すべての依存を自動でダウンロード 一時ディレクトリにインストール git clone
39.
注意 JUnitと統合できる LocalstackTestRunner テストを実行すると、すべての依存を自動でダウンロード 一時ディレクトリにインストール git clone make install
(-&辩耻辞迟;-;)ムム
40.
注意 make、python、pip、npmなどが必要 (環境によって)makeでError Connection refused !? make
infraを叩くとReady.が出ない Elasticsearchのhealth checkに失敗
41.
JUnit統合を使うときの心得 あたたかい気持ちで pythonとお付き合いしましょう Makefileを読みましょう makeのエラーに対応しましょう
42.
まとめ AWSを使ったアプリもローカルで開発できる LocalStackさえあればOK 既存のツールに欠けている機能を補う 例外のインジェクションなど
43.
まとめ サードパーティとの問題の切り分けがちょっと大変 LocalStack側の問題ではないこともある 真面目に触ると粗いと感じる部分がある 本物との差異
Download