SlideShare a Scribd company logo
1 of 105
Download to read offline
Developer Day
#cmdevio2015C
クラスメソッドの
AWSドッグフーディング
1
C-1
都元 ダイスケ, AWSコンサルティング部
クラスメソッド株式会社
Ⓒ Classmethod, Inc.
2015年03月29日
本セッションは長丁場です。お手洗いはお済みですか?
#cmdevio2015C
自己紹介
✦ よく訓練されたアップル信者、都元です。
✦ Webアプリ屋出身のAWS屋
✦ AWS歴3.5年
✦ @daisuke_m
✦ 人間CloudFormer
2Ⓒ Classmethod, Inc.
CloudFormation
EC2S3
Glacier
ElasticMapReduce
AutoScaling
ELB
CloudFront
RDS
DynamoDB
ElastiCache
RedShift
IAM
CloudWatch
Beanstalk
Data Pipeline
OpsWorks
CloudHSM
CloudSearch
SWF
SQS
SNS
SES
ElasticTranscoder
Route53
VPC DirectConnect
StorageGateway
Mechanical Turk
CloudTrail
AppStream
Kinesis
#cmdevio2015C
Do you know?
✦ DBの進化的設計を実現する開発プロセス
✦ 要するにRailsのmigrationのような
✦ 現在のJavaでいうFlywayのような
✦ EclipseプラグインによるER図エディタ
3Ⓒ Classmethod, Inc.
2006-2012
Jiemamy
#cmdevio2015C
DBの
進化的設計
Evolutional Database Design
— Martin Fowler and Pramod Sadalage, 2003
http://www.objectclub.jp/community
/XP-jp/xp_relate/evodb-jp
データベース
リファクタリング
#cmdevio2015C
Evolutional DB Design
✦ 実装前に設計を確定させるのは、もはや不可能
✦ DBの設計に関しても同様で、リファクタリングを適
用したい
✦ しかし、DBはアーキテクチャの低層に位置している
ため、被依存度が高く、変更しづらい
✦ どーする?
5Ⓒ Classmethod, Inc.
#cmdevio2015C
not only refactoring
✦ DB変更はrefactoringだけではない
✦ テーブルやカラムの追加や削除
✦ 開発中のDBの変更履歴・構成管理
6Ⓒ Classmethod, Inc.
#cmdevio2015C
アンケート
✦ システム開発をしている。
✦ システムの構成管理をしている。
✦ 構成管理のおかげで、昔の状態がいつでも

呼び戻せるから安心である。このメリットは重要だ。
✦ 昔の状態のシステムをいつでも動かせる。
✦ 昔の状態のシステムをいつでも動かせる...
✦ 昔の状態のシステムを今でも動かせる...!?
7Ⓒ Classmethod, Inc.
#cmdevio2015C
本当です?
✦ あなたのシステムが例えばGitHubに置いてあります。

このアプリを無事に起動できますか?

✦ 過去のタグでも大丈夫ですか?
✦ その時、DBも整備構築できますか?
8Ⓒ Classmethod, Inc.
#cmdevio2015C
この問題の解決方法
✦ 原始的 → 文書化(Documented)
✦ 陳腐化しやすい。
✦ みんなドキュメントを書きたくない。
✦ エクセルは都市伝説。
✦ モダン → 自動化(Automated)
✦ DBの構築とスキーマのマイグレーションを自動化する。
9Ⓒ Classmethod, Inc.
#cmdevio2015C
進化的設計
Smart
Version
Control
Smart
Model
Smart
Build
#cmdevio2015C
あらためてJiemamy
✦ DB構成情報を1つに集約 (smart model)
「重要なことはファイルを扱うようにデータベースを扱えるツールを持つことだ。」
「スキーマとテストデータから成るデータベース」
✦ データファイルをVCS管理 (smart version control)
「マスターデータベースをソースコードと同様に構成管理の下に置くのである。」
「全システムを管理する強力な構成管理ツールの下にあれば、もし最悪の事態が起こっても元に戻すのは
難しいことではない。」
✦ ビルドフェーズでDB整備 (smart build / deploy)
「すべての開発者のデータベースに変更を自動的に適用する」
11Ⓒ Classmethod, Inc.
∼ツール面からDBの進化的設計をサポート∼
#cmdevio2015C
スマートモデル
12Ⓒ Classmethod, Inc.
database
tablecolumn
Java object
SQL
Excel
class
#cmdevio2015C
ってなことを訴え始めた2006年
✦ あの頃の俺は青かった。
✦ 自動化の対象はDBの構築と管理じゃない。
✦DBを含む、インフラ全部だ。
13Ⓒ Classmethod, Inc.
#cmdevio2015C
時は流れ、2013年…
✦世はまさに大クラウド時代!
✦AWSは全てがAPI!
✦Infrastructure as Code!
14Ⓒ Classmethod, Inc.
#cmdevio2015C
–Miyamoto, Daisuke (2006)
リポジトリからコードをチェックアウトし、
必要に応じて環境固有の設定をした後、
コマンド1つで起動・デプロイができるべき
2006年にここまで言ってたかどうか忘れましたが、
2008年には確実に言ってた。
この考えは現在も変わっていません。
スマートビルド / デプロイ
#cmdevio2015C
Single Command Deploy
ThoughtWorks, Inc.
Technology Radar
March 2012
16Ⓒ Classmethod, Inc.
#cmdevio2015C
クラスメソッド
メンバーズポータル (CMP)
17
#cmdevio2015C
CMPとは
✦ (1) 弊社サービス「メンバーズ」のお客様向けポータル
✦ AWSご利用料金の確認と分析
✦ CloudTrailの集計結果確認
✦ ライセンス期限管理
✦ etc
✦ (2) 社内向け業務システム
✦ コンサルティング資料
✦ 運用サポート情報管理
✦ 請求書発行
18Ⓒ Classmethod, Inc.
✦ (3) AWS実験場
✦ AWS実運用経験の場
✦ CloudFormation
✦ Elastic Beanstalk
✦ Elastic MapReduce
✦ IAM
#cmdevio2015C
CMPのテーマ(本日のagenda)
✦ 完全AWSネイティブ
✦ Java 8 + Spring Framework
✦ Single Command Deployとシステム ポータビリティ
✦ APIファースト
19Ⓒ Classmethod, Inc.
#cmdevio2015C
完全AWSネイティブ
20
#cmdevio2015C
完全AWSネイティブとは
✦ AWSの哲学・推奨に従う
✦ 実装の都合を一方的に押し付けない
✦ 問題をアプリで解決するか、インフラで解決するか?
✦ アプリとインフラで戦わない。都度最適解を追求する。
✦ CMPでは、どっちも自分ですねん。
✦ AWSに寄り添う
21Ⓒ Classmethod, Inc.
#cmdevio2015C
ネットワーク構成
22Ⓒ Classmethod, Inc.
VPC
10.x.0.0/16
AZ-α
ap-northeast-1a
AZ-β
ap-northeast-1c
Frontend

