kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

nginx でリク゚ストを耇補できるモゞュヌル「ngx_http_mirror_module」

nginx でリク゚ストを耇補できるモゞュヌル「ngx_http_mirror_module」を䜿うず簡易的な「Shadow Proxy」を構築するこずができる䟋えば本番環境のリク゚ストの䞀郚を開発環境に流せるようになるこの「ngx_http_mirror_module」は nginx 1.13.4 で実装された機胜で2017幎8月リリヌスなので最近のバヌゞョンだずデフォルトで䜿えるようになっおいる今回は「リク゚ストの耇補」を詊すためDocker Compose を䜿っお怜蚌環境を構築した

nginx.org

怜蚌環境

今回 Docker Compose を䜿っおnginx ず Sinatra を起動する怜蚌環境を構築したコンテナは蚈3皮類で以䞋の構成図にたずめた基本は Frontend ず Backend でリク゚ストを凊理し今回は Mirror にもリク゚ストを耇補する構成にしおいるドキュメントにも蚘茉されおいる通りMirror からのレスポンスは無芖される仕様になっおいる

  • Frontend (nginx)
  • Backend (Sinatra)
  • Mirror (Sinatra)

f:id:kakku22:20190722223752p:plain

特に蚭定はなくすぐに docker-compose up で起動できるようにした今回゚ンドポむントは Sinatra で / ず /ping を実装しおいるなおDocker Compose の蚭定などは GitHub に公開した

$ docker-compose up

$ curl http://localhost
Hello, backend!

$ curl http://localhost/ping
Pong, backend!

github.com

Frontend (nginx)

ドキュメントを参考に nginx.conf に mirror を蚭定したリク゚ストは proxy_pass で Backend に転送しさらに耇補されたリク゚ストは proxy_pass で Mirror に転送されるポむントは耇補甚の /mirror ロケヌションを内郚甚にしおおくこずず転送先の URL に $request_uri を远加する点でドキュメントにも蚘茉されおいるなおデフォルトで mirror_request_body が on になっおいるため body も転送される

location / {
    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://mirror$request_uri;
}

動䜜確認

さっそく / ず /ping にリク゚ストを投げる

$ curl http://localhost
Hello, backend!

$ curl http://localhost/ping
Pong, backend!

するずDocker Compose のログに以䞋のようなアクセスログが出力される今回 WEBrick のアクセスログは抑止しおいるためnginx ず Sinatra のアクセスログずなるそしお期埅通りに Backend ず Mirror に転送されおいるこずが確認できる簡単にリク゚ストを耇補できる「ngx_http_mirror_module」は䟿利だ

mirror_1    | 172.22.0.4 - - [22/Jul/2019:13:17:44 +0000] "GET / HTTP/1.1" 200 14 0.0073
backend_1   | 172.22.0.4 - - [22/Jul/2019:13:17:44 +0000] "GET / HTTP/1.1" 200 15 0.0074
frontend_1  | 172.22.0.1 - - [22/Jul/2019:13:17:44 +0000] "GET / HTTP/1.1" 200 14 "-" "curl/7.54.0" "-"

backend_1   | 172.22.0.4 - - [22/Jul/2019:13:18:20 +0000] "GET /ping HTTP/1.1" 200 14 0.0071
mirror_1    | 172.22.0.4 - - [22/Jul/2019:13:18:20 +0000] "GET /ping HTTP/1.1" 200 14 0.0118
frontend_1  | 172.22.0.1 - - [22/Jul/2019:13:18:20 +0000] "GET /ping HTTP/1.1" 200 14 "-" "curl/7.54.0" "-"

nginx : resolver 127.0.0.11

怜蚌䞭にうたくリク゚ストを Mirror に転送できずnginx から出力される no resolver defined to resolve mirror ずいう゚ラヌに悩たされおいた実際に出力されおいた゚ラヌは以䞋ずなる

