<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GCP on ゲンゾウ用ポストイット</title><link>https://genzouw.com/entry/category/gcp/</link><description>Recent content in GCP on ゲンゾウ用ポストイット</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Mon, 27 Mar 2023 14:21:04 +0900</lastBuildDate><atom:link href="https://genzouw.com/entry/category/gcp/index.xml" rel="self" type="application/rss+xml"/><item><title>Google Container Registry (GCR) にDockerイメージをプッシュしようとしてエラーが出たときの対応</title><link>https://genzouw.com/entry/2022/02/05/080015/2918/</link><pubDate>Sat, 05 Feb 2022 08:00:15 +0900</pubDate><guid>https://genzouw.com/entry/2022/02/05/080015/2918/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;独自にビルドした Docker イメージは、Docker Repository に配置して初めて自分以外も利用できるようになります。&#10;パブリックな Docker Repository としては &lt;strong&gt;Docker Hub&lt;/strong&gt; が有名です。&#10;プライベートな Docker Repository として、僕は &lt;strong&gt;Google Container Registry (GCR)&lt;/strong&gt; を利用することが多いです。&lt;/p&gt;&#10;&lt;p&gt;先日、他の方から 「Google Container Registry にビルドイメージをプッシュしようとしてエラーが出てハマっている」という相談がありましたので、こちらの解消方法について解説しようと思いました。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@localhost ~&lt;span class="o"&gt;]&lt;/span&gt;$ cat /etc/os-release &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;7&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CentOS Linux&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;7 (Core)&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;centos&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ID_LIKE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rhel fedora&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;VERSION_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PRETTY_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CentOS Linux 7 (Core)&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ANSI_COLOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0;31&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="作業の流れ"&gt;作業の流れ&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;gcloud&lt;/code&gt; + &lt;code&gt;docker&lt;/code&gt; コマンドのインストール&lt;/li&gt;&#10;&lt;li&gt;Docker イメージを作成&lt;/li&gt;&#10;&lt;li&gt;GCR に対する認証を設定&lt;/li&gt;&#10;&lt;li&gt;Docker イメージをプッシュ&lt;/li&gt;&#10;&lt;li&gt;Docker イメージをプル ＋ 実行&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="1-gcloud--docker-コマンドのインストール"&gt;1. &lt;code&gt;gcloud&lt;/code&gt; + &lt;code&gt;docker&lt;/code&gt; コマンドのインストール&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; は &amp;ldquo;Google Container Registry (GCR)&amp;rdquo; に対して「認証」を行うために利用します。&lt;/p&gt;</description></item><item><title>GCPのVPC(Virtual Private Cloud)に入門する</title><link>https://genzouw.com/entry/2021/07/08/095627/2711/</link><pubDate>Thu, 08 Jul 2021 09:56:27 +0900</pubDate><guid>https://genzouw.com/entry/2021/07/08/095627/2711/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;今まで、GCP の VPC についてあまり意識せずに通信ができていました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Terraform&lt;/strong&gt; 化を進めていくタイミングで気がついたのですが、&#10;GCP プロジェクト作成時に &lt;strong&gt;自動的に作成された 「VPC ネットワーク」&lt;/strong&gt; をそのまま使っていることがわかりました。&lt;/p&gt;&#10;&lt;p&gt;GCP ではこの &lt;strong&gt;自動的に作成された VCP ネットワーク&lt;/strong&gt; を本番運用で利用することを推奨していないようでしたので、&#10;理解を含めてどうするべきかを考えたいと思いました。&lt;/p&gt;&#10;&lt;h2 id="vpc-ネットワークと構成要素を理解する"&gt;「VPC ネットワーク」と構成要素を理解する&lt;/h2&gt;&#10;&lt;p&gt;かんたんではありますが、&lt;strong&gt;VCP ネットワーク&lt;/strong&gt; の構成要素を図示しました。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;span class="lnt"&gt;22&#10;&lt;/span&gt;&lt;span class="lnt"&gt;23&#10;&lt;/span&gt;&lt;span class="lnt"&gt;24&#10;&lt;/span&gt;&lt;span class="lnt"&gt;25&#10;&lt;/span&gt;&lt;span class="lnt"&gt;26&#10;&lt;/span&gt;&lt;span class="lnt"&gt;27&#10;&lt;/span&gt;&lt;span class="lnt"&gt;28&#10;&lt;/span&gt;&lt;span class="lnt"&gt;29&#10;&lt;/span&gt;&lt;span class="lnt"&gt;30&#10;&lt;/span&gt;&lt;span class="lnt"&gt;31&#10;&lt;/span&gt;&lt;span class="lnt"&gt;32&#10;&lt;/span&gt;&lt;span class="lnt"&gt;33&#10;&lt;/span&gt;&lt;span class="lnt"&gt;34&#10;&lt;/span&gt;&lt;span class="lnt"&gt;35&#10;&lt;/span&gt;&lt;span class="lnt"&gt;36&#10;&lt;/span&gt;&lt;span class="lnt"&gt;37&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+- vpc network ---------------------+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-----------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;Routing &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-----------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-----------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;Firewall rule &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-----------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +- region us-west --------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +- subnet1 -+ +- subnet2 -+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;GCE &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;内部LB &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;内部 &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;静的IP &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;Subnet &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;routing&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-----------+ +-----------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-------------------------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +- region us-eas--t ------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +- subnet3 -+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; +-----------+ &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; +-------------------------------+ &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-----------------------------------+&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;GCP のドキュメントには、 &lt;strong&gt;「ネットワーク = 「VPC ネットワーク」」&lt;/strong&gt; と書かれているフシがあります。&#10;&lt;strong&gt;VPC&lt;/strong&gt; というプレフィックスが記載されていなかったとしても、両者は同じものを指しています。&lt;/p&gt;</description></item><item><title>Docker Container Registryサーバーを自前で作成してみる</title><link>https://genzouw.com/entry/2021/06/14/072906/2656/</link><pubDate>Mon, 14 Jun 2021 07:29:06 +0900</pubDate><guid>https://genzouw.com/entry/2021/06/14/072906/2656/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;&amp;ldquo;Docker Hub&amp;rdquo;&lt;/strong&gt; や &lt;strong&gt;GCR&lt;/strong&gt; 、 &lt;strong&gt;ECR&lt;/strong&gt; といったサービスがあるなか、&#10;わざわざ自前で &amp;ldquo;Docker Registry&amp;rdquo; を構築して Docker イメージを管理する必要性は少ないとは思いますが、仕組みを理解する目的で、自作の Docker Registry 環境を構築してみたいと思います。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.1.8&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin20.3.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="作業の流れ作業ログ"&gt;作業の流れ（作業ログ）&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Docker Registry サーバを立ち上げ&lt;/li&gt;&#10;&lt;li&gt;Docker Registry サーバに外部から接続するための設定を追加&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;p&gt;前提として、今回は最もかんたんな方法で Docker Registry サーバを立ち上げたいと思います。&lt;/p&gt;&#10;&lt;p&gt;その方法とは、 「すでに公開されている Docker Registry サーバ用の Docker イメージを利用する」というものです。&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Docker イメージを管理するためのサーバを Docker で立ち上げる、というのが面白いですね。&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;そんなわけで、Docker を事前にインストールしておきましょう。&#10;Windows や Mac で動作させる最もかんたんな方法は以下のツールを導入することです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.docker.com/products/docker-desktop"&gt;Docker Desktop for Mac and Windows | Docker&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="1-docker-registry-サーバを立ち上げ"&gt;1. Docker Registry サーバを立ち上げ&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;registry:2.7.1&lt;/strong&gt; というイメージを利用したいと思います。&lt;/p&gt;</description></item><item><title>GKEのNEG(Network Endpoint Group)とIG(Instance Group)との違い、メリットを整理しました</title><link>https://genzouw.com/entry/2021/05/20/160245/2613/</link><pubDate>Thu, 20 May 2021 16:02:45 +0900</pubDate><guid>https://genzouw.com/entry/2021/05/20/160245/2613/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;GCP の Cloud Armor について調べていたところ、ドキュメントに出てきた &lt;strong&gt;NEG&lt;/strong&gt; という単語。&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;「VM インスタンスや NEG に対して WAF 機能を提供する」&lt;/em&gt;、とありましたが、&lt;strong&gt;NEG&lt;/strong&gt; とはなんだろう？となってしまったため、 &lt;strong&gt;NEG&lt;/strong&gt; について調べました。&lt;/p&gt;&#10;&lt;h2 id="neg-とは"&gt;NEG とは？&lt;/h2&gt;&#10;&lt;p&gt;NEG についての記載があるページを参考にさせていただきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://medium.com/google-cloud-jp/neg-%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B-cc1e2bbc979e"&gt;NEG とは何か. はじめに | by Yuki Furuyama | google-cloud-jp | Medium&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Network Endpoint ( &lt;strong&gt;NE&lt;/strong&gt; ) は Kubernetes の &lt;strong&gt;Pod&lt;/strong&gt; に相当する&lt;/li&gt;&#10;&lt;li&gt;Network Endpoint を複数まとめたグループが Network Endpoint Group ( &lt;strong&gt;NEG&lt;/strong&gt; ) であり、Kubernetes の &lt;strong&gt;Service&lt;/strong&gt; に相当する&lt;/li&gt;&#10;&lt;li&gt;NEG を使うことで Kubernetes の Pod と Service を GCP 側で第一級市民として扱えるようになる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;視覚化すると以下のようになります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;= GCP =====================================&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +-------------+ +-------+ +---+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |Load Balancer| ----&amp;gt; |NEG | ----&amp;gt; |NE |+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +-------------+ +-------+ +---+|+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ^ ^ +---+|&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | | +---+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | | ^&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | | |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;= GKE =|===================|=============|=&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | | |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +------------------+ +-------------------+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |Ingress Controller| |NEG Controller |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +------------------+ +-------------------+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | | |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +-------------+ +-------+ +---+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |Ingress | ----&amp;gt; |Service| ----&amp;gt; |Pod|+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +-------------+ +-------+ +---+|+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +---+|&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +---+&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;GKE&lt;/strong&gt; 上のリソースとして &lt;strong&gt;Ingress&lt;/strong&gt; 、 &lt;strong&gt;Service&lt;/strong&gt; 、 &lt;strong&gt;Pod&lt;/strong&gt; がありますが、 GCP 上にも対になるリソースが生成されます。&#10;&lt;strong&gt;NE&lt;/strong&gt; は　 Pod に割り当てられている &lt;strong&gt;IP + Port&lt;/strong&gt; のセットで一意となる GCP リソースです。&lt;/p&gt;</description></item><item><title>GCPの"Cloud Domains"を使ってドメインを取得、管理する</title><link>https://genzouw.com/entry/2021/05/18/181955/2599/</link><pubDate>Tue, 18 May 2021 18:19:55 +0900</pubDate><guid>https://genzouw.com/entry/2021/05/18/181955/2599/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;ドメインを取得するためのサービス &lt;strong&gt;&amp;ldquo;Google Domains&amp;rdquo;&lt;/strong&gt; とごっちゃになってしまいそうですが、 GCP 上の &lt;strong&gt;&amp;ldquo;Cloud Domains&amp;rdquo;&lt;/strong&gt; というサービスでドメイン取得ができるようでしたので試してみました。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GCP ( Google Cloud Platform )&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="概要"&gt;概要&lt;/h2&gt;&#10;&lt;p&gt;冒頭でも触れましたが、ドメインを &lt;strong&gt;登録&lt;/strong&gt; し、 &lt;strong&gt;管理&lt;/strong&gt; するためのサービスとのことです。&lt;/p&gt;&#10;&lt;p&gt;以下のサービスと名前が似ていますので、違いを整理しながら作業を進めていきます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Google Domains&lt;/li&gt;&#10;&lt;li&gt;Cloud DNS&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="前提条件"&gt;前提条件&lt;/h2&gt;&#10;&lt;p&gt;当然のことながら &lt;strong&gt;&amp;ldquo;GCP&amp;rdquo; のアカウント作成が完了している&lt;/strong&gt; 必要があります。&lt;/p&gt;&#10;&lt;p&gt;事前に作成しておきましょう。&lt;/p&gt;&#10;&lt;h2 id="ドメインの登録方法"&gt;ドメインの登録方法&lt;/h2&gt;&#10;&lt;p&gt;ドメインの登録までの作業を順次進めていきましょう。&lt;/p&gt;&#10;&lt;h3 id="0-まずは-cloud-domains-の有効化"&gt;0. まずは &amp;ldquo;Cloud Domains&amp;rdquo; の有効化&lt;/h3&gt;&#10;&lt;p&gt;すでに &amp;ldquo;GCP&amp;rdquo; のコンソールページが開ける状態であるはずです。&lt;/p&gt;&#10;&lt;p&gt;コンソールページにて &lt;a href="https://console.cloud.google.com/apis/library/domains.googleapis.com?authuser=1&amp;amp;hl=ja&amp;amp;_ga=2.18399932.428837190.1621318869-765240018.1621318869"&gt;&amp;ldquo;Cloud Domains API&amp;rdquo; を有効にするためのページ&lt;/a&gt; を開き、有効化します。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1uRZgOIlmHSIO-_5k3RGtnWbE3Y7LCRfc" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="1-登録したいドメインを検索"&gt;1. 登録したいドメインを検索&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://console.cloud.google.com/net-services/domains/registrations/list?_ga=2.44674530.734215462.1621326357-296491316.1621326357"&gt;Cloud Doamins の管理ページ&lt;/a&gt; を開きます。&lt;/p&gt;&#10;&lt;p&gt;その後、 &lt;strong&gt;「ドメインを登録」&lt;/strong&gt; ボタンを押します。&lt;/p&gt;&#10;&lt;p&gt;購入したいドメインを検索します。結果、いくつかのドメインが、登録価格と一緒に表示されます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1JhfXnGST1ejP43mtnN3XugybcrQQZBvA" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;購入したいものを見つけたら、一覧右列の &lt;strong&gt;「カートボタン」&lt;/strong&gt; を押します。 ( 同時に複数ドメインを購入することができます。その場合には購入したいカートボタンをすべてクリックします。 )&lt;/p&gt;&#10;&lt;p&gt;ページ右側に選択された全「ドメイン」を購入するための料金合計が計算され、表示されます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=14cXOx5pdxii-ubYXAlgykXkHhLeMtiF2" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;選択に問題がなければ、「続行」ボタンを押します。&lt;/p&gt;&#10;&lt;h3 id="2-ドメインに対する-dns-を設定"&gt;2. ドメインに対する DNS を設定&lt;/h3&gt;&#10;&lt;p&gt;DNS プロバイダ ( DNS サーバの提供元 ) をどこにするかを選択します。 ( 冒頭で取り上げたサービスが絡んできましたね。 )&lt;/p&gt;</description></item><item><title>GCP上の2つのK8Sクラスタの設定差異をdiffで確認する</title><link>https://genzouw.com/entry/2021/05/13/194939/2573/</link><pubDate>Thu, 13 May 2021 19:49:39 +0900</pubDate><guid>https://genzouw.com/entry/2021/05/13/194939/2573/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;既存の GKE ( Google Kubernetes Engine )クラスタが 2 つありました。&lt;/p&gt;&#10;&lt;p&gt;両者とも前任者が手作業で作成していましたが、すでに設定に乖離があることが想定されていました。&lt;br&gt;&#10;乖離を埋めるために、両者にどれだけの違いがあるのか確認しておきたいと思いました。&lt;/p&gt;&#10;&lt;p&gt;差異を確認するために工夫した方法を掲載します。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;span class="lnt"&gt;9&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.1.8&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin20.3.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ diff --version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;diff &lt;span class="o"&gt;(&lt;/span&gt;GNU diffutils&lt;span class="o"&gt;)&lt;/span&gt; 2.8.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Copyright &lt;span class="o"&gt;(&lt;/span&gt;C&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="m"&gt;2002&lt;/span&gt; Free Software Foundation, Inc.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="gcp-上の-k8s-クラスタの設定を抜き出す"&gt;GCP 上の K8S クラスタの設定を抜き出す&lt;/h2&gt;&#10;&lt;p&gt;GCP 上の Kubernetes クラスタの設定を抜き出すために、 &lt;code&gt;gcloud&lt;/code&gt; コマンドが利用できます。&lt;/p&gt;&#10;&lt;p&gt;例えば以下のような環境に Kubernetes クラスタが作成されていたとします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;プロジェクト ID : &lt;code&gt;GCP_MY_PROJECT_ID&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;ゾーン名 : &lt;code&gt;asia_northeast1_b&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Kubernetes クラスタ名 : &lt;code&gt;GCP_MY_CLUSTER_NAME&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この Kubernetes クラスタの設定を抜き出すには、以下のコマンドを実行します。&lt;/p&gt;</description></item><item><title>Goole Cloud Build上でシェルを実行した結果、エラーが発生しても正常終了してしまう問題に対処</title><link>https://genzouw.com/entry/2021/05/12/120554/2570/</link><pubDate>Wed, 12 May 2021 12:05:54 +0900</pubDate><guid>https://genzouw.com/entry/2021/05/12/120554/2570/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;開発効率化、品質向上のために現在のシステム開発に &lt;strong&gt;CI/CD&lt;/strong&gt; パイプラインの構築は必須だと思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Github Action&lt;/strong&gt; / &lt;strong&gt;CircleCI&lt;/strong&gt; / &lt;strong&gt;Cloud Build&lt;/strong&gt; など、CI/CD を構築するためのサービスがありますが、Cloud Build を多用させていただいています。&lt;/p&gt;&#10;&lt;p&gt;その &amp;ldquo;Cloud Build&amp;rdquo; でシェルコマンドを実行したところ、エラーが発生したにもかかわらずなぜか正常終了してしまい原因特定までに多少時間がかかってしまいました。&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;わかってしまえば当然なのですが、ついつい「シェルを実行している」ことを忘れてしまったことが原因でした。&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Google Cloud Platform ( GCP )&lt;/strong&gt; の &lt;strong&gt;Cloud Build&lt;/strong&gt; を利用しました。&lt;/p&gt;&#10;&lt;h2 id="再現方法"&gt;再現方法&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Cloud Build&lt;/strong&gt; でビルドステップを構築する方法として、ちょっと複雑なものを構築しようとした場合は Git リポジトリに &lt;code&gt;cloudbuild.yaml&lt;/code&gt; という YAML ファイルを配置してやります。&lt;/p&gt;&#10;&lt;p&gt;ここで、以下のような &lt;code&gt;cloudbuild.yaml&lt;/code&gt; というファイルを用意としましょう。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entrypoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;begin&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ls -la /tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ls -la /nothing&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;処理概要は以下のとおりです。&lt;/p&gt;</description></item><item><title>TerraformでGCPのPub/Subを作成する②-Pub/Sub の作成</title><link>https://genzouw.com/entry/2021/03/13/080051/2453/</link><pubDate>Sat, 13 Mar 2021 08:00:51 +0900</pubDate><guid>https://genzouw.com/entry/2021/03/13/080051/2453/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2021/03/12/080016/2447/"&gt;Terraform で GCP の Pub/Sub を作成する ①-Terraform をインストール&lt;/a&gt; からの続きです。&lt;/p&gt;&#10;&lt;p&gt;前回のエントリでは、 &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt; を MacBookPro にインストールするところまでを行いました。&#10;僕の MacBookPro では、インストール時にエラーが多数発生して解決までにいくつもの工程を踏む必要がありました。&lt;/p&gt;&#10;&lt;p&gt;今回のエントリでは、 &lt;strong&gt;GCP&lt;/strong&gt; 上に &lt;strong&gt;Pub/Sub&lt;/strong&gt; の　&lt;strong&gt;Topic(トピック)&lt;/strong&gt; と &lt;strong&gt;Subscription(サブスクリプション)&lt;/strong&gt; を構築していきます。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;用語が不明な方は以下を参照ください。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2021/02/09/184018/2167/"&gt;Google Cloud Pub/Sub について学習中（非同期メッセージングを図示してみました） | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2021/02/10/080020/2179/"&gt;Google Cloud Pub/Sub の登場人物と役割を整理してみました | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.0.18&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin19.5.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ terraform -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Terraform v0.14.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="事前準備前提条件"&gt;事前準備、前提条件&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;gcloud auth login&lt;/code&gt; 済みであること&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;gcloud&lt;/code&gt; コマンドを実行して &lt;strong&gt;GCP&lt;/strong&gt; プロジェクト内に &lt;strong&gt;Pub/Sub&lt;/strong&gt; リソースを作成する権限を持っていること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;em&gt;今回は権限ではまりたくないため、GCP プロジェクト内に登録されている自分の権限を利用します。&lt;/em&gt;&lt;/p&gt;</description></item><item><title>TerraformでGCPのPub/Subを作成する①-Terraformをインストール</title><link>https://genzouw.com/entry/2021/03/12/080016/2447/</link><pubDate>Fri, 12 Mar 2021 08:00:16 +0900</pubDate><guid>https://genzouw.com/entry/2021/03/12/080016/2447/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;今まで GCP のリソースをシェルスクリプトで作成していましたが、いい加減クラウド環境構築のデファクトスタンダードである &lt;strong&gt;&lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;&lt;/strong&gt; に移行しようと思っていました。&lt;/p&gt;&#10;&lt;p&gt;時間ができたので、ようやく重い腰をあげました。&lt;/p&gt;&#10;&lt;p&gt;とはいえ、想定外に時間がかかってしまったので、今日は Terraform を自分の MacBookPro にインストールするところまでにしておきます。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.0.18&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin19.5.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ brew --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Homebrew 3.0.5-12-g94431ce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Homebrew/homebrew-core &lt;span class="o"&gt;(&lt;/span&gt;git revision e6ce0b2835&lt;span class="p"&gt;;&lt;/span&gt; last commit 2021-03-10&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Homebrew/homebrew-cask &lt;span class="o"&gt;(&lt;/span&gt;git revision cdab18c620&lt;span class="p"&gt;;&lt;/span&gt; last commit 2021-03-10&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="terraform-ってなに"&gt;Terraform ってなに？&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://www.terraform.io/"&gt;Terraform by HashiCorp&lt;/a&gt; から抜粋します （ 2021-03-10 現在 ）。&lt;/p&gt;</description></item><item><title>GCPにSpinnakerをインストールするための手順を整理しました</title><link>https://genzouw.com/entry/2021/02/12/214915/2199/</link><pubDate>Fri, 12 Feb 2021 21:49:15 +0900</pubDate><guid>https://genzouw.com/entry/2021/02/12/214915/2199/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;前回でようやくSpinnakerが生まれてきた背景やできることを大まかにつかめました。&lt;/p&gt;&#10;&lt;p&gt;ここからは実際にインストールしてみたいと思います。&lt;/p&gt;&#10;&lt;iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=verywealthyda-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B084ZCYL4V&amp;linkId=a13517124ec4a6224d2c89648f7aa9e3"&gt;&lt;/iframe&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;選定&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;クラウド&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GCP ( Google Cloud Platform )&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;デプロイ環境&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GKE ( Google Kubernetes Engine )&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Spinnakerインストール環境&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GCE ( Google Compute Engine )&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1zeebpQSAd7s7ZsKqENPx5VXGtjsOVkF3" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="前提条件"&gt;前提条件&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;作業用PCで &lt;code&gt;gcloud&lt;/code&gt; コマンド ( &lt;strong&gt;Google Cloud SDK&lt;/strong&gt; ) が実行できること&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;GCP&lt;/strong&gt; 上に &lt;strong&gt;GKEクラスタ&lt;/strong&gt; が構築済みであること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="作業用pc-での作業"&gt;&lt;strong&gt;作業用PC&lt;/strong&gt; での作業&lt;/h2&gt;&#10;&lt;p&gt;まずは自分の作業用PCで作業を行います。&lt;/p&gt;&#10;&lt;h3 id="1-コマンドラインから各種作業を実行するための準備"&gt;1. コマンドラインから各種作業を実行するための準備&lt;/h3&gt;&#10;&lt;p&gt;コマンドラインで作業を進めていくに当たり、いくつかのAPIを &lt;strong&gt;有効化&lt;/strong&gt; します。&lt;/p&gt;&#10;&lt;p&gt;以下の2つの Google APIを有効にします。&#10;&lt;strong&gt;Google Cloud Console&lt;/strong&gt; Webページから有効にしても良いですが、ここでは &lt;code&gt;gcloud&lt;/code&gt; コマンドで有効化します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://console.developers.google.com/apis/api/iam.googleapis.com/overview?pli=1"&gt;Google Identity and Access Management (IAM) API&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://console.developers.google.com/apis/library/cloudresourcemanager.googleapis.com?project=genzouw-com&amp;amp;folder=&amp;amp;organizationId="&gt;Google Cloud Resource Manager API&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ gcloud services &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; iam.googleapis.com &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cloudresourcemanager.googleapis.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="2-halyardをインストールする-compute-engine-インスタンスを作成"&gt;2. Halyardをインストールする &lt;strong&gt;Compute Engine&lt;/strong&gt; インスタンスを作成&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;Halyard&lt;/strong&gt; をインストールする &lt;strong&gt;Compute Engineインスタンス&lt;/strong&gt; を作成します。&lt;/p&gt;</description></item><item><title>Google Cloud Pub/Subの登場人物と役割を整理してみました</title><link>https://genzouw.com/entry/2021/02/10/080020/2179/</link><pubDate>Wed, 10 Feb 2021 08:00:20 +0900</pubDate><guid>https://genzouw.com/entry/2021/02/10/080020/2179/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2021/02/09/184018/2167/"&gt;前回のエントリ&lt;/a&gt; に引き続き、 &lt;strong&gt;Google Cloud Pub/Sub&lt;/strong&gt; の学習を進めてわかった登場人物とその役割について整理してみました。&lt;/p&gt;&#10;&lt;h2 id="参考ページ"&gt;参考ページ&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;[公式ページ)[https://cloud.google.com/pubsub/docs/overview]&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="登場人物"&gt;登場人物&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Publisher（パブリッシャー）&lt;/li&gt;&#10;&lt;li&gt;Topic（トピック）&lt;/li&gt;&#10;&lt;li&gt;Subscription（サブスクリプション）&lt;/li&gt;&#10;&lt;li&gt;Subscriber（サブスクライバー）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;そして、上記4つの登場人物たちの間を流れていくものとして &lt;strong&gt;Message（メッセージ）&lt;/strong&gt; があります。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://cloud.google.com/pubsub/images/many-to-many.svg" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="publisherパブリッシャー"&gt;Publisher(パブリッシャー)&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;メッセージの送信元&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="topicトピック"&gt;Topic（トピック）&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;ldquo;Cloud Pub/Sub&amp;rdquo; サービスの内部要素です。&lt;/li&gt;&#10;&lt;li&gt;メッセージの送信元である &lt;strong&gt;Publisher&lt;/strong&gt; に対する &lt;strong&gt;コネクター&lt;/strong&gt; として理解しました。&lt;/li&gt;&#10;&lt;li&gt;TopicとPublisherは必ず &lt;strong&gt;1:1&lt;/strong&gt; となります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="subscriptionサブスクリプション"&gt;Subscription（サブスクリプション）&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;ldquo;Cloud Pub/Sub&amp;rdquo; サービスの内部要素です。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;メッセージの受信先である &lt;strong&gt;Subscriber&lt;/strong&gt; に対する &lt;strong&gt;コネクター&lt;/strong&gt; として理解しました。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="subscriberサブスクライバー"&gt;Subscriber(サブスクライバー)&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;メッセージの受信先&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="メッセージ伝達のイベントキューはどの単位"&gt;メッセージ伝達のイベントキューはどの単位？&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://cloud.google.com/pubsub/images/pub_sub_flow.svg" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;公式サイトの上記の図だけでは、 メッセージイベントは &lt;strong&gt;Tppic&lt;/strong&gt; 単位にキューイングされるのか？&lt;/p&gt;&#10;&lt;p&gt;と思いましたが、よくよく文章を読んでみると &lt;strong&gt;Subscription&lt;/strong&gt; 単位にキューイングされているようです。&#10;当然ですよね。そうしないとそれぞれのSubscriberにイベントが伝達されませんもんね。&lt;/p&gt;&#10;&lt;h2 id="subscriptionからsubscriberへのメッセージ伝達の方法は2つ"&gt;SubscriptionからSubscriberへのメッセージ伝達の方法は2つ&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Push&lt;/strong&gt; 方式と &lt;strong&gt;Pull&lt;/strong&gt; 方式が利用できます。&lt;/p&gt;&#10;&lt;h3 id="push-方式--subscription-からみて-push-を行う"&gt;&lt;strong&gt;Push&lt;/strong&gt; 方式 : &lt;strong&gt;Subscription&lt;/strong&gt; からみて &lt;strong&gt;Push&lt;/strong&gt; を行う&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-seq" data-lang="seq"&gt;Publisher -&amp;gt;Topic: Message&#10;Topic-&amp;gt;Subscription: Message&#10;Subscription-&amp;gt;Subscriber: POST(Message)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="pull-方式--subscriber-からみて-pull-を行う"&gt;&lt;strong&gt;Pull&lt;/strong&gt; 方式 : &lt;strong&gt;Subscriber&lt;/strong&gt; からみて &lt;strong&gt;Pull&lt;/strong&gt; を行う&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-seq" data-lang="seq"&gt;Publisher -&amp;gt;Topic: Message&#10;Topic-&amp;gt;Subscription: Message&#10;Subscriber-&amp;gt;Subscription: GET(Message)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;効率が良いのは &lt;strong&gt;Push&lt;/strong&gt; 方式でしょうが、 &lt;strong&gt;Subscriber&lt;/strong&gt; がオンプレ環境にいる、外部からのInboundな通信が許可されていない、Webサービスとして公開する実装になれていないといった場合は、 &lt;strong&gt;Pull&lt;/strong&gt; 方式を選択するしかないかと思います。&lt;/p&gt;</description></item><item><title>Google Cloud Pub/Subについて学習中（非同期メッセージングを図示してみました）</title><link>https://genzouw.com/entry/2021/02/09/184018/2167/</link><pubDate>Tue, 09 Feb 2021 18:40:18 +0900</pubDate><guid>https://genzouw.com/entry/2021/02/09/184018/2167/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Google Cloud Pub/Sub&lt;/strong&gt; を使っていましたが、あまり理論や背景を理解せず使っていたため復習しています。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://cloud.google.com/pubsub/docs/overview"&gt;公式ページ&lt;/a&gt; より&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;「GCP（Google Cloud Platform)上で提供されている、 &lt;strong&gt;非同期メッセージングサービス&lt;/strong&gt; です。」&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;と書かれていましたが、「非同期メッセージングサービス」とはそもそもなんだろう？ということでアウトプットしながら整理しました。&lt;/p&gt;&#10;&lt;h2 id="同期メッセージング-とは"&gt;同期メッセージング とは&lt;/h2&gt;&#10;&lt;p&gt;メッセージ（何かの要求) の送信側 &lt;strong&gt;publisher&lt;/strong&gt; と 受信側 &lt;strong&gt;subscriber&lt;/strong&gt; は両方とも同時に活動状態（ &lt;strong&gt;Active&lt;/strong&gt; )でなければ、やりとりできない仕組みです。&lt;/p&gt;&#10;&lt;p&gt;Webページ閲覧の例だと、ブラウザが &lt;strong&gt;publisher&lt;/strong&gt; 、 Webサーバが &lt;strong&gt;subscriber&lt;/strong&gt; となります。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-seq" data-lang="seq"&gt;publisher-&amp;gt;subscriber: message&#10;subscriber-&amp;gt;publisher: result&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;電話のイメージですね。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1U_SAemSF1cu1TV2PI67sRk6AM9UMtmVI" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="非同期メッセージング-とは"&gt;非同期メッセージング とは&lt;/h2&gt;&#10;&lt;p&gt;メッセージの送信側 &lt;strong&gt;publisher&lt;/strong&gt; と 受信側 &lt;strong&gt;subscriber&lt;/strong&gt; の間に仲介者 &lt;strong&gt;broker&lt;/strong&gt; が挟まります。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;publisher&lt;/strong&gt; は &lt;strong&gt;subscriber&lt;/strong&gt; の存在や状態を意識することなく、メッセージの送信を終了することができます。&lt;/p&gt;&#10;&lt;h3 id="非同期メッセージングその1"&gt;非同期メッセージングその1&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-seq" data-lang="seq"&gt;publisher-&amp;gt;broker: message&#10;broker-&amp;gt;publisher: result&#10;&#10;broker-&amp;gt;subscriber: message&#10;subscriber-&amp;gt;broker: result&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;こちらはeメールのイメージですね。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1uHtwwjA_H5O9A1kMVPpW2GTHmKZYvnC_" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;当然、 &lt;strong&gt;broker&lt;/strong&gt; には安定性が求めらますね。&lt;/p&gt;&#10;&lt;p&gt;また、以下のように仲介者を挟んだとしても &lt;strong&gt;subscriber&lt;/strong&gt; のレスポンスに依存している場合は非同期メッセージング方式とはなりません。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-seq" data-lang="seq"&gt;publisher-&amp;gt;broker: message&#10;&#10;broker-&amp;gt;subscriber: message&#10;subscriber-&amp;gt;broker: result&#10;&#10;broker-&amp;gt;publisher: result&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="非同期メッセージングその2"&gt;非同期メッセージングその2&lt;/h3&gt;&#10;&lt;p&gt;さらに、 &lt;strong&gt;subscriber&lt;/strong&gt; は1つである必要はありません。&#10;&lt;strong&gt;publisher&lt;/strong&gt; は &lt;strong&gt;broker&lt;/strong&gt; １人に対してメッセージを送信することだけに注力します。&lt;/p&gt;</description></item><item><title>gcloudとfzfを組み合わせてGCPプロジェクトを簡単に切り替える</title><link>https://genzouw.com/entry/2021/02/01/200923/2154/</link><pubDate>Mon, 01 Feb 2021 20:09:23 +0900</pubDate><guid>https://genzouw.com/entry/2021/02/01/200923/2154/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;現職ではAWSよりも&lt;strong&gt;GCP&lt;/strong&gt;にインフラリソースを多く配置しています。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; コマンドを使って作業をする事が多いですが、更に最近ではGCPプロジェクトも複数またがって作業する事が増えてきました。&lt;/p&gt;&#10;&lt;p&gt;かんたんにGCPプロジェクトを切り替えられるかが作業の効率化のために重要です。&lt;/p&gt;&#10;&lt;p&gt;かんたんにGCPプロジェクトをスイッチし、Compute Engineインスタンスにssh接続するためのaliasを作成したので紹介します。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.0.18&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin19.5.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ gcloud --version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Google Cloud SDK 307.0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Updates are available &lt;span class="k"&gt;for&lt;/span&gt; some Cloud SDK components. To install them,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;please run:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ fzf --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.25.0 &lt;span class="o"&gt;(&lt;/span&gt;brew&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;h3 id="fzfコマンドのインストール"&gt;fzfコマンドのインストール&lt;/h3&gt;&#10;&lt;p&gt;今回紹介するaliasを利用するためには、 &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;のインストールが必要です。&#10;インストールしましょう。&lt;/p&gt;</description></item><item><title>BashシェルスクリプトでCloud Loggingへのログ出力をシンプルに実装する方法</title><link>https://genzouw.com/entry/2021/01/25/213005/2150/</link><pubDate>Mon, 25 Jan 2021 21:30:05 +0900</pubDate><guid>https://genzouw.com/entry/2021/01/25/213005/2150/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;既存のシェルスクリプトから &lt;strong&gt;GCP&lt;/strong&gt; の &lt;strong&gt;Cloud Logging&lt;/strong&gt; にログ出力させる必要がありました。&#10;時間をかけずに実装できないか考え、 &lt;a href="https://genzouw.com/entry/2020/01/06/120027/1845/"&gt;Bashシェルスクリプトでログ出力をシンプルに実現する方法&lt;/a&gt; に多少手を加えて実現できたので紹介します。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, version 5.0.18&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin19.5.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="事前準備gcp上の設定"&gt;事前準備（GCP上の設定）&lt;/h2&gt;&#10;&lt;p&gt;今回は &lt;strong&gt;Cloud Run&lt;/strong&gt; 上でシェルスクリプトを実行させましたが、 &lt;strong&gt;Compute Engine&lt;/strong&gt; や &lt;strong&gt;GKE&lt;/strong&gt; 上でも同じ方法で容易に実現できました。&lt;/p&gt;&#10;&lt;p&gt;事前に1つだけ必要な設定があります。&#10;&lt;strong&gt;サービスアカウント&lt;/strong&gt; に &lt;strong&gt;Logging&lt;/strong&gt; に書き込みを行う権限を設定する必要があります。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;Cloud Runのサービスアカウント&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1UuMYODkz_kRXguspmK7MaQatsJ2zPpBJ" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Compute Engineのサービスアカウント&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1q5hA4DrwVWGaHX2HebeozriAMviwX0hu" alt=""&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;上記に記載されている &lt;strong&gt;サービスアカウント&lt;/strong&gt; （ &lt;strong&gt;@&lt;/strong&gt; で区切られていて、メールアドレスのようになっています。）をメモし、IAM設定ページから見つけましょう。&#10;見つけたら、そちらのサービスアカウントに &lt;strong&gt;Logging&lt;/strong&gt; 書き込みの権限を付与しておきます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=19rFx4VoTQuD38vTM3wbF7JWa5VneUsNm" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="スクリプトでログを出力"&gt;スクリプトでログを出力&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2020/01/06/120027/1845/"&gt;Bashシェルスクリプトでログ出力をシンプルに実現する方法&lt;/a&gt; を事前に一読しておくと良いです。&lt;/p&gt;&#10;&lt;p&gt;シェルスクリプト全体の標準出力、標準エラー出力をすべてGCPの &lt;strong&gt;Logging&lt;/strong&gt; に流し込むためには、以下のような記述を行います。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;span class="lnt"&gt;22&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/usr/bin/env bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -o errexit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -o nounset&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 標準出力、標準エラー出力をログ送信&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ***こちらはご自分が書き出しを行いたいロギング名に書き換えてください！***&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GCP_LOGGING_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR-LOGGING-NAME&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; 1&amp;gt; &amp;gt;&lt;span class="o"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; -r LOG&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gcloud logging write &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GCP_LOGGING_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --payload-type&lt;span class="o"&gt;=&lt;/span&gt;text --severity&lt;span class="o"&gt;=&lt;/span&gt;INFO &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;done&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 標準エラー出力をログ送信&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exec&lt;/span&gt; 2&amp;gt; &amp;gt;&lt;span class="o"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; -r LOG&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gcloud logging write &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GCP_LOGGING_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --payload-type&lt;span class="o"&gt;=&lt;/span&gt;text --severity&lt;span class="o"&gt;=&lt;/span&gt;ERROR &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LOG&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;done&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ...(以下省略)...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;code&gt;exec 1&amp;gt; &amp;gt;(...)&lt;/code&gt; の中の処理には、スクリプト全体の標準出力が流れて来ます。&lt;/p&gt;</description></item><item><title>GCPのGoogle Container Registryのイメージを一括削除する方法</title><link>https://genzouw.com/entry/2020/08/13/123526/2057/</link><pubDate>Thu, 13 Aug 2020 12:35:26 +0900</pubDate><guid>https://genzouw.com/entry/2020/08/13/123526/2057/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;GCP上の &lt;strong&gt;Google Container Registry&lt;/strong&gt; 内に不要なDockerイメージがあるため、削除したいと思いました。&lt;/p&gt;&#10;&lt;p&gt;Dockerイメージを削除するためには、すべてのタグ（というかハッシュ。ビルド履歴）を削除する必要がありmさう。&lt;/p&gt;&#10;&lt;p&gt;対象のDockerイメージに4000以上のタグが付与されているため、できる限り一括かつ並列で削除擦る方法を探してみました。&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro16,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, バージョン 5.0.17&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin19.4.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ xargs --version &lt;span class="p"&gt;|&lt;/span&gt; head -n &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xargs &lt;span class="o"&gt;(&lt;/span&gt;GNU findutils&lt;span class="o"&gt;)&lt;/span&gt; 4.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;p&gt;GCP上のリソースをコマンドラインから操作するためのツールとして &lt;code&gt;gcloud&lt;/code&gt; コマンドがあります。&#10;事前にこちらのコマンドをインストールし、 &lt;code&gt;gcloud auth login&lt;/code&gt; などで認証を完了しておきましょう。&lt;/p&gt;&#10;&lt;p&gt;正しく準備ができていれば、以下のコマンドが動作するはずです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Google Container Registryからイメージの一覧を取得&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ gcloud container images list&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="結果"&gt;結果&lt;/h2&gt;&#10;&lt;p&gt;準備ができれば、後は以下のコマンドを実行するだけです。&#10;以下の2つの環境変数はご自分のGCP設定に合わせて書き換えてください。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;GCP_PROJECT_ID&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;GCP_DOCKER_IMAGE_NAME&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;span class="lnt"&gt;9&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;GCP_PROJECT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_GCP_PROJECT_ID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;GCP_DOCKER_IMAGE_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GCP_PROJECT_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/YOUR_DOCKER_IMAGE_NAME&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ gcloud &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; container images list-tags &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GCP_DOCKER_IMAGE_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; sed 1d &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;&amp;#39;{ print $1 }&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -P4 -n &lt;span class="m"&gt;1&lt;/span&gt; -I&lt;span class="o"&gt;{}&lt;/span&gt; gcloud container images delete &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GCP_DOCKER_IMAGE_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;@sha256:&lt;span class="o"&gt;{}&lt;/span&gt; --quiet --force-delete-tags&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;ここでは、 &lt;code&gt;xargs&lt;/code&gt; の &lt;code&gt;-P&lt;/code&gt; パラメータで &lt;strong&gt;4並列実行しています&lt;/strong&gt; 。&#10;マシンリソースに自身があるなら &lt;code&gt;-P0&lt;/code&gt; として、CPUを目一杯使うことができます。&lt;/p&gt;</description></item></channel></rss>