for ELBs and Bastion
10.x.0.0/24 10.x.1.0/24
Application

for App Servers
10.x.10.0/24 10.x.11.0/24
Datastore
for RDS
10.x.50.0/24 10.x.51.0/24
参考: 【AWS】VPC環境構築ノウハウ社内資料 2014年4月版
http://dev.classmethod.jp/cloud/aws/vpc-knowhow-2014-04/
3-Tier 2-AZs = 6 subnets
#cmdevio2015C
Multi-AZの「効果」と「パターン」
✦ Availability(可用性)とScalability(拡張性)
✦ Design for failure(障害を見越した設計)
✦ WebパターンとWorkerパターン
23Ⓒ Classmethod, Inc.
Web
Server
Worker
Server
#cmdevio2015C
Webサーバ構成
✦ もちろんMulti-AZのWebパターン
✦ 現在2つの構成が並走中
✦ レガシー構成(シュリンク方針)
✦ Webサーバ内でHTMLを合成して返すアレ
✦ JSONを吐くAPIとしても機能する
✦ 所謂SSKDs向けAPI
✦ 完全静的フロント+API構成(鋭意構築中)
✦ 静的JSクライアントアプリ
✦ ひたすらJSONを吐く箱
✦ 所謂LSUDs向けAPI
24Ⓒ Classmethod, Inc.
#cmdevio2015C
Workerサーバ構成
✦ もちろんMulti-AZのWorkerパターン
✦ 要するにProducer & Consumer
✦ 非同期処理を担う
✦ 各種締め処理
✦ バルクメール送信
✦ レポーティング
✦ 各種サーバがSQSにJSONを投入
25Ⓒ Classmethod, Inc.
#cmdevio2015C
Beanstalk Worker Tier
✦ Beanstalkは「Webパターン」だけではない
✦ 「Workerパターン」のデプロイも可能
✦ (下図は再掲)
26Ⓒ Classmethod, Inc.
Web Tier Worker Tier
#cmdevio2015C
aws-sqsd
✦ WorkerはHTTPサーバとして実装!
27Ⓒ Classmethod, Inc.
#cmdevio2015C
ジョブスケジューラ
✦ 遅延処理や定時処理
✦ 処理の開始トリガーがHTTPリクエストではない
✦ このような処理を担うバッチサーバの実装
✦ cron? Multi-AZは?
✦ Availability = AZ障害で片側がダウンしたら?
✦ Scalability = トリガ数が想像以上に増えたら…? (※)
28Ⓒ Classmethod, Inc.
※ … そういうことはあまり有りませんが、設計癖として意識したい
#cmdevio2015C
Amazon Elastic Job-Scheduler Service
✦ cron expressionでスケジュールを登録
✦ SNSトピックを指定
✦ スケジュールに従って、SNSにJSONをpublish
29Ⓒ Classmethod, Inc.
すると
#cmdevio2015C
Amazon Elastic Job-Scheduler Service
✦ cron expressionでスケジュールを登録
✦ SNSトピックを指定
✦ スケジュールに従って、SNSにJSONをpublish
30Ⓒ Classmethod, Inc.
するとリリース
マダァ?
#cmdevio2015C
無いので作ったBrian
✦            のラッパー
✦ Javaで書かれたジョブスケジューラ(OSS)
✦ Multi-AZ分散するが、RDBを利用して同期。多重発火を回避。
✦ SNSトピックを登録しておく
✦ ジョブ定義をRESTful API経由で登録
✦ Beanstalk Web-Tier Internal ELBでの利用推奨
✦ 認証機構とか作って無いもんで。まぁ内部でしか使わないよね。
31Ⓒ Classmethod, Inc.
https://github.com/classmethod-aws/brian
http://bit.ly/brian-0_14-demo
#cmdevio2015C
http://bit.ly/aws-worker-sqs