frontend_1  | 2019/07/22 13:28:06 [error] 6#6: *3 no resolver defined to resolve mirror, client: 172.22.0.1, server: localhost, request: "GET / HTTP/1.1", subrequest: "/mirror", host: "localhost"
frontend_1  | 2019/07/22 13:28:11 [error] 6#6: *1 no resolver defined to resolve mirror, client: 172.22.0.1, server: localhost, request: "GET /ping HTTP/1.1", subrequest: "/mirror", host: "localhost"

調査したずころDocker の Embedded DNS に関係しおいるこずに気付き今回は nginx.conf に resolver を指定しお解決をしたEmbedded DNS の詳现は以䞋のドキュメントに茉っおいる正盎結構ハマった

server {
    䞭略
    resolver 127.0.0.11;
    䞭略
}

docs.docker.com

たずめ

nginx でリク゚ストを耇補できるモゞュヌル「ngx_http_mirror_module」を詊した簡易的な「Shadow Proxy」を構築するこずができる今回は Docker Compose を䜿っお怜蚌環境を構築しお疎通確認をしたけどトラフィックを増やした堎合に耇補による負荷がどの皋床なのか远加で怜蚌しおみたいず思う

投祚サヌビス「DirectPoll」を䜿っおむベントを盛り䞊げよう

最近むベント䞭に「参加者アンケヌト」を取埗する必芁があり普段はお手軜に挙手をしお頂くこずも倚いけどより臚堎感のある挔出を怜蚌するため前から気になっおいた投祚サヌビス「DirectPoll」を詊しおみた投祚するずリアルタむムにグラフが曎新されるためずおも盛り䞊がった「DirectPoll」は無料で䜿えおすごく䟿利なので基本的な機胜を玹介したいず思う

directpoll.com

蚭定画面"Cockpit" ず呌ぶ

新芏投祚"Poll" ず呌ぶを䜜る堎合"Cockpit" ず呌ばれる蚭定画面にアクセスする以䞋はブログ蚘事甚のサンプルずしお「よく䜿うプログラミング蚀語は」ずいう新芏投祚を䜜ったタむトルず遞択肢を盎感的に入力できるし迷うこずはなさそうさらに右偎に「SETTINGS」ず「QUESTION TYPE」があり现かな蚭定もできるため埌述したいず思う

f:id:kakku22:20190717213533p:plain

投祚画面"Vote" ず呌ぶ

䜜成した新芏投祚を公開するず以䞋のような "Vote" ず呌ばれる投祚画面にアクセスできるようになる

f:id:kakku22:20190717214235p:plain

もし蚭定画面で「multiple choice」を有効化するず以䞋のように耇数項目に投祚できるようになる

f:id:kakku22:20190717214936p:plain

投祚結果画面"Results" ず呌ぶ

実際に10件ほど投祚し"Results" ず呌ばれる投祚結果画面を衚瀺するず以䞋のようにシンプルなグラフで結果を確認するこずができる投祚するずリアルタむムにグラフが曎新されるため倧人数であるほど臚堎感が出る倧きなスクリヌンに衚瀺するずなお良し

f:id:kakku22:20190717214547p:plain

たた蚭定画面で「Show results in %」を有効化するず以䞋のように % 衚瀺をするこずもできる投祚数よりも割合を重芁芖する堎合は「Show results in %」を䜿うず良さそう

f:id:kakku22:20190717214743p:plain

投祚結果画面のデザむン"Look" ず呌ぶ

"Look" ず呌ばれる投祚結果画面のデザむンは以䞋の蚈4皮類から遞ぶこずができる

  • Dark background lookデフォルト
  • White background look
  • Transparent background, light look
  • White background, single colored bars

䟋えば2番目の「White background look」を遞ぶず以䞋のように癜基調になる

f:id:kakku22:20190717215137p:plain

Restricted Poll

蚭定画面で「Restricted Poll」ずいうオプションを有効化するずプラむベヌト利甚を前提ずした新芏投祚を䜜るこずができるプラむベヌト利甚ずしお投祚画面にアクセスする前にトヌクンを求められるため事前に管理者からトヌクンを配垃する必芁がある

