Terraform入門 #2 Terraformはこわくない!!

Terraform入門 #1の続きです。 Terraformを始めるのに一番の障壁 既存のインフラコードで試してみたいけどアクセスキーの準備とかアカウント申請が面倒だし、なんか壊しそうで怖い:scream: 自分でやるにしても、AWS契約しないと試せないんでしょと思って面倒…

Terraform入門 #1 Terraformはいいぞ

前書き 人が書いたterraformのメンテぐらいは見よう見まねでやってるけど、一からやれと言われたらよく分からない。そう思ってた1年前ぐらいの自分を思い出しながら気軽に入門してもらうにはどうすればいいか考えてみました。 Terraformはこわくないしほんと…

GoogleAnalyticsのiOS SDKをpodspec側のdependencyにすると相性が悪い

GoogleAnalyticsのSDKのラッパーライブラリを作りたい そのためには、podspec側にdependencyを書いておく必要がある。こんな感じ。 Pod::Spec.new do |s| s.name = 'Example' s.version = '0.1.0' s.summary = 'A short description of Example.' 略 s.depen…

言語のコミュニティがどうとかどうでもいい

当方、iOSをobjcからやってて、Androidも少し。フロントエンドは、jqueryの頃から、typescriptあたりまでなんとなく。 サーバーは、Rails、Scala Play frameworkあたりを少々。 今はインフラ周り、AWS、GCP、コンテナ周りは、docker、k8s、ECS、Deisなどを、…

Objective-Cのallocは何をしてるのか

allocはNSObjectのクラスメソッド alloc - NSObject | Apple Developer Documentation + (instancetype)alloc; The isa instance variable of the new instance is initialized to a data structure that describes the class; memory for all other instanc…

AnyClassの正体

AnyObjectの型 typealias AnyClass = AnyObject.Type 何か分からないものの型を表現してる。 参考 Swifter - Swift Must Know Tips

kubernetesでserviceのselectorはnamespace内に閉じてるのか検証

まとめ 同じlabel名がつけられていてもnamespace内でのみ振り分けられる 検証の構成 GKE上で試した Deploymentでただ単にnginxかapacheが動いてるだけ sandbox1ではnginx、sandbox2ではapacheが動いてる Service(LoadBalancer)で接続 labelは同名にする name…

Swiftで動的にクラス作ってメソッド呼ぶ。しかも全く型情報がない状態で。要はjavascriptみたいなことがしたい

まとめ NSSClassFromString使う 引数が3つ以上だとperformSelectorは使えない SwiftだとNSInvocationは使えないので代わりにIMPを使う Class methodとInstance methodで呼び方ちょっと違う performSelectorの返り値の型はUnmanaged<AnyObject>でtakeUnretainedValueを使</anyobject>…

kubernetes meetup Tokyo #4に参加してLT発表してきた #k8sjp

k8sjp.connpass.com 今日はこれで発表してきます Kubernetes Meetup Tokyo #4 https://t.co/2rxxAnKyAB #k8sjp— オオシママサト (@_mpon) 2017年4月20日 ECSからGKEに乗り換えたい 感想 Google Japanの食堂でながーい会場で発表した。人めっちゃいた。 kuber…

GKEからCloud SQLに接続する方法

Deisのpostgresをoff-clusterにする(Cloud SQLを利用) - まーぽんって誰がつけたの?やDeisのpostgresをoff-clusterにする(postgresql on GCEを利用) - まーぽんって誰がつけたの?でCloud SQLをdeisのdatabaseとしようともがいてたけど解決した話。 Cloud S…

Proxy Protocolを知りました

Proxy ProtocolはL4におけるx-forwarded-forみたいなもの 2010年ごろからあるみたいだったけどお恥ずかしながら知らずに生きてきた。 HTTPヘッダが覗けるロードバランサー(L7ロードバランサー)ならx-forwarded-forとかx-real-ipとかにIPを追記していくこと…

Deis/routerでwhitelistでIP制限する方法

