DRYにするか分けるかについて

DRYにするかどうかはよく誤って判断されることが多いと思います。 スタートアップ時には先のことを想定していないケースが多く、サービスの規模が拡大してから問題が発生することが多いかと思います。 そこで、どういうものはDRYにすべきで、どういう場合に…

AngularJS4でルーティングありでng newする場合

コマンド ng new hoge -dir hoge-front --routing help ng new <options...> Creates a new directory and a new Angular app eg. "ng new [name]". --dry-run (Boolean) (Default: false) Run through without making any changes. aliases: -d, --dryRun --verbose (Bo</options...>…

angular-cliのアップデート

node, npmを最新にする https://nodejs.org/en/ インストール済みのパッケージをアップデート npm update -g http://keiwt.hatenablog.com/entry/2016/03/20/225001 globalのangular-cliを最新にする npm uninstall -g @angular/cli npm cache clean npm ins…

The parameter Origin DomainName does not refer to a valid S3 bucket.

CloudFormationでサーバーレスアプリケーションを作る際にCloudFrontからWebsiteの設定をしたS3にトラフィックを流すと思います。 その際にタイトルのエラーが発生することがあります。 以下のような設定の場合です Origins: - DomainName: !Sub - ${Domain}…

WEBにおいて明確しておいた方がよい方針・指針

WEBにおいては方針や指針をちゃんと決めておけば、負の遺産の発生を防ぐことができます。 方針・指針が特に明確に決まっていない、または曖昧なまま事業を開始するといずれ負の遺産が膨大になったり、スピードが出ない開発になったり、開発プロセスが増えて…

DynamoDBのベスト・プラクティス

事前に必要な知識 リレーショナルではない アプリケーション側でデータの整合性を担保する キャパシティーユニット 4KBを1秒あたり1回の強力な整合性のある読み込み or 4KBを1秒あたり2回の結果整合性のある読み込み 制限 http://docs.aws.amazon.com/ja_jp/…

RDS(RDBMS)とDynamoDB(NoSQL)の使い分けについて

日本ではRDBMSが多用されている件についてですが、よくあるアンチパターンが以下です。 DynamoDB(NoSQL)が最適の場合にRDS(RDBMS)を使っている 何も考えずにRDS(RDBMS)を使用 ※モバイル, ウェブ, ゲーム, アドテク, IoTでもRDSを使用 ↓ サービスがスケール ↓…

Ruby2.3.3での省メモリ化をやってみる

rubyはよく、メモリリークが発生するとか、メモリを爆食いするとか言われています。 明示的にnilを入れて、メモリを開放したり、GC.startしたりして対応する人が多いようです。 そこで、実際どうなのかruby2.3.3で確認してみます。 個人的にはrubyは書きやす…

rbenvの使い方をまとめてみる

rbenvの使い方で以下をすべてまとめたサイトがないのでまとめてみる。 初回にすべきこと バージョン切替時 rbenv install -lで最新のバージョン(2.3.3)が表示されるようにする rbenv 初回 brew install rbenv rbenv init echo 'eval "$(rbenv init -)"' >> ~…

dockerでローカルにAmazonLinuxの環境構築してみる

手順 Authenticate your Docker client to the Amazon Linux container image Amazon ECR registry. aws ecr get-login --region ap-northeast-1 --registry-ids 137112412989 Authenticate your Docker CLI to the registry docker login -u AWS -p passwor…

CloudFormationで複数アプリケーションでExport名を一意にする

For each AWS account, Export names must be unique within a region. ということなので、Export名は動的にしないと2つ目のアプリケーションで同じテンプレートを使う場合にエラーになってしまいます。 そこで、Export名を動的にする方法をご紹介致します。…

CloudFormationでAPIGatewayのCORSを有効にするには

サーバーレスアーキテクチャの実現にはEC2やECSを使用せずに、S3上のJSからApiGatewayにアクセスできるないといけません。 するとおのずと、ApiGatewayに作成したAPIにCORSを有効にする必要があります。 AWSを使うなら、ちゃんとCloudFormationを使ってイン…

Rails5のAPIモードを試してみる

準備 $ ruby -v ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin13] $ rails -v Rails 5.0.0.1 new && bundle install rails new hoge --api -T -B -d mysql bundle install --path=vendor/bundle middleware $ rails middleware use Rack::Send…