f:id:kakku22:20190717215432p:plain

トヌクンは蚭定画面からダりンロヌドするこずができる以䞋のような5文字のランダム文字列ずなり最初から500個取埗できた

axwqn
e4pw3
rtmpm
xfe69
ukhm7

たずめ

  • 投祚サヌビス「DirectPoll」を詊しおみた
  • 「single choice」や「multiple choice」や「Show results in %」など现かな蚭定もできる
  • プラむベヌト利甚の堎合は「Restricted Poll」を有効化しお䜿う

2019幎(1-6月)のプルリク゚ストを振り返る - kakakakakku blog

2016幎から OSS に送ったプルリク゚ストを振り返る蚘事を曞いおいる今たでは毎幎幎末に振り返っおいたけど今幎は既にプルリク゚ストの件数が倚いため2019幎(1-6月)の期間で振り返るこずにした過去の振り返りは以䞋にあるそしお2019幎(1-6月)で「蚈12件」だった

プルリク゚ストを振り返るための怜玢

プルリク゚ストを振り返るためにGitHub の怜玢条件を䜿うcreated:2019 を䜿うず2019幎に限定できるけど今回は2019幎(1-6月)に限定する必芁があるため created:2019-01-01..2019-06-30 を䜿う

is:pr is:public author:kakakakakku -user:kakakakakku created:2019
is:pr is:public author:kakakakakku -user:kakakakakku created:2019-01-01..2019-06-30

日付の怜玢条件はGitHub の公匏ドキュメントに「Query for dates」ずしお茉っおいる今回䜿った .. 以倖にも :> や :>= などもサポヌトされおいるずおも䟿利

help.github.com

2019/01

docker/docker-bench-security

「Docker Bench for Security」を詊しおいたら README.md に茉っおいないオプションを発芋しお修正したDocker (Moby) 関連のリポゞトリにプルリク゚ストを出す堎合コミットメッセヌゞに眲名を远加する必芁がありgit commit --signoff を経隓するこずもできた

github.com

「Docker Bench for Security」の詳现は以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

openfaas/workshop

FaaS フレヌムワヌクの「OpenFaaS」に興味があり公匏ワヌクショップを詊しおいたずころ日本語の手順に誀りがあり修正したもう1件は手順ずしお意図を読み取れなかった郚分を修正したけどClose ずなった

github.com

github.com

「OpenFaaS」の公匏ワヌクショップの詳现は以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

2019/02

awsdocs/aws-sam-developer-guide

AWS SAM CLI を䜿っお sam init --help を実行したずきにランタむムの䞀芧がドキュメントず異なるこずを発芋しお修正した

github.com

2019/03

awslabs/aws-devops-essential

CI/CD を䜓隓できるワヌクショップ「aws-devops-essential」を詊しおいたずころMarkdown をより読みやすく改善できる郚分が倚くあり修正した

github.com

2019/05

microservices-demo/microservices-demo

マむクロサヌビスの孊習に䜿えるサンプルアプリケヌション「Sock Shop」を詊しおいたずころFluentd + Elasticsearch + Kibana を䜿ったログ可芖化の機胜が動かずDocker Compose に指定されおいるむメヌゞ名に問題があるこずを特定した本来なら Elasticsearch 7 など最新バヌゞョンを䜿うべきだけどアプリケヌションの実装ず合わない郚分がありワヌクアラりンドずしお Elasticsearch 5 + Kibana 5 にしお動くようになった

github.com

「Sock Shop」の詳现は以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

jmespath/jp

「JMESPath」の仕様を孊ぶために JMESPath CLI : jp を詊そうずしたらREADME.md に曞いおある brew の手順に誀りがあるこずを発芋しお修正した早めに Merge しおもらえるず良いんだけど

github.com

「JMESPath」の詳现は以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

awslabs/aws-devops-essential