http://bit.ly/aws-worker-beanstalk

http://bit.ly/aws-worker-brian
Developers.IO
Job Worker
三部作
#cmdevio2015C
ここまでのまとめ
33Ⓒ Classmethod, Inc.
#cmdevio2015C
CMPにおけるAWS利用データ分析
✦ AWSはAWSの利用実績とその費用を、詳細なCSVと
して提供しています。(Detailed Billing Report)
✦ CMPはそのデータを様々な角度から分析し、お客様に
コスト削減のご提案等に役立てています。
34Ⓒ Classmethod, Inc.
#cmdevio2015C
詳細なCSV(Detailed Billing Report)
✦ 要するに、毎月数GBオーダーのCSVが1日数回…
✦ 当初、このCSVをそのままRDSにインポート
✦ GROUP BYクエリ等で表示していたが、重すぎ
✦ オレオレMaterialized View…にも限界が
✦    「1年で10倍成長します」
✦     .oO( 1年後は数十GBオーダーのCSVか… )
✦ よろしい、ならばEMRだ。
35Ⓒ Classmethod, Inc.
#cmdevio2015C
EMR バックグラウンドJob
✦ 集計ジョブ
✦ Brianにより定期的にジョブキック
✦ AWSにより新しいDBRが届いていれば
✦ EMRクラスタを立ち上げてHiveステップを登録
✦ もちろんSpotインスタンス♡
✦ 取り込みジョブトリガをBrianに登録(30分後∼5分毎)
✦ 取り込みジョブ
✦ Hiveステップが終わっていなければ終了
✦ 終わっていれば、S3に吐かれた集計結果をRDSにインポート
✦ Brianから「自分自身を起動したトリガ」を削除
36Ⓒ Classmethod, Inc.
#cmdevio2015C
その他、細かいTips
✦ SNS - OperationNotificationTopic を作って活用する
✦ 運用情報の通知(AutoScalingの増減やヘルスチェックの結果等)
✦ 想定外の挙動やバグ疑いの通知。
✦ このようなものを受け取るのにSESは使わない。SNSが最適。
✦ CloudWatch - Alarmを定義する
✦ RDS の FreeStorageSpace
✦ ディスクが有限であるかぎり、DiskFullのリスクは消えない
✦ SQS の NumberOfMessagesPublished
✦ Brianを利用する場合、メッセージが無いのはおかしい
✦ SQS の ApproximateNumberOfMessagesVisible
✦ 溜まるということはWorkerのバグか、キャパ不足
37Ⓒ Classmethod, Inc.
#cmdevio2015C
と、いう構成全体定義
✦ CloudFormationテンプレート
✦ 1761行(3/24現在)
✦ 一部の例外を除き、手ではAWSリソースを作らない
✦ 例外については後述
38Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
CloudFormationテンプレート構成戦略
✦ モノリシック派
✦ 完全一枚岩派
✦ sub-stackコール派
40Ⓒ Classmethod, Inc.
← 今回はこっち →
Network
Web
ELB
DNS
DB
Web Web
ELB ELB
DNS DNS
DB DB
✦ レイヤ分割派
✦ Network / DB / Web / DNS 分割派
✦ 静的レイヤ + 動的レイヤ分割派
DNS DNS DNS
Web
ELB
Web Web
ELB ELB
Network
DBDB DB
#cmdevio2015C
モノリシック派
✦ pros
✦ CFnの「スタック」という概念に寄り添っている(と思う)
✦ テンプレート間のパラメータ繋ぎ込みの仕組みが不要
✦ cons
✦ update時、意図しない範囲に影響が波及してしまう恐れ
41Ⓒ Classmethod, Inc.
#cmdevio2015C
CloudFormation Tips
✦ EnvironmentTypeパラメータ
✦ local (ローカル起動用)
✦ VPC, SQS, SNS, S3等。インスタンス系はなし。
✦ development / production
✦ RDS: Single/Multi-AZ、ストレージサイズ、バックアップ期間
✦ AutoScaling: 1台/複数台
✦ DeepSecurity: 有/無
✦ CIDRPrefixパラメータ
✦ VPC / Subnet のIPアドレスレンジを決定
✦ 複数環境にあたって、IPアドレス帯域の重複排除
✦ 重複排除は必須ではないが、VPC peeringの可能性を残す
42Ⓒ Classmethod, Inc.
#cmdevio2015C
Java 8
+ Spring Framework
43
#cmdevio2015C
Javaは死んでいない
#cmdevio2015C
プロジェクト構成
✦ api: ドメインモデル・DB定義等
✦ batch: バッチJob実装
✦ worker: aws-sqsdからのメッセージに応じて

