CloudWatch Logsエージェントがデフォルトでデータを送信する頻度
5秒ごと
CloudWatchの無料枠で受け取る事ができるメトリックアップデートの頻度
5分
受信および集計するデータの最小時間間隔
1分
5秒ごと
5分
1分
単一のVPCにパブリックサブネットが1つデフォルトで設定される
VPCを設置しないでEC2インスタンスを立ち上げる場合、サブネットの設定が必須になる
グローバルIPを持つAWSサービスに対して、VPCの内部から直接接続するための出口。
Gateway型はサブネットに特殊なルーティングを設定し、VPC内部から直接外のサービスと通信する
VPC peeringは一部のリージョン間に限られている。
サブネットにエンドポイント用のプライベートIPを設定して使用する
エンドポイントポリシーによりアクセス制御を実施
accepted/rejectedされたトラフィックを保持する
10分間で収集・プロセッシング・保存する
VPC内の全てのIPアドレスを利用している場合は、VPCのCIDRブロックを変更して、新しいサブネットに十分な空きスペースを作成する事で枯渇時対処することも可能。
セキュリティを高める際に利用する
具体的には、アプリケーションが動いているインスタンスは他のAWS顧客とハードウェアを共有してはいけない場合、以下の構成を検討する事ができる
Amazon RDS MySQL DBインスタンスで現在、利用可能な最大のインスタンスタイプで実行されているとする。
DBインスタンスはCPUおよびネットワーク帯域幅に近いキャパシティで動作。
今後、トラフィックが増加することを予想される。より多くのトラフィックを捌くアプローチ
プライマリDBインスタンスに障害が発生した場合、RDSマルチアベイラビリティゾーンのデプロイは、
標準名レコード(CNAME)がプライマリからスタンバイに変更される。
セッション情報をRDSではなく、ElasticCacheを利用する際の挙動
追加ストレージを割り当てる事が可能。割り当て中にパフォーマンスが低下する期間を計画する。
dynamodbへまとめてデータを入れたい時がある。バルクインポートの手順を紹介
{ "tsukada-tw": [ { "PutRequest": { "Item": { "ID": {"N":"1"}, "Tip": {"S":"【保存版】プレゼンで使えるグラフや図を表現する英語フレーズ集 https://www.rarejob.com/englishlab/column/20190426/" } } } }, { "PutRequest": { "Item": { "ID": {"N":"2"}, "Tip": {"S":"海外でも母の日は祝うもの? Mother’s Dayの時期や英語のお祝いメッセージを紹介! https://www.rarejob.com/englishlab/column/20190425/" } } } }, { "PutRequest": { "Item": { "ID": {"N":"3"}, "Tip": {"S":"英文メールの結びにはなんて書けばいい?ビジネスからカジュアルまで「よろしく」や「敬具」に代わる結びの英語表現まとめ https://www.rarejob.com/englishlab/column/20190424/" } } } } ] }
aws dynamodb batch-write-item --request-items file://bulk.json
資格こそ取っていないが、AWSは常に触っている。試験を受ける受けないは別にして、知識をあるレベルまで引き上げる上で、試験用の本から多くのことを学ぶことができる。
今回は「徹底攻略AWS認定ソリューションアーキテクトアソシエイト教科書」を通じて得られた知識についてまとめた。
mode | 解説 |
---|---|
迅速 | オンデマンドと呼ばれる。 成功する保証がない |
標準 | 3~5時間でアーカイブから取り出しが可能 |
共有ストレージ。ユーザー側でスナップショット取得不可
エフェメラルディスクとも呼ばれる。EC2停止時にはデータは消失。再起動では消失しない
データは3箇所のAZに格納される
1つのAZにつき2箇所のディスクに書き込まれる => 合計6箇所に保存される
結果整合性モデルが一部採用されている
メソッド | 種別 | 特徴 |
---|---|---|
PUT | 新規追加 | 書き込み後の、読み込み整合性 |
PUT | 更新 | 結果整合性 |
DELETE | 削除 | 結果整合性 |
メッセージの送信、受信のアクセスポイント
TOPICを作成し、購読者が購読することで通知の送受信が可能になる
TOPICから発信されるメッセージの購読者を設定
の利用が可能
作成したTOPICに対してアプリケーションからメッセージを送信。
送信されたメッセージはSQSから購読者(サブスクライバ)へ配信される
定義ファイルをテンプレートと呼ぶ
テンプレートから呼び出されるサービスの集合を、スタックと呼ばれる
システムが正常に継続して動作し続ける能力
指標はパーセンテージ。一般的に稼働率と呼ばれる。
スケーリングプラン設定値が閾値超え
↓
EC2インスタンスを増加(Auto Scalingグループの設定値に従う)
EC2インスタンス数が最も多いAZからランダムに選ばれる
もしインスタンス数が同じ場合は、最も古いEC2インスタンスがあるAZが選ばれる
それも同じ場合は、次に課金が発生する時間が最も短いEC2インスタンスが選ばれる
それも同じ場合は、この中からランダムに選ばれる
Auto Scalingが連続で実施されないようにする待ち時間
アプリケーションのバグや、オペレーションミスの場合、RDSの自動再起動を行う。
フェールオーバでの復旧が不可能な場合、バックアップからのリストアをする必要がある。
標準のスナップショット機能を用いる
EBS もしくは AMIで取得したバックアップを用いて、リストアを行う
単一のAZ内のEC2インスタンスを論理的にグルーピング
複数のコンピューティングリソースを1つとして機能させる。
クラスターコンピューティングに最適
EC2 ⇔ EBS間
EC2 ⇔ その他が同一のネットワークになる
EC2 ⇔ EBS間が専用のネットワークになる
DynamoDBのインメモリキャッシュ。
のように使う
Google/FacebookなどのOpenID Connectをサポート
どちらもユーザがAWSで鍵を管理・保管するサービス
クライアントサイド(CSE)
サーバサイド暗号化(SSE)
AWSのサービスでは、Deployができるサービス、Provisioningができるサービス、その両方が可能なサービスが存在する。まとめると以下の通り。
Service | Deploy | Provisioning |
---|---|---|
OpsWork | ○ | ○ |
Elastic Beanstalk | ○ | ○ |
Code Deploy | ○ | × |
Cloud Formation | × | ○ |
Consolidated Billing(一括請求)で統合可能
メンバーのアカウント(Linked Account)の請求を、
マスターのアカウント(Payer Account)に統合できる
docker をbuild中にErrorがでてbuildできなくなった。
One of the configured repositories failed (Unknown), and yum doesn't have enough cached data to continue. At this point the only safe thing yum can do is fail. There are a few ways to work "fix" this: 1. Contact the upstream for the repository and get them to fix the problem. 2. Reconfigure the baseurl/etc. for the repository, to point to a working upstream. This is most often useful if you are using a newer distribution release than is supported by the repository (and the packages for the previous distribution release still work). 3. Disable the repository, so yum won't use it by default. Yum will then just ignore the repository until you permanently enable it again or use --enablerepo for temporary usage: yum-config-manager --disable <repoid> 4. Configure the failing repository to be skipped, if it is unavailable. Note that yum will try to contact the repo. when it runs most commands, so will have to try and fail each time (and thus. yum will be be much slower). If it is a very temporary problem though, this is often a nice compromise: yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true Insufficient space in download directory /var/cache/yum/x86_64/latest/amzn-main * free 0 * needed 100 k
dockerのdiskがfullになっている
使っていないdocker container、docker imageを削除する
% docker rm `docker ps -aq` 38068772176a 3888aa5447b1 66fe52df5528 82584720485f 5bd5855641fd 379ca80b607c e06a7e7e1e60 5685e43f3a4a e3b182bbb54d
% docker images | awk '{print $3}' | xargs docker rmi Deleted: sha256:aea654465ef677aeb2b9e25eb8b9fc4a8b1aa23908c229249898cf2e2b9d4ed9 Deleted: sha256:cf346c3b10cd250b10af438fbf1554781a38c243dd873b66dc2b07f82a8375ca Deleted: sha256:16ecc35ae52fd0fbc6428510ac554549227baf58e053937d5b7f6732595d057f Deleted: sha256:9e6d8d236b08a8f4eabdbd661d8caa80e87db8f663894334f3b19a79bdc15a0a Deleted: sha256:c834d9fa415cddfd8c6d3ebd726816007529348e7abd6be47cbc021955b3ea5c Deleted: sha256:7d2ad60980725a5cb256bafc8b0df8a0b4c41b6e754063164c793888c2239ff0 Deleted: sha256:518874706ae596a3f69c7f6e93c9095b7284e5c20c6c1c80c8ab8b924a1049e9 Deleted: sha256:cd217551e011d423ad768be44bab435e8bb6f7ff71276c1288ff2477541bf353
redashでQuery Resultを利用するとSQLiteを利用することができる。
ただし、SQLite内で割合を計算をするような処理をすると、0になってしまうので、一工夫必要になる
SELECT success / try * 100 AS ratio, success , try
castと、roundを利用し、小数点以下の計算に対応させる。
SELECT round(cast(success as REAL) / cast(try as REAL),5) * 100 AS ratio, success as success , try as try
どの言語でも時間を表示したり、プログラムに利用したいことが多々ある。
go言語でよくつかうライブラリ time について整理する。
公式ドキュメントはこちら
時間のフォーマットは世界中にいろいろある。
const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" StampMicro = "Jan _2 15:04:05.000000" StampNano = "Jan _2 15:04:05.000000000" )
今回は我々日本人に馴染みのあるRCF3339を利用することとする
package main import ( "fmt" "time" ) func main() { //現在時間を取得する t := time.Now() fmt.Println(t) // RCF3339 formatに変換する fmt.Println(t.Format(time.RFC3339)) // 年月日を取得する fmt.Println(t.Year(), t.Month(), t.Day()) // 月を数字(April -> 4 に変換する) fmt.Println(t.Year(), int(t.Month()), t.Day()) // 時分秒を表示 fmt.Println(t.Hour(), t.Minute(), t.Second()) }
2019-04-06 11:13:36.125176 +0900 JST m=+0.000473714 2019-04-06T11:13:36+09:00 2019 April 6 2019 4 6 11 13 36
“` int(t.Month()) “` とすることで数字(4月など)に変換できるのは面白い。
株価情報を取得したいことがある。
go言語ではパッケージを利用することにより株価の取得が非常に簡単にできている。
https://github.com/markcheno/go-talib
サンプルコードや導入手順もこちらに記載されてある。
go get github.com/markcheno/go-talib
go get github.com/markcheno/go-quote
Googleの株価を取得する。
オリジナルはこちら
https://finance.yahoo.com/quote/GOOG?p=GOOG&.tsrc=fin-srch
package main import ( "fmt" "github.com/markcheno/go-quote" "github.com/markcheno/go-talib" ) func main() { spy, _ := quote.NewQuoteFromYahoo("GOOG", "2019-04-01", "2019-04-04", quote.Daily, true) fmt.Print(spy.CSV()) rsi2 := talib.Rsi(spy.Close, 2) fmt.Println(rsi2) }
$ go run main.go datetime,open,high,low,close,volume 2019-04-01 00:00,1184.10,1196.66,1182.00,1194.43,1252500.00 2019-04-02 00:00,1195.32,1201.35,1185.71,1200.49,827900.00 2019-04-03 00:00,1207.48,1216.30,1200.50,1205.92,1017800.00 [0 0 100]
あらゆるプログラミング言語でunitテストという作業は必要だが、今回はそのgo言語版について説明する。
今回はgoのデフォルトの “` testing “` を使い、ライブラリのテストを行うものとする。
$ tree . ├── library │ ├── Ave.go # ライブラリ │ └── Ave_test.go # ライブラリのテストプログラム └── main.go # 呼び出し元
library/Ave.go は以下の通り
package library func Average(s []int) int { total := 0 for _, i := range s { total += i } return int(total / len(s)) }
受け取ったスライスを元に、平均を計算し、
平均値を返す
テストプログラムは
“` import “testing” “`
を行い、functionは
“` func TestAverage(t *testing.T) “`
という名前で作成する必要がある。
package library import "testing" func TestAverage(t *testing.T) { v := Average([]int{1, 2, 3, 4, 5}) if v != 3 { t.Error("Expected 3, got", v) } }
テスト実施コマンドはこちら
“` go test ./… “`
現在のディレクトリで全てのテストプログラムを実施するという意味。
$ go test ./... ? github.com/GitSumito/go-sample [no test files] # testがありません ok github.com/GitSumito/go-sample/library 0.009s
libraryのテストが完了した
詳細を確認する際は “` -v “` オプションを実施する
$ go test ./... -v ? github.com/GitSumito/go-sample [no test files] === RUN TestAverage --- PASS: TestAverage (0.00s) PASS ok github.com/GitSumito/go-sample/library 0.008s
テストコードをあえて失敗するよう修正する
package library import "testing" func TestAverage(t *testing.T) { v := Average([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}) if v != 3 { t.Error("Expected 3, got", v) } }
再度テストを実行
$ go test ./... -v ? github.com/GitSumito/go-sample [no test files] === RUN TestAverage --- FAIL: TestAverage (0.00s) Ave_test.go:8: Expected 3, got 5 FAIL FAIL github.com/GitSumito/go-sample/library 0.008s
Skipを使うことによりスキップさせることが可能
package library import "testing" var Debug bool = true func TestAverage(t *testing.T) { if Debug { t.Skip("Skip Reason") } v := Average([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}) if v != 3 { t.Error("Expected 3, got", v) } }
結果
$ go test ./... -v ? github.com/GitSumito/go-sample [no test files] === RUN TestAverage --- SKIP: TestAverage (0.00s) Ave_test.go:10: Skip Reason PASS ok github.com/GitSumito/go-sample/library 0.009s
本記事は、udemyの講座で得た情報をメモとしてまとめました。非常に濃厚な講義ですので、以下の講座を強くお勧めします。
https://www.udemy.com/go-fintech/