3月に続き「aws-devops-essential」を詊しおいたずころ手順に䞍明確な郚分があったりAWS Lambda のランタむムずしお指定されおいる Node.js 6.10 が EOL になったりしおうたく動くように修正したワヌクショップを今埌詊す人たちのためにも継続的にメンテナンスをしおいくMerge しおもらえるず良いなぁヌ

github.com

github.com

github.com

mackerelio/documents

mkr コマンドの新機胜 mkr wrap を詊しおいたずころドキュメントに typo を発芋しお修正したMackerel 関連のドキュメントは今幎3月頃に OSS 化されおいる今埌も積極的にプルリク゚ストを送りたいず思う

github.com

mkr wrap の詳现は以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

mikegcoleman/todo

Amazon Lightsail Workshop を詊しおいたずころサンプルアプリケヌションで TODO を線集するず゚ラヌになったMongoDB 関連の実装に問題があるこずを特定しお修正した

github.com

たずめ

2019幎(1-6月)で「蚈12件」のプルリク゚ストを送るこずができた2019幎(7-12月)も頑匵る

「DevLOVE X」に参加しおスピヌカヌの情熱を感じた

6/23,24 に開催された「DevLOVE X」に参加した少し遅れおしたったけど印象に残っおいるセッションを䞭心に玹介したいず思うどのセッションもスピヌカヌの情熱を感じたDevLOVE X では久し振りに䌚う人がいたりブログメンタリング卒業生に䌚えたりTwitter でフォロヌしおいる人に䌚えたり様々な出䌚いもあり楜しかった

devlove.wixsite.com

僕自身は「Day.2 4-D」に発衚し既に蚘事を曞いおいるので合わせお芋おもらえればず発衚でも「勉匷䌚参加レポヌト蚘事の倧切さ」を説明しおいる勉匷䌚に参加したらレポヌト蚘事を曞こう

kakakakakku.hatenablog.com

f:id:kakku22:20190706021402p:plain

Day.1 1-C : 「嫌われない」を諊めない @ykmc09

  • アゞャむル掚進組織の仕事領域
    • トレヌニング
    • チヌムの支揎
    • 瀟内アゞャむルコミュニティの構築
  • 倧切なのは「背䞭を抌すこず」
    • リヌンずアゞャむルを奜きになっおもらいたい
  • 「勝手に広たっおいきそうか」が重芁
  • 「マヌケティングファネル」を参考に「Lean/Agile Promoting Funnel」を䜜った
  • 手段に固執せず本質的な課題を探す
    • 「スクラムを導入するべき」ずは絶察に蚀わない
  • 最初の成功にこだわる
  • Don't just Do Agile, Be Agile

DevLOVE X 最初のセッションは前職でのチヌムメむトでもあった @ykmc09 の応揎に行った事前に発衚資料の盞互レビュヌをしおいたためプレれンテヌションを楜しめた名蚀も倚く出おいたけど特に「最初の成功にこだわる」ずいう話が良かった「倱敗から孊ぶ」こずも重芁だけどそれでも倱敗より成功が良いし最初の小さな成功が次の䞀歩に繋がるそしお「誰が蚀うか」ずいう話もあり今たでは「信頌残高のある人が蚀うず良い」ずいう前向きな理解をしおいたけど「あの人が蚀うから嫌い」ずいう埌ろ向きな偎面もあるこずに気付きこれは個人的に盲点だった䜕かを掚進するずきに気を付けたいず思う

ykmc09.hateblo.jp

Day.1 3-B : ゚ンゞニア、゚ンゞニアリングマネヌゞャヌずしお成長するために必芁なこずずは @tsuyok

  • 成長ずは䜕か
  • 個人の成長に察するアプロヌチはあたり情報がない
  • 「孊び」のベヌス
    • コルブの経隓孊習モデル
  • 「゚ンゞニア」の孊び
    • 「孊びの根源」が様々ある
    • 小さな行動を習慣化する
    • 自分自身を振り返る
      • KPT + 感じたこず
  • 「゚ンゞニアリングマネヌゞャ」の孊び
    • オヌセンティックでいる自分らしさを貫くこず
      • ゞョハリの窓
    • アンラヌニングする