バッチJobを実行する小さなWebアプリ(6クラス)
✦ webapi: JSON RESTful API(後述)
✦ webclient: 静的JSクライアント(非Java、後述)
✦ website: レガシーWebアプリ(シュリンク)
45Ⓒ Classmethod, Inc.
#cmdevio2015C
依存ダイアグラム
46Ⓒ Classmethod, Inc.
#cmdevio2015C
DDD ∼ Domain Driven Design
✦ Ubiquitous Language
✦ Layered Architecture
✦ Entity / Value Object
✦ Repository / Service
✦ 全フォローではなく、実装論だけ部分的に活用
✦ 参考: 20110409_DevLOVE「Building Blocks」_都元ダイスケ

https://www.youtube.com/watch?v=FNEfk-dlIKU
✦ 参考: DevLOVE Beautiful Development - 第一幕 陽の巻

http://www.slideshare.net/daisuke_m/devlove-beautiful-development
47Ⓒ Classmethod, Inc.
#cmdevio2015C
Spring Data
✦ DDDのリポジトリパターンの実装フレームワーク
✦ RDB用にはJPA実装。その他、MongoDBやRedis、
Neo4j等、様々なデータストアに対する実装がある。
✦ Mirage SQL
✦ 参考: Mirage SQL ∼ 2WaySQLをつかうデータアクセスライブラリ for Java

http://dev.classmethod.jp/server-side/java/mirage-sql-for-java/
✦ Spring Data Mirage
✦ 参考: Spring環境におけるDBアクセス(2) ∼ Spring Data 

http://dev.classmethod.jp/server-side/java/db-access-in-spring-data-mirage/
48Ⓒ Classmethod, Inc.
#cmdevio2015C
最近のJavaフレームワーク
✦ Play Framework
✦ Dropwizard
✦ Ninja framework
✦ Spring Boot
✦ アプリケーションサーバ

(コンテナ)準備不要の、スタンドアローンアプリ。
✦ Javaプロセスを1つ立ち上げればHTTPサーバが動く。
49Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
1プロセスのための環境 ∼ Docker
✦ 最近のJavaフレームワークはDockerと相性が良い
✦ Elastic BeanstalkもDockerをサポート
✦ 3日前にマルチコンテナもサポート開始!?
✦ C-3「アプリケーションコンテナとAWSの話(仮)」
✦ 詳しくは、大瀧プロのセッションにご期待ください。
51Ⓒ Classmethod, Inc.
#cmdevio2015C
Dockerfile 例
FROM dockerfile/java:oracle-java8

EXPOSE 8080

WORKDIR /opt/portnoy-webapi/

ADD logback.xml /opt/portnoy-webapi/logback.xml

ADD portnoy-webapi-1.37.jar /opt/portnoy-webapi/



CMD /usr/bin/java 

-DJDBC_CONNECTION_STRING=$JDBC_CONNECTION_STRING 

...

-Dspring.profiles.active=$SPRING_PROFILES_ACTIVE 

-Dlogging.config=/opt/portnoy-webapi/logback.xml 

-Dserver.port=8080 

-jar portnoy-webapi-1.37.jar
52Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
Beanstalk Application Bundle
✦ アプリケーション一式を含むZIPファイル
✦ Spring Bootアプリケーション(jar)
✦ logback.xml (ログ設定ファイル)
✦ Dockerfile
✦ これをS3にアップロード
✦ bucket: elasticbeanstalk-$region-$accountid
✦ key: eb-apps/portnoy-webapi-$version.zip
✦ CloudFormationパラメータに $version を与えれば