Golangの基礎

参考 ドキュメント - The Go Programming Language Golangの基礎としてはまず,tour of goを一通り見て理解します。 A Tour of Go tour of go Packages goのプログラムの開始 mainパッケージからスタート パッケージ名 importの最後のパス ※これによって関数…

DynamoDBからデータを取得してみる(query)

テーブル定義 Views: Type: AWS::DynamoDB::Table Properties: TableName: VIEWS KeySchema: - AttributeName: ID KeyType: HASH GlobalSecondaryIndexes: - IndexName: GSI_URL KeySchema: - AttributeName: URL KeyType: HASH Projection: NonKeyAttribute…

DynamoDBの基礎

TableName 名前を指定しない場合、AWS CloudFormation は一意の物理 ID を生成し、その ID をテーブル名として使用します。 KeySchema primary key for the table ※文字列、数値、またはバイナリ ※テーブル作成時に必要な唯一のもの ※変更する際にはテーブル…

AWS Lambdaのベスト・プラクティス

Lambdaを使用する際にはベストプラクティスが何点かあるようですが、特に重要な点をピックアップします。 Instantiate AWS clients and database clients outside the scope of the handler to take advantage of connection re-use. var AWS = require('aws…

AWS CloudFormationでyaml, !GetAtt, Export, !ImportValue, !Subが使えるようになったので使ってみる

AWS CloudFormation Update – YAML, Cross-Stack References, Simplified Substitution | AWS Blog yaml jsonを以下を使ってyamlにするだけ Convert JSON to YAML !GetAttや!Ref !を使うことでAWSの擬似関数であることが明示的になります。 ※!はyamlのタグ用…

CloudFormationでAWS::Route53::RecordSetGroupでS3のバケットにAliasレコードを設定してみる

HostedZoneName Zone Apex (Naked Domain)を指定します。 RecordSets Name ユーザーがブラウザでアクセスするドメインを指定します。 AliasTarget S3の場合は以下になります。 ※前提: S3のバケット名とユーザーがアクセスするドメインと一致している必要があ…

Golangの&や*

The Go Programming Language Specification - The Go Programming Language 変数の宣言 var hoge = "hoge" & ポインター log.Println(&hoge) ↓ 0xc82000ade0 * ポインターの値 log.Println(*&hoge) ↓ hoge log.Println(*hoge) ↓ invalid indirect of hoge (…

Golangの変数の使い分け

The Go Programming Language Specification - The Go Programming Language var 変数の宣言用 := 関数の返り値格納用 すべて:=に統一でも良いかもしれません。

Golangのflag

Golangでコマンドラインツールやバッチを作る際によく使うのでメモ flag - The Go Programming Language flagの渡し方 go run main.go -user google -app golang flagの設定 var ( user = flag.String("user", "google", "user name") app = flag.String("ap…

ACM(AWSCertificateManager)の発行承認メール(domain validation email)がドメイン登録時のアドレスに来ない場合

Route53のRegistered DomainsのPrivacy Protectionを以下のように変更する。 Hide contact information if the TLD registry, and the registrar, allow it ↓ Don't hide contact information 本来は@ドメイン名でメールを受け取れるようにすべきようです。 …

AutoScaling(オートスケーリング)時のデプロイのベストプラクティス(CodeDeploy)

AutoScaling(オートスケーリング)時にはLaunchConfigのAMIを元に新しいインスタンスが作成されます。 しかし、GitHub等のリビジョンが進んでいると新しいインスタンスのみ古いリビジョンのソースになってしまいます。 そのため、主に以下の2つの方法があり…

HTTPS化のベスト・プラクティス(AWSのRoute53,ACM,ELB,CloudFrontを使用する)

実質HTTPSがデファクトになっていますので、HTTPS化する方法をご紹介致します。 ※HTTP2はHTTPSを前提としています ※Appleはアプリで使用するAPIにHTTPSを強制化します AWSさんのおかげで、HTTPS化するのがとても簡単になっていますので、もはやHTTPを使う理…

Web API: The Good Partsを読んでみて、ApiGatewayのベスト・プラクティスについて考えてみる

ApiGatewayでAPIを設定するに当たっての要点をまとめてみます。 例は本の内容を参考に独自のものにしています。 https://www.amazon.co.jp/Web-API-Parts-%E6%B0%B4%E9%87%8E-%E8%B2%B4%E6%98%8E/dp/4873116864 URL ドメインはapi.から始める https://api.ex…

AWSにおけるインフラの依存関係について整理してみる

各AWSのリソースと各依存先をまとめてみます 以下が頭に入っているといないではインフラスキルは段違いだと思います。 IAM,S3 すべての始まり VPC IAMに依存 ※VPCFlowLogのDeliverLogsPermissionArn SG VPCに依存 ※SGはVPC内に存在 ELB VPCに依存 ※ELBはサブ…

AutoScalingグループを作成する場合の注意点について

AutoScalingグループを作成する際の注意点について、まとめていきます。 特に言及していないプロパティはAWSの例通りでいいと思います。 AutoScalingGroupのプロパティ インスタンスの数(MinSize,MaxSize,DesiredCapacity) AZの倍数にする 東京なら1aと1cな…

Unable to determine service/operation name to be authorized

解決策 IntegrationHttpMethodをPOSTにする "MockMethod": { "Type": "AWS::ApiGateway::Method", "Properties": { "ApiKeyRequired" : "false", "AuthorizationType": "NONE", "HttpMethod": "GET", "Integration": { "IntegrationHttpMethod" : "POST", "T…

CloudFrontでaws cliからOrigin Access Identityを作成する

コマンドと結果 aws configure set preview.cloudfront true aws cloudfront create-cloud-front-origin-access-identity --cloud-front-origin-access-identity-config CallerReference=${現在日時のタイムスタンプ},Comment=XXXX { "Location": "https://c…

CloudFormationによるVPC Flow Logs

AWS CloudFormation Adds Support for Amazon VPC Flow Logs, Amazon Kinesis Firehose Delivery Streams, and Other Updates AWSさんがCloudFormationによるFlow Logsをサポートしたようです。 しかし、よいテンプレートがないので作ってみました。 FlowLog…

Supervisor(GolangのWEBアプリ)をインスタンス起動時に自動起動させてみる

GolangのアプリケーションのためのSupervisorは何を使って起動するかについてですが、 cfn-initやCodeDeployではフォアグラウンド起動ができません。 Amazon Linux AMIにはupstartの仕組みがすでに備わっていますので、そちらを使ってみます。 /etc/init/sup…

ログインなしでサーバー運用するには

参考 speakerdeck.com ※上記はOpsWorksを使用している点であまりオススメはできないですが、参考として置いておきます。 サーバーのログインの面倒くさい点・問題点 ユーザー追加、管理 誰が何をしたか、するかが可視化されない 手動デプロイによるオペミス …

AWS CodeDeployとGitHub Auto-DeploymentとAutoScalingを連携させてみる

やること GitHubでプルリクがマージされたら、 自動的にCodeDeployがAutoScalingグループにデプロイしてくれるようにする 前提 EC2にCodeDeployエージェントがインストール済み GitHubユーザーが作成済みでAWSCodeDeployRoleがアタッチされている Deployment…

Golangの本番環境(production)にsupervisorを使ってみる

参考 Supervisor: A Process Control System — Supervisor 3.3.0 documentation supervisorのインストール # pip --version pip 8.1.2 from /usr/local/lib/python2.7/site-packages (python 2.7) # pip install supervisor Successfully installed meld3-1.…

angular2-material(angular/material2)を使ってみる

angular-cliを使って、angular2-materialをインストールしてみます。 参考 GitHub - angular/material2: Material Design components for Angular 2 material2/GETTING_STARTED.md at master · angular/material2 · GitHub GitHub - jelbourn/material2-app:…

npm ERR! fetch failed https://registry.npmjs.org/XXXXXXXX Error: connect ECONNREFUSED 103.245.222.162:443

以下のコマンドを実行した際にタイトルのエラーが表示される場合はhttps://nodejs.org/en/から最新版をインストールすると解消されます。 sudo npm install -g angular-cli nodeは基本動かなくなったり、エラーが発生した場合は最新版をインストールすれば問…

ELBを作成する場合の注意点について

ELBを作成する際の注意点について、まとめていきます。 特に言及していないプロパティはAWSの例通りでいいと思います。 AccessLoggingPolicy S3BucketPrefix ELBのログ用バケットを1つにする場合はS3BucketPrefixを指定して、 ELB毎にディレクトリを分けます…

Subnet(サブネット)を作成する場合の注意点について

WEBサーバーはプライベートサブネットに配置する プライベートサブネットはインターネットからのインバウンドを許可しない場合に使用します WEBサーバーは基本的にはELB経由の80(HTTP)のみ許可しますので、 パブリックサブネットに置く必要はありません。 WE…

VPCを作成する場合の注意点について

CidrBlock 以下のいずれかを使用する。 なお、ネットマスクは/28(16個)~/16(65,536個)にする 10.0.0.0 - 10.255.255.255 (10/8 prefix) 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) http://www.faqs…

AWS CloudFormationのネストしたスタックのテンプレートを作ってみた

追記: http://keiwt.hatenablog.com/entry/2016/09/22/173231 実際CloudFormationを使用するにあたってAWSのサンプルテンプレートがありましたが、ネストしたスタックのいいテンプレートがまだないので、自分でテンプレートを作ってみることにしました。 作…

Google Vision APIで画像解析してもらってみる(pythonでリクエスト用jsonを自動生成)

Google Vision APIのリクエスト用json作成はGoogle先生のpythonを使って自動化できるようなので、やってみる。 Google Vision APIを使えるようにするまで 割愛 参考 参考 https://cloud.google.com/vision/docs/requests-and-responses?hl=ja git clone cd ~…

Google Vision APIで画像解析してもらってみる

最近β版が公開された画像解析APIを使ってみます。 設定 コンソールプロジェクトの作成 or 選択 請求先の登録 Google Vision APIを有効にする ブラウザーAPIキーの生成 https://cloud.google.com/vision/docs/getting-started?hl=ja キーをenvに設定 echo exp…

久しぶりにnodeを触るのでnodeとnpmとインストール済みパッケージをupdateしてみる

nodeとnpmをupdate https://nodejs.org/en/ ここからインストールすれば、最新になる。 アンインストールして、再インストール等はしなくても問題ない。 ※以下のエラーが出ている場合も同様 module.js:338 throw err; ^ Error: Cannot find module 'readable…

S3上のバケット内のオブジェクト(画像)に一律Cache-Controlヘッダーを設定してみる

s3cmdのインストール $ brew install s3cmd キャッシュを設定してみる Cache-control s3cmd --recursive modify --add-header="Cache-Control:max-age=31536000" s3://{{バケット名}}/assets/img stackoverflow.com 実行後には以下の画像のようにCache-Contr…

AWS CLIを使って、S3のディレクトリをダウンロード・アップロードしてみる

準備 pythonのインストール Download Python | Python.org pipのインストール $ curl -O https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py AWS cliのインストール $ sudo pip install awscli 参考資料 http://docs.aws.amazon.com/cli/lates…

Y!mobileから、MVNOの格安SIM(IIJ Mio)に乗り換えてみる

kakuyasu-sim.jp この度初めてMVNOに乗り換えてみました。 その際の諸々を書いてみる。 From www.ymobile.jp To www.iijmio.jp 乗り換え前 Y!mobileから機種変更はいかがでしょうか。今ならXXXX円引き。 さらに、機種変更すると通常3GB×2で3980円/月とのSMS…

参考になるおしゃれな名刺のデザインのサイト集

名刺をせっかく作るなら自分でデザインしてみる。 ゼロから良さ気なのが思い浮ばないので、海外のおしゃれな名刺のデザインのどれかに似せてみる。 photoshopvip.net graphicriver.net matome.naver.jp

2016年を展望してみる

新年初投稿ということで今年のキーワードになるであろうものを挙げてみます。 サーバーレス化 Serverless Architecture on AWS(20151023版) from Keisuke Nishitani www.slideshare.net 面倒くさいサーバー運用やサーバーの時間課金は割と無駄が多いのでは…

AngularJS2 Tour of Heroesしてみる

Tutorial: Tour of Heroes - ts github.com 今回AngularJS2のLearning Pathの3までやってみました。 https://angular.io/docs/ts/latest/guide/ そこ中での要点を記載していきます。 Interface or Class? If we need a Hero that goes beyond simple propert…