「あ、EUからのアクセスを拒否したいな......」と思うこと、ありますよね。私も今日、そう思いました。
私は趣味と実益を兼ねて(いるつもり)、いくつかのしょうもないWebサービスを個人で運用してるのですが、そこに対するEUからのアクセスを遮断したいと思い、それを nginx で対応してみたので、そのメモです。
続きを読む「あ、EUからのアクセスを拒否したいな......」と思うこと、ありますよね。私も今日、そう思いました。
私は趣味と実益を兼ねて(いるつもり)、いくつかのしょうもないWebサービスを個人で運用してるのですが、そこに対するEUからのアクセスを遮断したいと思い、それを nginx で対応してみたので、そのメモです。
続きを読む趣味でお世話をしているサーバーインスタンスのうちのひとつが、最近以下のような事象を時折起こしておりまして。
さすがに趣味の範疇なので、深夜に飛び起きて対応できるようなアラート通知設定はしておらず、とはいえ起きてからその理由を探ろうとするのだけど、終息したあとに見られるものといったらせいぜい以下のようなことくらい?
今回の場合だとCPU使用率とLA(ロードアベレージ)が高騰していたことくらいしかわからずで、そのときにどういうプロセスがリソースを食ってたんだろう、みたいなことは把握することができなかった。
こんなかんじ。diskはちょっとハネてるかな...。。
対象のサーバーには Mackerel(mackerel-agent)を導入している。そこで、この原因を突き止めるための施策として、チェックプラグインとそのアクション機能を使って「そのサーバーが高負荷状態に陥ったときのプロセスリスト」を自動で出力させるように仕込んでみた。
続きを読むcloud.google.com/go/storage
を使う。
func uploadGcs(r *http.Request) error { bucketname := "bucketname" // GCSバケット名 objname := "objname" // "foo/var/baz.png" みたいなかんじ ctx := r.Context() client, err := storage.NewClient(ctx) if err != nil { log.Printf("failed to create gcs client : %v", err) return err } // GCS writer writer := client.Bucket(bucketname).Object(objname).NewWriter(ctx) writer.ContentType = "image/png" // 任意のContentTypeに置き換える // upload : write object body if _, err := writer.Write(([]byte)(uploadData)); err != nil { log.Printf("failed to write object body : %v", err) return err } if err := writer.Close(); err != nil { log.Printf("failed to close gcs writer : %v", err) return err } return nil }
GCSにアクセスするための認証情報は、認証の概要 | Google Cloud に書いてあるとおり、
GOOGLE_APPLICATION_CREDENTIALS
として設定する上記のことをしておけば、自動的に認証情報がロードされ、GCSへのアクセスもできるようになる。簡単。
は、context ctx
を google.golang.org/appengine
を使って ctx := appengine.NewContext(*http.Request)
として取得するだけで、その appengineアプリケーションと同じプロジェクト内のGCSにアクセスできるようになる。