Elastic Beanstalkの環境が定義できる
54Ⓒ Classmethod, Inc.
#cmdevio2015C
SQS と Spring Batch
✦ SQSの at least once delivery
✦ 冪等ジョブ or 二重実行制御
✦ 全ジョブを冪等にはしづらい(メール送信とか)
✦ 同じジョブパラメータのジョブは複数回起動出来ない
55Ⓒ Classmethod, Inc.
JobExecutionAlreadyRunningException
JobInstanceAlreadyCompleteException
相性抜群
#cmdevio2015C
Single Command Deploy
と
システムポータビリティ
56
#cmdevio2015C
–Miyamoto, Daisuke (2006)
リポジトリからコードをチェックアウトし、
必要に応じて環境固有の設定をした後、
コマンド1つで起動・デプロイができるべき
(再掲)
#cmdevio2015C
Gradle
✦ Groovyベースのビルドスクリプト
✦ Javaの依存ライブラリ管理 ∼ ビルド・パッケージ
✦ 標準機能で実現可能。
✦ Spring Bootアプリケーションの起動
✦ プラグイン: spring-boot-grade-plugin
✦ DBの初期構築とマイグレーション
✦ プラグイン: flyway-gradle-plugin(次のスライドにて)
✦ Bastionを介したSSHトンネリング(DB / Brian操作)
✦ プラグイン: sshoogr-gradle
58Ⓒ Classmethod, Inc.
#cmdevio2015C
Flyway ∼ DBの進化的設計
✦ Jiemamy is dead
✦ スキーマにバージョンを付与
✦ 前バージョンからの差分SQLを作成
✦ どこまで適用したかは、実際のDB上で管理
✦ 未適用の差分SQLを順次適用することにより最新に
✦ ただし、自動化されたロールバックは不可能
✦ スキーマを1から構築し直すため、データを維持できない。
59Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
gradle-aws-plugin
✦ GradleからAWSリソースを操作したい
✦ CloudFormationスタックの Create / Update
✦ S3バケットへのオブジェクト Upload
✦ Beanstalk Application Bundle
✦ Hive Script
✦ portnoy-webclient
✦ 無いから作った
✦ 参考: https://github.com/classmethod-aws/gradle-aws-plugin
61Ⓒ Classmethod, Inc.
#cmdevio2015C
CloudFormationスタック操作
cloudFormation {

templateFile project.file('portnoy.template')

templateBucket ...

templateKeyPrefix ...

stackName ...

conventionMapping.stackParams = {

// 別タスクがアップロードしたBeanstalk Application Bundleを

// 探してstackParamsに設定

return stackParams

}

capabilityIam true

}



awsCfnMigrateStack.mustRunAfter 

':portnoy-worker:uploadBundle', 

':portnoy-website:uploadBundle', 

':portnoy-webapi:uploadBundle'
62Ⓒ Classmethod, Inc.
#cmdevio2015C
S3へのリソースアップロード
task uploadBundle(dependsOn: createBundle,

type: jp.classmethod.aws.gradle.s3.AmazonS3FileUploadTask) {

String timestamp = new Date()

.format("yyyyMMdd'_'HHmmss", TimeZone.default)

bucketName "elasticbeanstalk-${region}-${accountId}"

key "eb-apps/${artifactId}-${version}-${timestamp}.zip"

file project.createBundle.archivePath

overwrite project.version.endsWith('-SNAPSHOT')

}





task syncS3Resources(dependsOn: awsCfnWaitStackComplete

type: jp.classmethod.aws.gradle.s3.SyncTask) {

conventionMapping.bucketName ={ getCfnPhysicalResourceId('EMRBucket') }

prefix 'resources/'

source file("emrbucket-resources")

}
63Ⓒ Classmethod, Inc.
#cmdevio2015C
Gradle Task Graph
64Ⓒ Classmethod, Inc.
#cmdevio2015C
その他タスク
✦ ./gradlew :portnoy-webapi:bootRun
✦ ./gradlew flywayMigrate
✦ ./gradlew remoteFlywayMigrate
✦ ./gradlew awsFullUndeploy
65Ⓒ Classmethod, Inc.
#cmdevio2015C
システム ポータビリティ
✦ ビルドとデプロイの自動化

―― Automated
✦ 自動化しない部分はポエム(文書)を書く

―― Documented
✦ つまり、システムの全てが記述されている

―― Full Described
66Ⓒ Classmethod, Inc.
#cmdevio2015C
AWSにおけるシスポタ
✦ 1つのAWSアカウント内に複数の環境を構築できる。
✦ 例えば本番環境と開発環境等。
✦ 社内で共通のAWSアカウントに展開する。
✦ あらゆるAWSアカウントに環境を構築できる。
✦ 例えば個人検証環境。サンドボックス。
✦ 開発者毎の個人検証用AWSアカウントに展開する。
✦ あらゆるリージョンに環境を構築できる。
✦ と、いいかもね。
67Ⓒ Classmethod, Inc.
#cmdevio2015C
環境固有設定オプション -Penv=prd
✦ env/
✦ .gititnore
✦ _sample.gradle
✦ prd.gradle
✦ dev.gradle
✦ personal.gradle
68Ⓒ Classmethod, Inc.
✦ AWSアカウントID
✦ profile名(アクセスキー)
✦ リージョン名
✦ EC2キーファイルのパス
✦ 各種CFnパラメータ
✦ ローカルDB名、user、pass
✦ ログ設定ファイルのパス
apply from: file("env/${env}.gradle")
#cmdevio2015C
CloudFormation Tips
✦ アプリケーションで利用するAWSリソース名等
✦ S3バケット名、SQSキューURL、SNSトピックARN
✦ DynamoDBテーブル名、SubnetID、EnvironmentType
✦ RDBホスト名とポート番号、ユーザ名、パスワード
✦ これらはCFnパラメータや、CFnリソースとして確定
✦ アプリケーション起動パラメータとして