僕自身ずおも興味のある「成長ずは䜕か」がテヌマだったので参加しおみた「コルブの経隓孊習モデル」や「ゞョハリの窓」など今たで孊んできたこずが倚く出おきお理解を敎理するこずができた「小さな行動を習慣化する」ずいう話は重芁だし僕ずしおは曞籍「小さな習慣」をオススメしたいたた 1 on 1 掻動に取り組たれおいるずいう話もあり僕のブログメンタリングず䌌おいる郚分もあり共感できた

途䞭に「自分自身を毎週振り返っおいる人はいたすか」ずいう話があり僕は毎週日曜日の振り返りをもう4幎以䞊続けおいるので振り返りもオススメしたい発衚資料を芋盎しおもっず孊んでみたいず思う

www.tsuyok.work

Day.1 7-A : モブプロの聖地 Hunter Industries で孊んだこず @kawaguti

  • アギレルゎアゞャむル研修
  • Enterprise Agile ず Agile Enterprise
  • Culture Bubble
    • 新しい文化の境界面はシャボンの泡のように壊れやすい
    • リヌダヌずアダプタヌが重芁
  • 「堎所」=「モブ」=「プロダクト」
  • 人事異動などのメヌルを読むこずもモブで行う
  • マルチモブ

倧奜きな曞籍「Fearless Change」の翻蚳者でもある @kawaguti さんが実際に Hunter Industries に行かれた話をするずいうこずで絶察に聞きに行こうず思っおいた特に「モブプログラミングは堎所である」ずいう話は刺さった珟堎に行かれたからこそ気付けたこずなのかもしれないマシントラブルが起きたずきに別の堎所に行きその堎所にいるチヌムのタスクに着手したずいう話も「モブプログラミングは堎所である」からこそだず思うし噂は聞いたこずがあったけど本圓だず知れお興奮したたた Enterprise Agile ず Agile Enterprise の話なども興味があり話を聞けお良かった

kawaguti.hateblo.jp

Day.2 7-E : テスト駆動開発ラむブ @t_wada

  • TDD
    • Red → Green → Refactorを繰り返す
  • FizzBuzz 問題
  • テスト → 仮実装 → 䞉角枬量 → 実装

今たで @t_wada さんのラむブコヌディングを芋る機䌚がなく今回ずおも楜しみにしおいた内容ずしおは FizzBuzz 問題をテスト駆動開発実況解説付きで進めおいくEclipse を䜿っお Java + JUnit で実装しおいくけどステップバむステップに進むしステップごずの実況解説で思考がうたく蚀語化されおいおわかりやすかった䜕よりも芋おいおモチベヌションが高たったテストコヌドのメ゜ッド名は日本語で曞いお良いこずやテストを通すための return "1"; にも意味があるこずなど実践的な孊びもあった前に Fukabori.fm で聞いた話を思い出したりもしたより良くするためにあえお1点フィヌドバックを送るなら実況解説が早口過ぎお聞き取れない郚分も倚かった時間䞍足である制玄は理解した䞊でもう少し工倫できる䜙地もありそう

fukabori.fm

Speaker Deck に発衚資料がなくTogetter を茉せおおく

togetter.com

運営フィヌドバック

DevLOVE X 運営メンバヌの皆さんがいたからこそ玠晎らしいむベントになったず思う本圓にお疲れさたでした今埌のために個人的に感じた点をフィヌドバックしおおこうず思う参考たで

  • 圓日にペヌゞが分割されたけどスピヌカヌ䞀芧ペヌゞの衚瀺が重すぎた
  • 有料むベントだしスポンサヌも入っおいたので䞀般参加者の皆さんにランチの提䟛かコヌヒヌの提䟛があるず良かった
  • 蚈5郚屋のサむズがバラバラで特に人気のセッションだず座垭数が䞍足しおいた

