<?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 Marketechlabo</title><link>https://www.marketechlabo.com/tags/gcp/</link><description>Recent content in GCP on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Fri, 24 Jun 2022 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/gcp/index.xml" rel="self" type="application/rss+xml"/><item><title>GCPのIAMポリシー</title><link>https://www.marketechlabo.com/server-infrastructure/gcp-iam-policy/</link><pubDate>Wed, 12 Jan 2022 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/gcp-iam-policy/</guid><description>
&lt;h1 id="gcpのiamポリシー権限設定"&gt;GCPのIAMポリシー（権限設定）&lt;/h1&gt;
&lt;h2 id="gcpにおける階層と言葉の定義"&gt;GCPにおける階層と言葉の定義&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;組織&lt;/li&gt;
&lt;li&gt;（フォルダ）&lt;/li&gt;
&lt;li&gt;プロジェクト&lt;/li&gt;
&lt;li&gt;各種リソース
&lt;ul&gt;
&lt;li&gt;Cloud Storage&lt;/li&gt;
&lt;li&gt;BigQuery&lt;/li&gt;
&lt;li&gt;Compute Engine&lt;br&gt;
:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="iam-resource-hierarchy.png"
class="image_figure image_internal image_unprocessed"
src="/images/gcp/iam-resource-hierarchy.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
プロジェクトとリソースを中心に考える。
フォルダや組織はプロジェクトを便宜的に束ねるもの。フォルダや組織は設定しなくてもいい
→後述するが、組織／プロジェクト／リソース単位で権限設定ができる&lt;/p&gt;
&lt;h2 id="アカウント"&gt;アカウント&lt;/h2&gt;
&lt;p&gt;アカウントには2種類&lt;/p&gt;
&lt;h3 id="ユーザーアカウント"&gt;ユーザーアカウント&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Googleのログイン画面からログインできるアカウント&lt;/li&gt;
&lt;li&gt;人間ユーザ。異動や退職とともにアカウントがなくなるケースも想定する必要がある&lt;/li&gt;
&lt;li&gt;一部のGoogleアカウントではアカウント単位のコストが発生することも想定する（つまり有限個しか発行できない）&lt;/li&gt;
&lt;li&gt;Googleアカウントである必要がある→認証はメールアドレスとパスワードで行う
&lt;ul&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Workspace&lt;/li&gt;
&lt;li&gt;Cloud Identity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="サービスアカウント"&gt;サービスアカウント&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;システムがGCPにアクセスする際に使うアカウント&lt;/li&gt;
&lt;li&gt;Googleのログイン画面からログインすることはない&lt;/li&gt;
&lt;li&gt;異動や退職で使えなくなるケースはない&lt;/li&gt;
&lt;li&gt;メールアドレス形式&lt;code&gt;service-account-name@project-id.iam.gserviceaccount.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;認証は主にJSONの鍵ファイルを使って行う&lt;/li&gt;
&lt;li&gt;アカウントごとのコストは発生しないので実質無限個発行できると考えていい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="アカウントと権限の紐付けのパターン"&gt;アカウントと権限の紐付けのパターン&lt;/h2&gt;
&lt;p&gt;出てくる言葉&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アカウント&lt;/li&gt;
&lt;li&gt;グループ&lt;/li&gt;
&lt;li&gt;ロール&lt;/li&gt;
&lt;li&gt;権限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;目的：アカウントと権限を紐づけること。その間のハブとしてグループやロールがあると考えればいい
アカウントと権限がある
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="iam-policy-1.png"
class="image_figure image_internal image_unprocessed"
src="/images/gcp/iam-policy-1.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
これをこのように紐づけたい
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="iam-policy-2.png"
class="image_figure image_internal image_unprocessed"
src="/images/gcp/iam-policy-2.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
複数のアカウントに対して
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="iam-policy-3.png"
class="image_figure image_internal image_unprocessed"
src="/images/gcp/iam-policy-3.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="ロール"&gt;ロール&lt;/h3&gt;
&lt;p&gt;直接アカウントと権限を紐づけるのではなく、ロールを介して設定する
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="iam-policy-4.png"
class="image_figure image_internal image_unprocessed"
src="/images/gcp/iam-policy-4.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
ロールの例
ストレージオブジェクト閲覧者 &lt;code&gt;roles/storage.objectViewer&lt;/code&gt;
付随する権限&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resourcemanager.projects.get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourcemanager.projects.list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;storage.objects.get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;storage.objects.list&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloud Storageでファイル一覧を表示してダウンロードするには複数の権限を設定する必要がある。それを「オブジェクト閲覧者」という一般的な役割単位で束ねたものをロールという。
GCPには&lt;a href="https://cloud.google.com/iam/docs/understanding-roles?hl=ja#predefined_roles"&gt;事前定義ロール&lt;/a&gt;が用意されている。これ以外に柔軟にユーザ定義ロールを設定することも可能。
※基本ロールは使わない（実運用には粒度が荒すぎる）
つまりロールというのは、GCP内の細かい権限体系を使いやすい単位のちょうどいい粒度にまとめたものである。&lt;/p&gt;</description></item><item><title>機械学習用のLinuxインスタンスの環境構築（GCEやEC2などクラウド）</title><link>https://www.marketechlabo.com/server-infrastructure/linux-mac-server-settings/</link><pubDate>Fri, 24 Jun 2022 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/linux-mac-server-settings/</guid><description>
&lt;p&gt;最近では機械学習の計算のためにLinuxマシンを構築しては消し、を繰り返すことが多い。サーバの構築と消去が柔軟に可能なことからもEC2やGCEなどクラウドのインスタンスをよく使うということも影響している。
この記事では一般的なサーバ構築の記事では紹介されていない、クラウドのインスタンスで意外と盲点になる点を中心に、機械学習の計算用サーバとして安定した運用をするために最低限必要な設定をまとめた。
GPUドライバ（CUDA、cuDNN）やコンテナランタイム（Docker/NVIDIA Container Toolkit）の設定は別途必要となる。&lt;/p&gt;
&lt;h2 id="linuxで最初にやっておくべき設定"&gt;Linuxで最初にやっておくべき設定&lt;/h2&gt;
&lt;p&gt;Amazon EC2やGoogle Compute Engineなどのクラウドインスタンスのデフォルトの設定では不都合があるため、設定を追加する必要がある。&lt;/p&gt;
&lt;h3 id="スワップメモリの設定"&gt;スワップメモリの設定&lt;/h3&gt;
&lt;p&gt;クラウドのインスタンスではデフォルトでスワップメモリが設定されていないため、念のため設定しておく必要がある。以下は&lt;code&gt;/swap.img&lt;/code&gt;として4GBのスワップファイルを設置する例。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sh -c &amp;#39;dd if=/dev/zero of=/swap.img count=4096 bs=1MiB &amp;amp;&amp;amp; chmod 600 /swap.img &amp;amp;&amp;amp; mkswap /swap.img &amp;amp;&amp;amp; swapon /swap.img&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;スワップのされやすさを&lt;code&gt;swappiness&lt;/code&gt;というパラメータで0~100の数値で指定する。値が大きいほどスワップされやすくなる。デフォルトで60となっているが、これを10に変更（スワップされにくくする）するには&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl vm.swappiness&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;確認&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/sys/vm/swappiness
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再起動時に自動で有効化するには&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#39;/swap.img none swap sw 0 0&amp;#39;&lt;/span&gt; | sudo tee -a /etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#39;vm.swappiness=10&amp;#39;&lt;/span&gt; | sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="タイムゾーンの設定"&gt;タイムゾーンの設定&lt;/h3&gt;
&lt;p&gt;デフォルトのタイムゾーンがUTCなのでJSTに設定しておく。
RHEL系（RHEL7以降）、Ubuntuでは&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo timedatectl set-timezone Asia/Tokyo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="selinuxの無効化"&gt;SELinuxの無効化&lt;/h3&gt;
&lt;p&gt;SELinuxが有効になっていると不都合なことが多いので、有効な場合は無効化する。
SELinuxが有効かどうかの確認&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;getenforce
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Enforcing&lt;/code&gt;だと有効になっている。
一時的に無効化する場合&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo setenforce &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;永続的に無効化する場合は&lt;/p&gt;</description></item><item><title>格安に使えるGCEのプリエンプティブインスタンスの勝手に停止対策</title><link>https://www.marketechlabo.com/server-infrastructure/gce-preemptible-instance/</link><pubDate>Thu, 13 Jun 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/gce-preemptible-instance/</guid><description>
&lt;p&gt;格安で使えるGCEのSpot VM（旧プリエンプティブインスタンス）。問答無用でシャットダウンされるというクセが困りものだが、使いようによってはハイスペックのインスタンスを安く効果的に使うことができる。ここではそのシャットダウン対策と最大限活用するためのヒントを紹介する。
機械学習用途ではVertex AI TrainingやGKE Autopilotなどマネージドサービスが充実しており、GCE直接利用は減少傾向にあるが、GPU/TPUを利用した機械学習ワークロードでコストを抑えたい場合などにSpot VMは有効である。&lt;/p&gt;
&lt;h2 id="spot-vm旧プリエンプティブインスタンスとは"&gt;Spot VM（旧プリエンプティブインスタンス）とは&lt;/h2&gt;
&lt;p&gt;Google Compute EngineのSpot VMは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最大24時間の制限は撤廃されているが、勝手に停止される（停止することをプリエンプト＝preemptするという）&lt;/li&gt;
&lt;li&gt;安い（同スペックの通常インスタンスの半額以下、1/3程度）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という特徴がある。ミッションクリティカルな用途には向かないが、何よりも安いのでCPUやメモリを大量に使う機械学習の処理をするには向いている。ただし停止された場合には最初からやり直しとなる。処理をプリエンプトされないうちに終わらせるのがいい（GCEの余剰リソースを使うインスタンスであるため、CPUを数多く使うほどプリエンプトされやすくはなる）&lt;/p&gt;
&lt;h2 id="インスタンスがプリエンプトされたときに通知"&gt;インスタンスがプリエンプトされたときに通知&lt;/h2&gt;
&lt;p&gt;インスタンスがプリエンプト状態になると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1分後に強制停止される&lt;/li&gt;
&lt;li&gt;シャットダウンスクリプトが実行される&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり停止1分前にスクリプトを実行できる。1分間の間に終了処理を入れることができる。
猶予は1分しかないので、大きなファイル（学習結果のスナップショットなど）の保存などはできない。
停止したことを通知し、必要に応じてインスタンスを再起動して再学習開始するなど、何らかの対応をできるようにするのがいいだろう。
ここではSlackに通知する方法を紹介する。&lt;/p&gt;
&lt;h3 id="slackにメッセージ送信"&gt;Slackにメッセージ送信&lt;/h3&gt;
&lt;p&gt;シャットダウンスクリプトで&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;preempted&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -Ss http://metadata.google.internal/computeMetadata/v1/instance/preempted -H &lt;span style="color:#e6db74"&gt;&amp;#34;Metadata-Flavor: Google&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$preempted&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;TRUE&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; project_id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -Ss http://169.254.169.254/computeMetadata/v1/project/project-id -H &lt;span style="color:#e6db74"&gt;&amp;#34;Metadata-Flavor: Google&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; instance_name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -Ss http://169.254.169.254/computeMetadata/v1/instance/name -H &lt;span style="color:#e6db74"&gt;&amp;#34;Metadata-Flavor: Google&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timestamp&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +&lt;span style="color:#e6db74"&gt;&amp;#39;%Y-%m-%d %H:%M:%S&amp;#39;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cat &lt;span style="color:#e6db74"&gt;&amp;lt;&amp;lt;EOF | curl -Ss -X POST &amp;#34;https://hooks.slack.com/services/xxxxxxxx/yyyyyyyyyyy/zzzzzzzzzzzzzzzzzzzz&amp;#34; -d @- -o /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;payload={&amp;#34;username&amp;#34;: &amp;#34;system monitor&amp;#34;, &amp;#34;text&amp;#34;: &amp;#34;$project_id / $instance_name is being preempted (${timestamp})&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="なるべく無停止状態で起動させておく"&gt;なるべく無停止状態で起動させておく&lt;/h2&gt;
&lt;p&gt;プロセスがストップされるのは仕方ないが、サーバ自体は常時（に近く）稼働させておきたいケース。
&lt;code&gt;gcloud compute instances start&lt;/code&gt;コマンドを使うとインスタンスを起動できるが、すでに起動している場合は無視される。そこで
他のとりあえずgcloudコマンドだけ実行できればいいマシン&lt;/p&gt;</description></item><item><title>Googleクラウドで格安お手軽スケーラブルな静的ウェブ配信</title><link>https://www.marketechlabo.com/server-infrastructure/gcp-static-web-publishing/</link><pubDate>Tue, 15 Oct 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/gcp-static-web-publishing/</guid><description>
&lt;p&gt;Google Cloud Platformの静的コンテンツ配信機能は低コストで手軽に使うことができる。サーバサイドプログラム（PHPなど）のかかわらない静的ウェブサイトの配信（HTML＋CSS＋JavaScript＋画像＋動画など）だけであれば、ApacheやNginxなどのウェブサーバなど不要でできてしまう。スケーラブルでトラフィックによるサーバ負荷を気にする必要がない低コストの環境が簡単に使える。WordPressでも静的配信をしているのであれば相性がいい。キャンペーンのランディングページなどもこれで十分なケースがほとんどである。
この記事ではGoogle Cloud Storageを使った簡単な方法と、少し高度にはなるが独自ドメインのHTTPSにも対応したFirebase Hostingを使った方法を紹介する。&lt;/p&gt;
&lt;h2 id="google-cloud-storageを使う方法"&gt;Google Cloud Storageを使う方法&lt;/h2&gt;
&lt;p&gt;簡単ではあるが、独自ドメインを使ったHTTPSでのウェブ配信ができない。HTTPSを使うのであればGoogleの決められたドメインを使うか、独自ドメインを使うならHTTPのみになる。&lt;/p&gt;
&lt;h3 id="ドメインの設定"&gt;ドメインの設定&lt;/h3&gt;
&lt;h4 id="ドメインのオーナーであることを認証"&gt;ドメインのオーナーであることを認証&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://cloud.google.com/storage/docs/domain-name-verification?hl=ja"&gt;https://cloud.google.com/storage/docs/domain-name-verification?hl=ja&lt;/a&gt;
GCSユーザの権限でサーチコンソールで新規にサイトを登録して認証することになる（すでに他のユーザでサーチコンソール登録していてもそれとは無関係にできる）
&lt;a href="https://www.google.com/webmasters/verification/details?hl=en&amp;amp;domain=[YOUR-DOMAIN.COM]"&gt;https://www.google.com/webmasters/verification/details?hl=en&amp;domain=[YOUR-DOMAIN.COM]&lt;/a&gt;
DNSで親ドメインのTXTレコードに入れる文字列を取得&lt;/p&gt;
&lt;h4 id="dnsの設定"&gt;DNSの設定&lt;/h4&gt;
&lt;p&gt;親ドメインのTXTレコードとして上で取得した文字列を、ホスティングするサブドメインのCNAMEレコードとして「c.storage.googleapis.com.」を登録&lt;/p&gt;
&lt;h3 id="google-cloud-storageの設定"&gt;Google Cloud Storageの設定&lt;/h3&gt;
&lt;h4 id="gcsのバケットの設定"&gt;GCSのバケットの設定&lt;/h4&gt;
&lt;p&gt;バケットの作成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil mb -c STANDARD -l asia-northeast1 gs://www.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;デフォルトの権限の設定（一般公開）&lt;/p&gt;
&lt;p&gt;均一なバケットレベルアクセスが標準のため、IAMで&lt;code&gt;allUsers&lt;/code&gt;に&lt;code&gt;objectViewer&lt;/code&gt;ロールを付与する。&lt;code&gt;gsutil defacl set public-read&lt;/code&gt;は非推奨。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil iam ch allUsers:objectViewer gs://www.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ウェブサイトの設定（インデックスページとエラーページの指定）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil web set -m index.html -e error.html gs://www.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイルのデプロイ&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil -m cp -rZ * gs://www.example.com/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイルの削除&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil -m rm -rf gs://www.example.com/*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="ログ出力の設定"&gt;ログ出力の設定&lt;/h4&gt;
&lt;p&gt;ログ用のバケットを作成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil mb gs://log-www-example-com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Googleにログ書き込み権限を付与&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gsutil acl ch -g cloud-storage-analytics@google.com:W gs://log-www-example-com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;パブリックアクセスできないように権限設定&lt;/p&gt;</description></item></channel></rss>