Beanstalkアプリケーションに渡す
✦ これらの値はDockerfile内で参照可能
69Ⓒ Classmethod, Inc.
#cmdevio2015C
CloudFormation Tips
✦ S3バケットはDeletionPolicyをRetainに
✦ DBSnapshotNameパラメータ
✦ 通常は空欄
✦ 特定のスナップショットから環境を復元する
✦ HostedZoneIDとHostedZoneName
✦ 内部で各種リソースに名前をつける
✦ RDSやCloudFrontにCNAME
✦ Bastionにホスト名
70Ⓒ Classmethod, Inc.
参考: CloudFormationで作成するリソースにはRoute 53で独自DNS名を付けよ
http://dev.classmethod.jp/cloud/aws/cloudformation-resources-with-route-53/
#cmdevio2015C
CFnで定義できないもの
✦ EC2キーペア
✦ IAMサーバ証明書
✦ それぞれ事前に作成、アップロード
✦ そのリソースIDをCFnパラメータに指定
71Ⓒ Classmethod, Inc.
#cmdevio2015C
Get system portability
✦ ./gradlew awsFullDeploy -Penv=prd
✦ ./gradlew awsFullDeploy -Penv=dev
✦ ./gradlew awsFullDeploy -Penv=personal
72Ⓒ Classmethod, Inc.
#cmdevio2015C
APIファースト
73
#cmdevio2015C
全ての機能はAPIを介して提供
✦ 全ての提供機能にAPIを用意する。
✦ 要するにAWSの真似です。
✦ どうしたらみんなに使ってもらえるか?
✦ RESTful JSON API
✦ 実装はSpring MVC
✦ 特筆事項は特に無し。普通に書いてます。
74Ⓒ Classmethod, Inc.
#cmdevio2015C
HATEOAS
✦ Hypermedia as the Engine of Application State
✦ へいとーす
✦ 要するに、HTMLってindexがあってそこからリンクを
ってあちこちを参照するよね!
✦ JSONもindexがあって、リンクを れるべきでは?
75Ⓒ Classmethod, Inc.
#cmdevio2015C
Understanding HATEOAS
✦ https://spring.io/understanding/HATEOAS
76Ⓒ Classmethod, Inc.
#cmdevio2015C
✦ クライアント

システムに対する
情報提供を意図
✦ とは言え、

人間にもやさしい
77Ⓒ Classmethod, Inc.
#cmdevio2015C
Spring HATEOAS
✦ Spring MVCの拡張。
✦ HATEOASの考えに則った、リンク等を扱える。
✦ http://projects.spring.io/spring-hateoas/
78Ⓒ Classmethod, Inc.
#cmdevio2015C
HAL
✦ Hypertext Application Language
✦ http://stateless.co/hal_specification.html
✦ HATEOASの具体的な仕様の一つ
✦ Spring HATEOAS

でもサポートがある
79Ⓒ Classmethod, Inc.
#cmdevio2015C80Ⓒ Classmethod, Inc.
{
"page": {
"size": 10,
"totalElements": 22,
"totalPages": 3,
"number": 0
},
"_links": {
"self": { "href": "/orgs" },
"next": { "href": "/orgs?page=2" }
},
"_embedded": {
"organizationList": [
{ "id": 1, "code": "classmethod", "name": "クラスメソッド株式会社",
"_links": {
"self": { "href": "https://cmapi.net/orgs/1" }
}
},
{ "id": 2, "code": "annotation", "name": "アノテーション株式会社",
"_links": {
"self": { "href": "https://cmapi.net/orgs/2" }
}
},
{ "id": 3, "code": "underscore", "name": "アンダースコア株式会社",
"_links": {
"self": { "href": "https://cmapi.net/orgs/3" }
}
},
...
]
}
}
例えば集合リソースの
HAL表現
#cmdevio2015C
よくある
RESTful
API (1)
81Ⓒ Classmethod, Inc.
https://example.com

/orgs/1

/projects/1

/aws-accounts/xxxx
/addresses/142
#cmdevio2015C
よくあるRESTful API (2)
82Ⓒ Classmethod, Inc.
https://example.com/orgs/1
#cmdevio2015C
LSUDs向けAPIの問題点
✦ 「To: ${billing-to}

 ${organization-name} ご担当者さま」
✦ 1ページ表示あたりのAPIコール数が多くなりがち
83Ⓒ Classmethod, Inc.
#cmdevio2015C
embedded resourceの活用
✦ 主軸オブジェクトに

関連オブジェクトを

埋め込める!
84Ⓒ Classmethod, Inc.
https://example.com

/orgs/1

/projects/1