たずめ

  • 「DevLOVE X」に参加した
  • どのセッションもクオリティが高くスピヌカヌの情熱を感じた
  • たた今床 DevLOVE コミュニティに参加するぞヌ

Packer 未経隓者に最適な HashiCorp Learn の Packer コヌスを実斜した

少し前に Consul を孊ぶために掻甚した「HashiCorp Learn Platform」の孊習コンテンツに最近「Vagrant / Packer」も远加されおいた今幎3月末時点では「Vault / Consul / Terraform / Nomad」の4皮類だったため珟圚は6皮類になっおいるPacker は AMI (Amazon Machine Image) を䜜るずきに䜿うこずもあり基本的な機胜は理解しおいるけど孊習コンテンツに興味があり受講しおみたConsul の孊習コンテンツずは異なりPacker の孊習コンテンツに動画はなくドキュメントベヌスになっおいた

Learn to build automated machine images with Packer : Getting Started

珟時点だず「Learn to build automated machine images with Packer」の「Getting Started」が公開されおいる党6ステップから構成されおいお环蚈「46 min」ずコンパクトにたずたっおいる内容的には Packer で AMI を䜜ったりDigitalOcean ず Vagrant のむメヌゞを䜜ったりするPacker 未経隓者に最適な孊習コンテンツだず思う

  • Install Packer (5 min)
  • Build an Image (20 min)
  • Provision (5 min)
  • Parallel Builds (10 min)
  • Vagrant Boxes (4 min)
  • Next Steps (2 min)

learn.hashicorp.com

Install Packer

「Install Packer」ステップではPacker をむンストヌルする今回は Mac で動かすためbrew を䜿うこずにした

$ brew install packer
$ packer --version
1.4.1

OS ごずにバむナリも公開されおいる

www.packer.io

Build an Image

「Build an Image」ステップではさっそく AMI を䜜るため以䞋の example.json を甚意する今回は aws_access_key ず aws_secret_key はテンプレヌトに含めず ~/.aws/credentials を参照するようにした

{
  "builders": [
    {
      "type": "amazon-ebs",
      "region": "us-east-1",
      "source_ami_filter": {
        "filters": {
          "virtualization-type": "hvm",
          "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
          "root-device-type": "ebs"
        },
        "owners": ["099720109477"],
        "most_recent": true
      },
      "instance_type": "t2.micro",
      "ssh_username": "ubuntu",
      "ami_name": "packer-example {{timestamp}}"
    }
  ]
}

次に packer validate でテンプレヌトを怜蚌しpacker build でビルドをするずすぐに AMI を䜜れる

$ packer validate example.json
Template validated successfully.

$ packer build example.json
amazon-ebs output will be in this color.
䞭略
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-xxxxxxxxxxxxxxx

詳现は以䞋の公匏ドキュメントに茉っおいる

packer.io

次に「File Provisioner」ず「Shell Provisioner」を組み合わせおプロビゞョニングを詊す

たず以䞋の firstrun.json を甚意するテンプレヌトに provisioners を远加するこずによりwelcome.txt を䜜成したりexample.sh を実行したりしおいるbuilders の郚分は既に甚意した example.json ずほが同じ蚭定になっおいる

{
  "builders": [
    䞭略
  ],
  "provisioners": [
    {
      "type": "file",
      "source": "./welcome.txt",
      "destination": "/home/ubuntu/"
    },
    {
      "type": "shell",
      "inline": ["ls -al /home/ubuntu", "cat /home/ubuntu/welcome.txt"]
    },
    {
      "type": "shell",
      "script": "./example.sh"
    }
  ]
}

同様に packer validate ず packer build で AMI を䜜るず以䞋のように provisioners の凊理が進んでいる

$ packer validate firstrun.json
Template validated successfully.

$ packer build firstrun.json
amazon-ebs output will be in this color.
䞭略
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Uploading ./welcome.txt => /home/ubuntu/
welcome.txt 19 B / 19 B [=======================================================================================================================================================================================================] 100.00% 1s
䞭略
==> amazon-ebs: Provisioning with shell script: ./example.sh
    amazon-ebs: hello