Security Considerations - Deis Workflow Documentationで公式にIP制限する方法が紹介されてるが、403が出る。 なんで403になっちゃうのかをここを調べてみた。 公式通りにやっても403 公式ページにもあっさりこうすればできると書いてあるが、確かに403に…

deis-routerなしでKubernetesのIngressでDeisを動かす

Clusterを作る時にデフォルトでついてくるLBを外す gloucd container clusters createをするときに、--disable-addons "HttpLoadBalancing"をつける。これをしないとGLBCがIngress Controllerとなってしまうため。コマンドラインからしか外せない。 cluster…

GKEだとデフォルトでIngress Controller(=GLBC)がいる

おまえ、そこにいたのか kubernetesでIngressでやる場合、Ingress Controllerが必要なんだけど、GKEの場合はマスターノード、つまりGCPのマネージドな領域でクラスター作成時に一緒に作られるようになってた。 で、これをGLBC(GCE Load-Balancer Controller)…

Deis Workflow v2.13.0でKubernetesのIngressがサポートされた件

Deisがverupした 本日、Deis Workflowがverupしたんですが、Changelogを見てるとIngressというものがなんか導入されてDeis/routerなくてもいけるみたいなことが。 そもそもWhat is Ingress? Kubernetesのたくさんあるリソースのタイプのうちの一つのIngress…

【AWSしかやったことない人向け】AWSとGCPのネットワークの違いを理解してみよう

背景 AWSでVPC作ったりしたことあるけど、GCPやったことないって人は色々違いに戸惑う アカウントの関係性、ネットワークの概念の違いなどを理解したのでまとめた AWSとGCPのアカウントの考え方の違い AWSの場合、ある人間に対して色々なAWSアカウントが付与…

Kubernetsに出てくる用語:PVCとは?

PVCとは? KubernetesのPersistentVolumeClaimsの略である。 https://kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims A persistentVolumeClaim volume is used to mount a PersistentVolume into a pod. PersistentVolumes are …

Deisのpostgresをoff-clusterにする(postgresql on GCEを利用)

やること mpon.hatenablog.com 前回はCloud SQLを使ったが、Cloud SQLはデフォルトネットワーク外にあるので、Cloud SQL Proxyをたてて通信するか、外部IPを許可するしかなかった。Deisの場合だと、proxyたてるパターンを使えず、外部IPを許可する方法にした…

Deisのpostgresをoff-clusterにする(Cloud SQLを利用)

やること postgresをoff-clusterする。 で、そのpostgresをどこに立てるかというとGCEにたてるかGCPのmangaedなCloud SQL(RDSみたいなやつ)があるので、どっちにするかということで、今回はCloud SQLを使ってみた。 Cloud SQL PostgreSQL beta Cloud SQLのポ…

deisでminioを置き換えるだけをやってみる

公式ページを参考に Configuring Object Storage 本当にここを変えただけ。bucketはGCSであらかじめ作っておく。権限とかもなんもしてない。 diff --git a/values.yml b/values.yml index c25cfb2..1d94aca 100644 --- a/values.yml +++ b/values.yml @@ -7,…

Deisをproduction運用するための設定の仕方調査

背景 Deisはhelmコマンドでインストールすれば簡単に入るけど、そのままだとデータ保存先がephemeralなものになってしまうのでダメ。他にもproduction運用のためにした方が設定があるのでまとめる。 調べ方 ほとんどdeisの公式ページに書いてあった installi…

Terraform0.9.0からremote configがdeprecatedになる

remote configがdeprecatedになる terraform0.9.0からterraformコマンド実行するとdeprecated warningがでてきます。 3行 remote configコマンドがなくなってinitコマンドが導入される backendという概念が導入されterraform.tfstateファイルを保存する設定…

terraform0.9.1からplanレベルでsecurity_groupのcidr_blocksのvalidateが入るようになった

0.9.1 changlog :tada: https://github.com/hashicorp/terraform/blob/master/CHANGELOG.md#091-march-17-2017 provider/aws: Validate CIDR Blocks in SG and SG rule resources (#12765) planで未然に防げる つい間違ってcidr_blocksの方にsecurity_group…