/aws-accounts/xxx
/addresses/142
?embed=organization
#cmdevio2015C
#cmdevio2015C
CMP-APIのクライアントとしてのUI
✦ portnoy-webclient
✦ 完全静的JSクライアント
✦ CMP-APIを、CORSを使って叩く。
✦ 認証は、OAuth 2.0。
✦ Resource owner password grant
✦ MiddlemanとAngularJSで実装中
✦ 私が実装してるンじゃないので、実は詳しく語れないw
86Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
#cmdevio2015C
更新系APIの形
✦ HATEOASやHALでも、更新系の定義は緩い
✦ Read = GET は普通ですね
✦ Create = POST はわかりやすい
✦ Delete = DELETE もわかりやすい…?
✦ Update
✦ 更新しないプロパティも含めて PUT すべき?
✦ 更新するプロパティのみを PATCH すべき?
89Ⓒ Classmethod, Inc.
#cmdevio2015C
時事ネタ
90Ⓒ Classmethod, Inc.
#cmdevio2015C
この辺、非常に面白いんですが
✦ シンプルな結論は出ないんでその場その場で考えます。
✦ 普通にDELETEを用意することもあるし
✦ PUTで全プロパティアップデートさせるのもアリ
✦ PATCHで部分アップデートも必要に応じて
✦ そして…
91Ⓒ Classmethod, Inc.
#cmdevio2015C
REST without PUT
✦ 「リソース」それ自身の「削除(DELETE)」や

「アップデート(PUT)」などというものは存在しない。
✦ 「リソース削除・更新イベントリソース」の

「作成(POST)」があるだけだ。
✦ という悟りの世界も、場合によっては有効。
✦ 結論、安易にどこか1つには寄せない。
92Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
APIドキュメント
✦ 利用者によるAPIの理解はAutomated出来ない。
✦ よろしい、ならばDocumentedだ。
✦ というか、Automated Documentationだ。
94Ⓒ Classmethod, Inc.
#cmdevio2015C
Swagger
✦ API仕様記述言語(JSONベース)
✦ Swagger仕様ドキュメント
✦ これを中心に、SDKやドキュメントの自動生成
✦ あれ、どこかで聞いたような…
✦ そもそもSwagger仕様ドキュメントをどう作る?
✦ コードに触れないなら自分でコリコリ書くしかない。
✦ コードを解析してSwagger仕様ドキュメントを自動生成。
✦ Swagger Spring MVC
✦ https://github.com/springfox/springfox
95Ⓒ Classmethod, Inc.
#cmdevio2015C
Swagger UI
✦ Swagger仕様ドキュメントを元に

APIドキュメントページのWeb UIを生成する。
96Ⓒ Classmethod, Inc.
#cmdevio2015C
Swagger UI からAPIを叩く
✦ 認証して
✦ パラメータ

入れて

✦ Try it out!
97Ⓒ Classmethod, Inc.
#cmdevio2015C
結果
98Ⓒ Classmethod, Inc.
#cmdevio2015C
#cmdevio2015C
aurl in Go-lang
✦ 劣化 当面不要な機能を削ぎ落したシンプルな curl
✦ OAuth 2.0 の認証フローとトークン管理を実装
✦ AWS CLI風に、複数のアカウントをprofileとして管理
✦ それ以外は、curl 以上のものを実装しない方針
✦ インストール
✦ brew tap classmethod-aws/cm
✦ brew install aurl
✦ 実行
✦ aurl get http://example.com | jq .
100Ⓒ Classmethod, Inc.
参考: https://github.com/classmethod-aws/aurl
#cmdevio2015C
#cmdevio2015C
APIファーストの結果
✦ 弊社スタッフに
✦ CMP-API と
✦ Swagger UIのドキュメント と
✦ aurl を配布したら…
✦ 恐ろしい勢いで業務効率化ハックが始まった。
✦ Swagger UI と HATEOAS のリンクの影響か、

みんな自然にAPIを理解して普通に使ってくれる。
102Ⓒ Classmethod, Inc.
#cmdevio2015C
CMPの技術的な未来
103
#cmdevio2015C
出来てない事はまだまだ多い
✦ CIツールによる自動デプロイ
✦ Blue-Green Deployment
✦ 各種ログの管理と活用
✦ Spring Loaded突っ込みたい
✦ Lombok突っ込みたい
✦ TOTPによる多要素認証
104Ⓒ Classmethod, Inc.
Developer Day
#cmdevio2015C
クラスメソッドのAWSドッグフーディング・まとめ
105
C-1
Ⓒ Classmethod, Inc.
✦ 完全AWSネイティブ
✦ Java 8 + Spring Framework
✦ Single Command Deployと

システムポータビリティ(Full Described)
✦ APIファースト

More Related Content

Viewers also liked

ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1Takehito Tanabe
 
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~Recruit Technologies
 
20130410 jaws ug sapporo spot instance利用のすゝめ
20130410 jaws ug sapporo spot instance利用のすゝめ20130410 jaws ug sapporo spot instance利用のすゝめ
20130410 jaws ug sapporo spot instance利用のすゝめMachie Atarashi
 
2013 デブサミ 「SIの未来ってどうなのよ?」
2013 デブサミ 「SIの未来ってどうなのよ?」2013 デブサミ 「SIの未来ってどうなのよ?」
2013 デブサミ 「SIの未来ってどうなのよ?」Serverworks Co.,Ltd.
 
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...Recruit Technologies
 
変わる!? リクルートグループのデータ解析基盤
変わる!? リクルートグループのデータ解析基盤変わる!? リクルートグループのデータ解析基盤
変わる!? リクルートグループのデータ解析基盤Recruit Technologies
 
アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringTakuya Hattori
 
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAmazon Web Services Japan
 
AWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAmazon Web Services Japan
 
ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後Recruit Technologies
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAmazon Web Services Japan
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAmazon Web Services Japan
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりShinichi Tomita
 
AWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAmazon Web Services Japan
 
[AWSマイスターシリーズ] Amazon SQS / SNS
[AWSマイスターシリーズ] Amazon SQS / SNS[AWSマイスターシリーズ] Amazon SQS / SNS
[AWSマイスターシリーズ] Amazon SQS / SNSAmazon Web Services Japan
 

Viewers also liked (17)

ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
ブログ製本サービス MyBooks.jpのアーキテクチャ Part.1
 
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
 
20130410 jaws ug sapporo spot instance利用のすゝめ
20130410 jaws ug sapporo spot instance利用のすゝめ20130410 jaws ug sapporo spot instance利用のすゝめ
20130410 jaws ug sapporo spot instance利用のすゝめ
 
2013 デブサミ 「SIの未来ってどうなのよ?」
2013 デブサミ 「SIの未来ってどうなのよ?」2013 デブサミ 「SIの未来ってどうなのよ?」
2013 デブサミ 「SIの未来ってどうなのよ?」
 
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...
[Developers Summit 2015 講演資料] リクルートテクノロジーズ 14,000件/秒の配信を実現した リクルートのモバイルアプリを支え...
 
変わる!? リクルートグループのデータ解析基盤
変わる!? リクルートグループのデータ解析基盤変わる!? リクルートグループのデータ解析基盤
変わる!? リクルートグループのデータ解析基盤
 
アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpring
 
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
 
AWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS Protection
 
ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のり
 
AWS Black Belt Techシリーズ AWS IAM
AWS Black Belt Techシリーズ AWS IAMAWS Black Belt Techシリーズ AWS IAM
AWS Black Belt Techシリーズ AWS IAM
 
AWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWS
 
[AWSマイスターシリーズ] Amazon SQS / SNS
[AWSマイスターシリーズ] Amazon SQS / SNS[AWSマイスターシリーズ] Amazon SQS / SNS
[AWSマイスターシリーズ] Amazon SQS / SNS
 

More from 都元ダイスケ Miyamoto

認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio都元ダイスケ Miyamoto
 
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019都元ダイスケ Miyamoto
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
 
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)都元ダイスケ Miyamoto
 
20170312 F.K様向け ライフパートナーM.M様のご提案
20170312 F.K様向け ライフパートナーM.M様のご提案20170312 F.K様向け ライフパートナーM.M様のご提案
20170312 F.K様向け ライフパートナーM.M様のご提案都元ダイスケ Miyamoto
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解都元ダイスケ Miyamoto
 
マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016都元ダイスケ Miyamoto
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座都元ダイスケ Miyamoto
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda都元ダイスケ Miyamoto
 
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05都元ダイスケ Miyamoto
 
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編都元ダイスケ Miyamoto
 
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...都元ダイスケ Miyamoto
 
20121206 VOYAGE LT - 名前重要って言うけどさ
20121206 VOYAGE LT - 名前重要って言うけどさ20121206 VOYAGE LT - 名前重要って言うけどさ
20121206 VOYAGE LT - 名前重要って言うけどさ都元ダイスケ Miyamoto
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回都元ダイスケ Miyamoto
 
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategyjava-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy都元ダイスケ Miyamoto
 
DevLOVE Beautiful Development - 第一幕 陽の巻
DevLOVE Beautiful Development - 第一幕 陽の巻DevLOVE Beautiful Development - 第一幕 陽の巻
DevLOVE Beautiful Development - 第一幕 陽の巻都元ダイスケ Miyamoto
 

More from 都元ダイスケ Miyamoto (20)

認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
 
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
 
AWSクラウドデータストレージ総論
AWSクラウドデータストレージ総論AWSクラウドデータストレージ総論
AWSクラウドデータストレージ総論
 
20170312 F.K様向け ライフパートナーM.M様のご提案
20170312 F.K様向け ライフパートナーM.M様のご提案20170312 F.K様向け ライフパートナーM.M様のご提案
20170312 F.K様向け ライフパートナーM.M様のご提案
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
 
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
 
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
 
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
 
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
 
20130516 cm課外授業8-aws
20130516 cm課外授業8-aws20130516 cm課外授業8-aws
20130516 cm課外授業8-aws
 
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
 
20121206 VOYAGE LT - 名前重要って言うけどさ
20121206 VOYAGE LT - 名前重要って言うけどさ20121206 VOYAGE LT - 名前重要って言うけどさ
20121206 VOYAGE LT - 名前重要って言うけどさ
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
 
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategyjava-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
 
DevLOVE Beautiful Development - 第一幕 陽の巻
DevLOVE Beautiful Development - 第一幕 陽の巻DevLOVE Beautiful Development - 第一幕 陽の巻
DevLOVE Beautiful Development - 第一幕 陽の巻
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

20150329 Developers.IO 2015 C-1 クラスメソッドのAWSドッグフーディング