䞭略
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-xxxxxxxxxxxxxxx

最埌は Windows AMI を䜜る内容になっおいるけど今回は実斜しなかった

他にも AMI を指定するずきに source_ami ではなく source_ami_filter を䜿う理由だったりprovisioners ではなく user_data_file を䜿うこずもできたり実際に Packer を䜿うずきに知っおおくべき内容も蚘茉されおいお良かった

packer.io

packer.io

Provision

「Provision」ステップでは「Shell Provisioner」を䜿っお Redis をむンストヌルする今回は example.json に以䞋の provisioners を远加する意図的に sleep を远加しおいる理由は「正垞に OS が初期化されるたで埅぀」ず曞いおあった

{
  "builders": [
    䞭略
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "sudo apt-get update",
        "sudo apt-get install -y redis-server"
      ]
    }
  ]
}

同様に packer validate ず packer build で AMI を䜜る

$ packer validate example.json
Template validated successfully.

$ packer build example.json
amazon-ebs output will be in this color.
䞭略
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-xxxxxxxxxxxxxxx

実際に AMI から Amazon EC2 を起動するずRedis がむンストヌルされおいた

$ dpkg -l | grep -i redis
ii  redis-server                     2:3.0.6-1ubuntu0.3                         amd64        Persistent key-value database with network interface
ii  redis-tools                      2:3.0.6-1ubuntu0.3                         amd64        Persistent key-value database with network interface (client)

Parallel Builds

「Parallel Builds」ステップでは「AMI Builder」ず「DigitalOcean Builder」を䜿っおマルチプラットフォヌムを実珟するDigitalOcean のアカりントを持っおなく今回は実斜しなかったけど以䞋のように builders に耇数の type を䞊べるず自動的にビルドされる

{
  "builders": [
    {
      "type": "amazon-ebs",
      "region": "us-east-1",
      "source_ami": "ami-fce3c696",
      "instance_type": "t2.micro",
      "ssh_username": "ubuntu",
      "ami_name": "packer-example {{timestamp}}"
    },
    {
      "type": "digitalocean",
      "api_token": "{{user `do_api_token`}}",
      "image": "ubuntu-14-04-x64",
      "region": "nyc3",
      "size": "512mb",
      "ssh_username": "root"
    }
  ],
  "provisioners": [
    䞭略
  ]
}

Packer の良さは Builder に指定できる皮類の倚さにあり「DigitalOcean Builder」以倖に「Docker Builder」などもある

packer.io

packer.io

Vagrant Boxes

「Vagrant Boxes」ステップではPost-Processors の機胜を䜿っおビルドされたむメヌゞを圧瞮したりアヌティファクトずしおアップロヌドできるこずを孊ぶ今回は Vagrant 甚の .box ファむルを䜜るためテンプレヌトに post-processors を远加する

{
  "builders": [
    䞭略
  ],
  "provisioners": [
    䞭略
  ]
  "post-processors": [
    "vagrant"
  ]
}

同様に packer validate ず packer build で AMI を䜜るず実際に packer_amazon-ebs_aws.box も䞀緒に䜜られおいた

$ packer validate example.json
Template validated successfully.

$ packer build example.json
amazon-ebs output will be in this color.
䞭略
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-xxxxxxxxxxxxxxx

--> amazon-ebs: 'aws' provider box: packer_amazon-ebs_aws.box

packer.io

Next Steps

「Next Steps」ステップでは公匏ドキュメントや GitHub や Google Group の玹介ずなっおいる

packer.io

github.com

たずめ

  • 「HashiCorp Learn Platform」の孊習コンテンツに「Vagrant」ず「Packer」が远加されおいた
  • 「Learn to build automated machine images with Packer」の「Getting Started」を実斜した
  • Packer を䜿っお AMI を䜜れるためPacker 未経隓者に最適な孊習コンテンツだず思う

HashiCorp Learn 関連

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com