terraform consoleっていうREPLみたいなやつがあるの知らなかった

v0.8から導入された模様。俗に言うREPL。今のtfstateをもとにsyntaxを試すことができる。planやapplyなどを発行することはできないので安全。単にこういう時はterraformではどう書くんだろう??みたいなのを試したいときに便利。 例1: moduleのoutputを呼び…

H/A とは

H/Aとかよく出てくるけどうまくググれなかったので。 多分 High Availability(高可用性)の略 高可用性 - Wikipedia

自分で立てたdeisにアプリをdeployするまで

quickstartのConfigure DNSとregister an admin user and deploy your first app.をやっただけ。 ロードバランサーの確認 $ kubectl --namespace=deis describe svc deis-router | grep LoadBalancer Type: LoadBalancer LoadBalancer Ingress: 104.198.90.1…

Google Cloud Platformの環境をterraformで作る

そもそもGoogle Cloud Platformとは Googleが出してるAWS的なやつ。GCPと略す。だいたいの比較表。 dev.classmethod.jp なんでAWS使わないの? コンテナでぽんぽんアプリケーションをdeployしたいんだけどそれをAWSでやろうとすると、ECSというサービスを使…

teeコマンドの使いどころ

標準入力を標準出力とファイルに出力する というコマンドです。 なんか使いどころが分からないなーって思ってたけど、コマンドの結果をファイルに書き出してそれを別のコマンドに渡すってのをcircle ci上でやってて、あー、画面上でもこのファイルの中身見た…

terraformでif文的なものを使ったユースケース例

usecase EC2インスタンス、ELB、security_groupあたりがまとまったmoduleがあるんだけど、特定の役割のインスタンスにだけiam_roleにSNSFullAccessをつけたい。 設定内容 allow_sns_full_accessっていう変数宣言しとく。 variable "allow_sns_full_access" {…

AWSのロードバランサーあたりのセキュリティーグループ制限がさくっと緩和できなかった

http://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_service_limits.html#limits_elastic_load_balancer ロードバランサーあたりのセキュリティグループ 5 ご担当者様 平素よりお世話になっております。 AWSカスタマーサービスの藁品でございます。 折…

あれれ、terraform0.8から条件書けるようになってるぞ

🎉 https://www.hashicorp.com/blog/terraform-0-8.html#conditional

terraformでsecurity groupをmodule化するときに気をつけること

IPアドレスを定義した共通のsecurity groupを作りたい あるプロジェクトで外部のIPアドレスなどをまとめたものをsecurity groupとしてmodule化している。このアイディア自体はいいんだけど、環境ごとにこれを利用しようとした場合に失敗する。 例えば、こん…

awsのsecurity groupにはルールの上限がある

IPアドレスをたくさん追加しようとしたら:scream: 各拠点のIPアドレスを追加してほしいという依頼で、terraform planで問題なかったので、applyしたらエラーが出た。 * aws_security_group.elb_app: Error authorizing security group ingress rules: RulesP…

aws_security_groupのdescriptionはupdateできない

descriptionを気軽な名前で作ってしまって、あとでちょこっと変更したいなーと思って terraform planするとforce new resourceになってしまう。 ドキュメントにも書いてあった。 AWS: aws_security_group - Terraform by HashiCorp description - (Optional,…

今日覚えたやつメモ 2017/1/27

rubyとかrailsとかRSpecのこと class << self Rubyist Magazine - Ruby 初級者のための class << self の話 (または特異クラスとメタクラス) class << selfで定義したクラスメソッドがmoduleがincludeしたときに呼べない。 moduleなんかscalaのtraitとかswif…

ECSでの動的なネットワークポートマッピングとfluentd

aws

固定ポートだとインスタンスの数以上にコンテナが増やせない ECS上でfluentdを複数コンテナで動かして集約サーバーとして動かそうとしている。 最初だから試しにautoscaling groupで1つのインスタンスだけ立ち上げて、コンテナを2つ(desired count = 2)なサ…

fluent-plugin-s3でなかなかs3にアップロードされない

aws

github.com time_slice_formatの値をexampleに従って、%Y%m%d-%Hにしたんだけど、なかなかs3にアップされない。 buffered_pathには吐かれてるんだけどなかなかS3には上がってこない。 instanceのpoliciyかなーとかs3のbucketのpoliciyかなーとか色々迷ってて…

terraformのecs_registry.repository_urlにhttpsがついてるのを消す

バグだったようだ。mergeされたのでそのうち修正版がリリースされるはず。それまでは"${replace(aws_ecr_repository.test.repository_url, "https://", "")}"でしのぐ。 github.com 追記 terraform v0.8.5 で取り込まれた。

ECS(Amazon EC2 Container Service)がなんなのかやっと理解できてきた

aws

いざ自分で一から作ってみると・・・ 今まで人が作ったECS上でサービスの作成とか更新とか、タスクの更新とかやってきてなんとなく使えてたけど、 いざ自分で一から作ってみるとそれぞれの要素がどうなってるのか何も分かってないことに気づいた。 今まではE…

terraformで作るときに参考にするもの

社内のプロジェクトのを参考にできる恵まれた環境なのでまずはそれを見る。 他にもterraform公式リポジトリにあるexampleも参考になった。 terraform/examples at master · hashicorp/terraform · GitHub

インフラエンジニアになっていきたいと思った理由

今の思い ここでいうインフラエンジニアはハードディスクがとかケーブルがとかガチなやつじゃなくて、各種スタックを組み合わせて構築するぐらいのやつ。 プログラミング歴=ほぼ社会人歴で、iOS開発がメインで一番長かった。そのあとScalaでサーバーサイド。…

IAMのロールとかポリシーとか分からない人

aws

私です。 公式のこれが分かりやすい docs.aws.amazon.com

terraformというかHCLでif文使いたい

基本的にはサポートされてない。 けど、こちらの方のやり方を参考にして、こんな風にすればできるっちゃできる。 If you set count to 1 on a resource, you get one copy of that resource and if you set count to 0, that resource is not created at all…

sts:AssumeRoleとは

aws

AWS STSが分からなかった AWS Security Token Serviceのこと。 aws stsでググると このドキュメントが出てきてざーっと読んでなんかCLIしたいときに使うのか?みたいなぐらいでしっくりこなかった。 docs.aws.amazon.com EC2サービスを信頼するという概念 こ…

残業をさせてるのは誰

ふるさと納税のワンストップのやつ、自治体によって印字してくれてたり返信用封筒入れてくれてたりしてみんなこうなればいいのにと思ったんだけど、いいサービスやおもてなしを期待することにより、自分が巡り巡って残業や日本の生産性の低下を生み出してる…

terraformでmoduleのsourceにinterpolationは使えない

module "hoge" { source = "${path.module}/hoge" } とやっても、 * hoge: module source cannot contain interpolations で、はじかれる

remote-execでEC2インスタンスの起動時の処理書いたけどuser-dataがあった

前にこれを書いたんだけど、こんなことする必要なかった。 mpon.hatenablog.com こっちでよかったじゃないか。AWSのこと何も分かってない証拠ですね。 docs.aws.amazon.com

terraformのディレクトリ構造とかは何を参考にすればいいか

github.com quipper.hatenablog.com Good

EC2をremote-execでprovisioningする方法

elastic ipで接続されない こんな風に素直に(自分的には)書くとElastic IPよりも先にEC2を先に作ろうとしちゃう。 で、private ipでssh接続しようとするから、そりゃあいつまでたっても接続できないし、 elastic ipも作られない。 resource "aws_eip" "dev…

terraformのmoduleで定義したresouseにアクセスするにはoutputしないとダメ

moduleの誤解 何もわかってなかった。 module使うと変数とかをscope化できるからいいなーって思ってたけど、resourceもscope化されるってことだった。 まぁ逆に言えば、module内にresource名は被らないように気をつける必要がないとも言えるけど。 terraform…