<?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://takagi.blog/tags/gcp/</link>
    <description>Recent content in GCP on 高木のブログ</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-jp</language>
    <lastBuildDate>Mon, 11 Oct 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://takagi.blog/tags/gcp/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>【Cloud Functions】Functions Framework for Rubyを試す（環境変数を扱う編）</title>
      <link>https://takagi.blog/try-environment-variables-functions-framework-ruby/</link>
      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/try-environment-variables-functions-framework-ruby/</guid>
      <description>&lt;p&gt;今回はCloud Functionsで環境変数を扱ってみる&lt;br&gt;
（パスワードなどの秘匿情報は&lt;a href=&#34;https://cloud.google.com/secret-manager&#34; target=&#34;_blank&#34;&gt;Secret Manager&lt;/a&gt;
を使うべし）&lt;/p&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順 &lt;a href=&#34;#%e6%89%8b%e9%a0%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;環境変数 FUNCTION_ENV の設定を試してみる&lt;/p&gt;
&lt;h3 id=&#34;コード&#34;&gt;コード &lt;a href=&#34;#%e3%82%b3%e3%83%bc%e3%83%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;http(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;env_vars&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FUNCTION_ENV: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#{&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ENV&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;FUNCTION_ENV&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;RubyではENVで環境変数を呼び出すことができる&lt;/p&gt;
&lt;h3 id=&#34;ローカルで実行&#34;&gt;ローカルで実行 &lt;a href=&#34;#%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e3%81%a7%e5%ae%9f%e8%a1%8c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ FUNCTION_ENV&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;development bundle exec functions-framework-ruby --target env_vars
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl http://localhost:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FUNCTION_ENV: development
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;デプロイ&#34;&gt;デプロイ &lt;a href=&#34;#%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;--set-env-vars&lt;/code&gt;で環境変数を設定することができる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy env_vars --runtime ruby27 --trigger-http --set-env-vars FUNCTION_ENV&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;production
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FUNCTION_ENV: production
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;補足&#34;&gt;補足 &lt;a href=&#34;#%e8%a3%9c%e8%b6%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;複数の環境変数を設定する&#34;&gt;複数の環境変数を設定する &lt;a href=&#34;#%e8%a4%87%e6%95%b0%e3%81%ae%e7%92%b0%e5%a2%83%e5%a4%89%e6%95%b0%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;http(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;env_vars&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ENV_VAR_A: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#{&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ENV&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ENV_VAR_A&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;, ENV_VAR_B: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#{&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ENV&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ENV_VAR_B&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&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=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy env_vars --set-env-vars ENV_VAR_A&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;foo,ENV_VAR_B&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;bar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ENV_VAR_A: foo, ENV_VAR_B: bar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;一部の環境変数を更新追加する&#34;&gt;一部の環境変数を更新・追加する &lt;a href=&#34;#%e4%b8%80%e9%83%a8%e3%81%ae%e7%92%b0%e5%a2%83%e5%a4%89%e6%95%b0%e3%82%92%e6%9b%b4%e6%96%b0%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;--update-env-vars&lt;/code&gt;で更新・追加ができる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy env_vars --update-env-vars ENV_VAR_B&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;baz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ENV_VAR_A: foo, ENV_VAR_B: baz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;--set-env-varsだと指定していない環境変数は消えてしまう&#34;&gt;&lt;code&gt;--set-env-vars&lt;/code&gt;だと指定していない環境変数は消えてしまう &lt;a href=&#34;#--set-env-vars%e3%81%a0%e3%81%a8%e6%8c%87%e5%ae%9a%e3%81%97%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e7%92%b0%e5%a2%83%e5%a4%89%e6%95%b0%e3%81%af%e6%b6%88%e3%81%88%e3%81%a6%e3%81%97%e3%81%be%e3%81%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;ENV_VAR_Bだけ指定した場合、ENV_VAR_Aは消えてしまうので注意&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy env_vars --set-env-vars ENV_VAR_B&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;baz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-masamune-287217.cloudfunctions.net/env_vars
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ENV_VAR_A: , ENV_VAR_B: baz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--update-env-vars&lt;/code&gt;は使わず、&lt;code&gt;--set-env-vars&lt;/code&gt;で必要な環境変数を全て記述してデプロイするのが無難なのかなと思う&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://cloud.google.com/functions/docs/configuring/env-var&#34; target=&#34;_blank&#34;&gt;環境変数の使用 | Google Cloud Functions に関するドキュメント&lt;/a&gt;
&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Cloud SQL Auth Proxyを使ってCloud SQLにローカルから接続する</title>
      <link>https://takagi.blog/using-the-cloud-sql-auth-proxy-to-connect-to-cloud-sql-from-local/</link>
      <pubDate>Fri, 24 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/using-the-cloud-sql-auth-proxy-to-connect-to-cloud-sql-from-local/</guid>
      <description>&lt;h2 id=&#34;環境前提条件&#34;&gt;環境（前提条件？） &lt;a href=&#34;#%e7%92%b0%e5%a2%83%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ローカル環境はCentOS 7を使用している&lt;/li&gt;
&lt;li&gt;Cloud SQLはMySQLのインスタンスを起動している&lt;/li&gt;
&lt;li&gt;認証周りは整っている（gcloudコマンドが使えている）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順 &lt;a href=&#34;#%e6%89%8b%e9%a0%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;cloud-sql-auth-proxyのインストール&#34;&gt;Cloud SQL Auth Proxyのインストール &lt;a href=&#34;#cloud-sql-auth-proxy%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O /usr/local/bin/cloud_sql_proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo chmod +x /usr/local/bin/cloud_sql_proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cloud_sql_proxy -version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cloud SQL Auth proxy: 1.25.0+linux.amd64
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これはCentOS 7の場合なので、他のOSは&lt;a href=&#34;https://cloud.google.com/sql/docs/mysql/sql-proxy?hl=ja#install&#34; target=&#34;_blank&#34;&gt;ここ&lt;/a&gt;
を参照&lt;/p&gt;
&lt;h3 id=&#34;cloud-sql-auth-proxyを起動&#34;&gt;Cloud SQL Auth Proxyを起動 &lt;a href=&#34;#cloud-sql-auth-proxy%e3%82%92%e8%b5%b7%e5%8b%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cloud_sql_proxy -instances&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;hogehoge-project:asia-northeast1:hogehoge-instance&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tcp:13306
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cloud_sql_proxy -instances=インスタンスの接続名=tcp:ポート番号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ポート番号は3306でも良いが、別で使っていたので13306にした&lt;/p&gt;
&lt;h4 id=&#34;インスタンスの接続名の確認方法&#34;&gt;インスタンスの接続名の確認方法 &lt;a href=&#34;#%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%81%ae%e6%8e%a5%e7%b6%9a%e5%90%8d%e3%81%ae%e7%a2%ba%e8%aa%8d%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;Cloud SQL の &lt;a href=&#34;https://console.cloud.google.com/sql/instances&#34; target=&#34;_blank&#34;&gt;[インスタンス] ページ&lt;/a&gt;
に移動&lt;/li&gt;
&lt;li&gt;インスタンス名をクリックして [概要] ページを開く&lt;/li&gt;
&lt;li&gt;[このインスタンスと接続] セクションで接続名をコピー（接続名のフォーマット: &lt;code&gt;projectID:region:instanceID&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;mysqlに接続&#34;&gt;MySQLに接続 &lt;a href=&#34;#mysql%e3%81%ab%e6%8e%a5%e7%b6%9a&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mysql -u root -h 127.0.0.1 -p -P &lt;span style=&#34;color:#ae81ff&#34;&gt;13306&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>【Cloud Functions】Functions Framework for Rubyを試す（GitHub Actionsからデプロイ編）</title>
      <link>https://takagi.blog/try-deploy-function-framework-from-github-actions/</link>
      <pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/try-deploy-function-framework-from-github-actions/</guid>
      <description>&lt;p&gt;前回書いた「&lt;a href=&#34;https://takagi.blog/try-deploy-functions-framework-ruby/&#34; target=&#34;_blank&#34;&gt;【Cloud Functions】Functions Framework for Rubyを試す（ローカルからデプロイ編）&lt;/a&gt;
」の続きで、今回はGitHub Actionsからデプロイしてみる&lt;/p&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順 &lt;a href=&#34;#%e6%89%8b%e9%a0%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;サービスアカウントの作成&#34;&gt;サービスアカウントの作成 &lt;a href=&#34;#%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e3%81%ae%e4%bd%9c%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下URLからサービスアカウント作成し、「Cloud Functions 開発者」のロールを付与する
&lt;a href=&#34;https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create&#34; target=&#34;_blank&#34;&gt;https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;サービスアカウントキーをダウンロードして、そのJSONをGitHub Secretsに「GCP_SA_KEY」というキー名で登録する&lt;/p&gt;
&lt;h3 id=&#34;ワークフローファイルの作成&#34;&gt;ワークフローファイルの作成 &lt;a href=&#34;#%e3%83%af%e3%83%bc%e3%82%af%e3%83%95%e3%83%ad%e3%83%bc%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e4%bd%9c%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir .github/workflows
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ vim .github/workflows/deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;mainブランチにプッシュもしくはマージされたらデプロイが走る設定&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml:title=.github/workflows/deploy.yml&#34; data-lang=&#34;yaml:title=.github/workflows/deploy.yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Deploy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;on&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;push&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;branches&lt;/span&gt;: [ &lt;span style=&#34;color:#ae81ff&#34;&gt;main ]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;jobs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;deploy&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;runs-on&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;ubuntu-latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;steps&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;actions/checkout@v2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;google-github-actions/deploy-cloud-functions@main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;with&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;credentials&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;${{ secrets.GCP_SA_KEY }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;hello&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;runtime&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;ruby27&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;動作確認&#34;&gt;動作確認 &lt;a href=&#34;#%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デプロイができているかわかるようにコードを書き換えておく&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-diff:title=app.rb&#34; data-lang=&#34;diff:title=app.rb&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;functions_framework&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;http(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world! (Deploy from GitHub Actions)&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;プッシュしたあと、ghコマンドで実行中のワークフローを確認する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git push
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gh run watch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Refreshing run status every &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; seconds. Press Ctrl+C to quit.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;✓ main Deploy · &lt;span style=&#34;color:#ae81ff&#34;&gt;1246588184&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Triggered via push about &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; hours ago
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JOBS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;✓ deploy in 1m6s &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ID 3640768767&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ Set up job
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ Run actions/checkout@v2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ Run google-github-actions/deploy-cloud-functions@main
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ Post Run actions/checkout@v2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ✓ Complete job
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;✓ Run Deploy &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1246588184&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; completed with &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;success&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;curlで叩いてデプロイができているか確認する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-masamune-287217.cloudfunctions.net/hello
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world! &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Deploy from GitHub Actions&lt;span style=&#34;color:#f92672&#34;&gt;)&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;h2 id=&#34;補足&#34;&gt;補足 &lt;a href=&#34;#%e8%a3%9c%e8%b6%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;iam権限エラー&#34;&gt;IAM権限エラー &lt;a href=&#34;#iam%e6%a8%a9%e9%99%90%e3%82%a8%e3%83%a9%e3%83%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1回目のデプロイでは問題なかったが、2回目でエラーが出るようになった&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Missing necessary permission iam.serviceAccounts.actAs &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;  on the service account PROJECT_ID@appspot.gserviceaccount.com. 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ensure that service account PROJECT_ID@appspot.gserviceaccount.com is a member of the project PROJECT_ID, and &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; grant  the roles/iam.serviceAccountUser role. 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;You can &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; that by running &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com --member=$member --role=roles/iam.serviceAccountUser&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;In &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; the member is a service account please use the prefix &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;serviceAccount:&amp;#39;&lt;/span&gt; instead of &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user:&amp;#39;&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;]&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=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    --member&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;serviceAccount:deploy-account@PROJECT_ID.iam.gserviceaccount.com&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    --role&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;roles/iam.serviceAccountUser
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;リポジトリ&#34;&gt;リポジトリ &lt;a href=&#34;#%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回やった内容のリポジトリ&lt;br&gt;
&lt;a href=&#34;https://github.com/ytkg/sample-functions-framework-ruby&#34; target=&#34;_blank&#34;&gt;https://github.com/ytkg/sample-functions-framework-ruby&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.shimar.me/2020/09/20/deploy-gcf-with-github-actions&#34; target=&#34;_blank&#34;&gt;Google Cloud FunctionsをGithub Actionsでデプロイする | shimar&amp;rsquo;s blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zenn.dev/himara2/articles/1fb5f955d15679&#34; target=&#34;_blank&#34;&gt;GitHub ActionsでCloud Functionsを自動デプロイする&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://qiita.com/gimKondo/items/0c367c093d5dc8694dc6&#34; target=&#34;_blank&#34;&gt;GitHub Actionsを使ってGCP Cloud Functionsをデプロイする(IAMエラーの解消方法) - Qiita&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>【Cloud Functions】Functions Framework for Rubyを試す（ローカルからデプロイ編）</title>
      <link>https://takagi.blog/try-deploy-functions-framework-ruby/</link>
      <pubDate>Thu, 16 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/try-deploy-functions-framework-ruby/</guid>
      <description>&lt;p&gt;前回書いた「&lt;a href=&#34;https://takagi.blog/try-functions-framework-ruby-at-local/&#34; target=&#34;_blank&#34;&gt;【Cloud Functions】Functions Framework for Rubyを試す（ローカル編）&lt;/a&gt;
」の続きで、今回はCloud Functionsにデプロイしてみる&lt;/p&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順 &lt;a href=&#34;#%e6%89%8b%e9%a0%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;cloud-functions-apiとcloud-build-apiを有効化&#34;&gt;Cloud Functions APIとCloud Build APIを有効化 &lt;a href=&#34;#cloud-functions-api%e3%81%a8cloud-build-api%e3%82%92%e6%9c%89%e5%8a%b9%e5%8c%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud services enable cloudfunctions.googleapis.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud services enable cloudbuild.googleapis.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;デプロイ&#34;&gt;デプロイ &lt;a href=&#34;#%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcloud functions deploy &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;関数の登録名&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; --entry-point &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;ソースコード内の関数またはクラスの名前&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; --runtime &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;使用するランタイムの名前&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;関数のトリガーの種類&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy hello_function --entry-point hello --runtime ruby27 --trigger-http
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Ruby 2.7&lt;/code&gt;のランタイムに &lt;code&gt;HTTP&lt;/code&gt; リクエストをトリガーする &lt;code&gt;hello&lt;/code&gt; 関数を &lt;code&gt;hello_function&lt;/code&gt; という登録名でデプロイする&lt;/p&gt;
&lt;h4 id=&#34;新しい関数を登録する場合は確認がある&#34;&gt;新しい関数を登録する場合は確認がある &lt;a href=&#34;#%e6%96%b0%e3%81%97%e3%81%84%e9%96%a2%e6%95%b0%e3%82%92%e7%99%bb%e9%8c%b2%e3%81%99%e3%82%8b%e5%a0%b4%e5%90%88%e3%81%af%e7%a2%ba%e8%aa%8d%e3%81%8c%e3%81%82%e3%82%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Allow unauthenticated invocations of new &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;hello_function&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;y/N&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;動作確認&#34;&gt;動作確認 &lt;a href=&#34;#%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-hogehoge-123456.cloudfunctions.net/hello_function
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;再デプロイ&#34;&gt;再デプロイ &lt;a href=&#34;#%e5%86%8d%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;コードを修正して再デプロイする場合、&lt;code&gt;--runtime&lt;/code&gt;と&lt;code&gt;--trigger-http&lt;/code&gt;は変更が無ければ省略できる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy hello_function --entry-point hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://us-central1-hogehoge-123456.cloudfunctions.net/hello_function
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world! &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Take 2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;補足&#34;&gt;補足 &lt;a href=&#34;#%e8%a3%9c%e8%b6%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;entry-pointは省略できる&#34;&gt;&amp;ndash;entry-pointは省略できる &lt;a href=&#34;#entry-point%e3%81%af%e7%9c%81%e7%95%a5%e3%81%a7%e3%81%8d%e3%82%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ソースコードの関数名と登録名を同じにする場合は省略できる&lt;br&gt;
むしろ、&amp;ndash;entry-pointは異なる時に使用する為のフラグかも&lt;/p&gt;
&lt;p&gt;例) ソースコードの関数名が &lt;code&gt;hello&lt;/code&gt; でそのまま関数の登録名にする&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy hello --runtime ruby27 --trigger-http
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これだと再デプロイはシンプルになる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud functions deploy hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://cloud.google.com/functions/docs/deploying/filesystem?hl=ja&#34; target=&#34;_blank&#34;&gt;ローカルマシンからのデプロイ  |  Google Cloud Functions に関するドキュメント&lt;/a&gt;
&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>【Cloud Functions】Functions Framework for Rubyを試す（ローカル編）</title>
      <link>https://takagi.blog/try-functions-framework-ruby-at-local/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/try-functions-framework-ruby-at-local/</guid>
      <description>&lt;p&gt;業務でCloud Functionsを触ることになったので予習をする&lt;/p&gt;
&lt;p&gt;Ruby用にフレームワーク（&lt;a href=&#34;https://github.com/GoogleCloudPlatform/functions-framework-ruby&#34; target=&#34;_blank&#34;&gt;Functions Framework for Ruby&lt;/a&gt;
）が用意されているのでそれを使う&lt;br&gt;
今回は&lt;a href=&#34;https://github.com/GoogleCloudPlatform/functions-framework-ruby#quickstart&#34; target=&#34;_blank&#34;&gt;README.md&lt;/a&gt;
に書いてあるQuickstartを試して、さらにテストコードも書いてみる&lt;/p&gt;
&lt;h2 id=&#34;quickstart&#34;&gt;Quickstart &lt;a href=&#34;#quickstart&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;必要なファイルを作成&#34;&gt;必要なファイルを作成 &lt;a href=&#34;#%e5%bf%85%e8%a6%81%e3%81%aa%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e4%bd%9c%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Gemfileとapp.rb&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-ruby:title=Gemfile&#34; data-lang=&#34;ruby:title=Gemfile&#34;&gt;source &amp;#34;https://rubygems.org&amp;#34;

gem &amp;#34;functions_framework&amp;#34;, &amp;#34;~&amp;gt; 1.0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby:title=app.rb&#34; data-lang=&#34;ruby:title=app.rb&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;functions_framework&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;http(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「Hello, world!」と返すhello関数&lt;/p&gt;
&lt;h3 id=&#34;サーバー起動&#34;&gt;サーバー起動 &lt;a href=&#34;#%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e8%b5%b7%e5%8b%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec functions-framework-ruby --target hello
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-19T02:55:33.358268 &lt;span style=&#34;color:#75715e&#34;&gt;#65163]  INFO -- : FunctionsFramework v1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-19T02:55:33.358312 &lt;span style=&#34;color:#75715e&#34;&gt;#65163]  INFO -- : FunctionsFramework: Loading functions from &amp;#34;./app.rb&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-19T02:55:33.358474 &lt;span style=&#34;color:#75715e&#34;&gt;#65163]  INFO -- : FunctionsFramework: Looking for function name &amp;#34;hello&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-19T02:55:33.358490 &lt;span style=&#34;color:#75715e&#34;&gt;#65163]  INFO -- : FunctionsFramework: Starting server...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-19T02:55:33.407831 &lt;span style=&#34;color:#75715e&#34;&gt;#65163]  INFO -- : FunctionsFramework: Serving function &amp;#34;hello&amp;#34; on port 8080...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;8080番ポートでhello関数のサーバーが立ち上がった&lt;/p&gt;
&lt;h3 id=&#34;リクエストを投げる&#34;&gt;リクエストを投げる &lt;a href=&#34;#%e3%83%aa%e3%82%af%e3%82%a8%e3%82%b9%e3%83%88%e3%82%92%e6%8a%95%e3%81%92%e3%82%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl http://localhost:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「Hello, world!」と返ってきた&lt;/p&gt;
&lt;h2 id=&#34;テスト&#34;&gt;テスト &lt;a href=&#34;#%e3%83%86%e3%82%b9%e3%83%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;テストはRSpecを使う&lt;br&gt;
ちゃんとテスト用のモジュール（FunctionsFramework::Testing）が用意されている&lt;/p&gt;
&lt;h3 id=&#34;rspec追加&#34;&gt;RSpec追加 &lt;a href=&#34;#rspec%e8%bf%bd%e5%8a%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-diff:title=Gemfile&#34; data-lang=&#34;diff:title=Gemfile&#34;&gt; source &amp;#34;https://rubygems.org&amp;#34;

 gem &amp;#34;functions_framework&amp;#34;, &amp;#34;~&amp;gt; 1.0&amp;#34;

+gem &amp;#34;rspec&amp;#34;, group: &amp;#34;test&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec rspec --init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;テストコード&#34;&gt;テストコード &lt;a href=&#34;#%e3%83%86%e3%82%b9%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ステータスコードが200で返ってくること&lt;/li&gt;
&lt;li&gt;文字列「Hello, world!\n」が返ってくること
をテストする&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby:title=spec/app_spec.rb&#34; data-lang=&#34;ruby:title=spec/app_spec.rb&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rspec&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;functions_framework/testing&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;describe &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello function&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Testing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  let(&lt;span style=&#34;color:#e6db74&#34;&gt;:response&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    load_temporary &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;app.rb&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      request &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; make_get_request &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://example.com:8080/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      call_http(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;, request)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  it &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;return status code 200&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    expect(response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;status)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;to eq &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  it &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;return hello message&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    expect(response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;body&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;to eq &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;テスト実行&#34;&gt;テスト実行 &lt;a href=&#34;#%e3%83%86%e3%82%b9%e3%83%88%e5%ae%9f%e8%a1%8c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec rspec
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;..
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Finished in 0.02075 seconds &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;files took 0.10026 seconds to load&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; examples, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; failures
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK&lt;/p&gt;
&lt;h2 id=&#34;オプション&#34;&gt;オプション &lt;a href=&#34;#%e3%82%aa%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;helpを見たらオプションがいくつかあったので、&lt;code&gt;SOURCE&lt;/code&gt;と&lt;code&gt;TARGET&lt;/code&gt;だけ追加で試す&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec functions-framework-ruby -h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Usage: functions-framework-ruby &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;options&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -t, --target TARGET              Set the name of the &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; to execute &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;defaults to &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -s, --source SOURCE              Set the source file to load &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;defaults to ./app.rb&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --signature-type TYPE        Asserts that the &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; has the given signature type. Supported values are &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http&amp;#39;&lt;/span&gt; and &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cloudevent&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -p, --port PORT                  Set the port to listen to &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;defaults to 8080&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -b, --bind BIND                  Set the address to bind to &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;defaults to 0.0.0.0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -e, --environment ENV            Set the Rack environment
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --min-threads NUM            Set the minimum threead pool size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --max-threads NUM            Set the maximum threead pool size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;no-&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;detailed-errors       Set whether to show error details
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --verify                     Verify the app only, but &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; not run the server.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -v, --verbose                    Increase log verbosity
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -q, --quiet                      Decrease log verbosity
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --version                    Display the framework version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --help                       Display help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;sourceオプション&#34;&gt;&lt;code&gt;SOURCE&lt;/code&gt;オプション &lt;a href=&#34;#source%e3%82%aa%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;起動するファイル名を指定する（デフォルトはapp.rb）&lt;/p&gt;
&lt;p&gt;ファイル名をhello.rbにしてみる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mv app.rb hello.rb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec functions-framework-ruby --target hello --source hello.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:40:47.222034 &lt;span style=&#34;color:#75715e&#34;&gt;#2693]  INFO -- : FunctionsFramework v1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:40:47.222080 &lt;span style=&#34;color:#75715e&#34;&gt;#2693]  INFO -- : FunctionsFramework: Loading functions from &amp;#34;hello.rb&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:40:47.222342 &lt;span style=&#34;color:#75715e&#34;&gt;#2693]  INFO -- : FunctionsFramework: Looking for function name &amp;#34;hello&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:40:47.222361 &lt;span style=&#34;color:#75715e&#34;&gt;#2693]  INFO -- : FunctionsFramework: Starting server...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:40:47.344302 &lt;span style=&#34;color:#75715e&#34;&gt;#2693]  INFO -- : FunctionsFramework: Serving function &amp;#34;hello&amp;#34; on port 8080...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl http://localhost:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cloud Functionをよくわかっていないけど、ファイル名を変更したい時ってどんな時なんだろ&lt;/p&gt;
&lt;h3 id=&#34;targetオプション&#34;&gt;&lt;code&gt;TARGET&lt;/code&gt;オプション &lt;a href=&#34;#target%e3%82%aa%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実行する関数名を指定する（デフォルトはfunction）&lt;/p&gt;
&lt;p&gt;デフォルトを試したいので、httpメソッドの引数を無くす&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby:title=app.rb&#34; data-lang=&#34;ruby:title=app.rb&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;functions_framework&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FunctionsFramework&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;http &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec functions-framework-ruby
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:43:32.529982 &lt;span style=&#34;color:#75715e&#34;&gt;#2770]  INFO -- : FunctionsFramework v1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:43:32.530042 &lt;span style=&#34;color:#75715e&#34;&gt;#2770]  INFO -- : FunctionsFramework: Loading functions from &amp;#34;./app.rb&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:43:32.530205 &lt;span style=&#34;color:#75715e&#34;&gt;#2770]  INFO -- : FunctionsFramework: Looking for function name &amp;#34;function&amp;#34;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:43:32.530225 &lt;span style=&#34;color:#75715e&#34;&gt;#2770]  INFO -- : FunctionsFramework: Starting server...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2021-08-31T23:43:32.580118 &lt;span style=&#34;color:#75715e&#34;&gt;#2770]  INFO -- : FunctionsFramework: Serving function &amp;#34;function&amp;#34; on port 8080...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl http://localhost:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;何もオプションを指定せずシンプルに起動できる&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://qiita.com/nerzie/items/edf95ee245adea5a3161&#34; target=&#34;_blank&#34;&gt;Cloud FunctionsのRubyがベータ公開されたので使ってみた - Qiita&lt;/a&gt;
&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>【GCP】Secret Managerを試す</title>
      <link>https://takagi.blog/try-gcp-secret-manager/</link>
      <pubDate>Thu, 26 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/try-gcp-secret-manager/</guid>
      <description>&lt;p&gt;GCPのサービス内でパスワードやAPIキーなどの機密情報を扱うなら必須の&lt;a href=&#34;https://cloud.google.com/secret-manager&#34; target=&#34;_blank&#34;&gt;Secret Manager&lt;/a&gt;
&lt;br&gt;
とりあえず最低限必要な機能を試してみた記録&lt;/p&gt;
&lt;h2 id=&#34;コマンドラインからシークレットの追加と取得と更新&#34;&gt;コマンドラインからシークレットの追加と取得と更新 &lt;a href=&#34;#%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3%e3%81%8b%e3%82%89%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e8%bf%bd%e5%8a%a0%e3%81%a8%e5%8f%96%e5%be%97%e3%81%a8%e6%9b%b4%e6%96%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;secret-manager-apiを有効化&#34;&gt;Secret Manager APIを有効化 &lt;a href=&#34;#secret-manager-api%e3%82%92%e6%9c%89%e5%8a%b9%e5%8c%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud services enable secretmanager.googleapis.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;シークレットの追加&#34;&gt;シークレットの追加 &lt;a href=&#34;#%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e8%bf%bd%e5%8a%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;secret-sample&lt;/code&gt;という名前で、値は&lt;code&gt;P@ssw0rd&lt;/code&gt;を追加する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;P@ssw0rd&amp;#34;&lt;/span&gt; | gcloud secrets create secret-sample --data-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Created version &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; of the secret &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;secret-sample&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;シークレットの取得&#34;&gt;シークレットの取得 &lt;a href=&#34;#%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e5%8f%96%e5%be%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud secrets versions access latest --secret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;secret-sample&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;P@ssw0rd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;シークレットの更新バージョンの追加&#34;&gt;シークレットの更新（バージョンの追加） &lt;a href=&#34;#%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e6%9b%b4%e6%96%b0%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e8%bf%bd%e5%8a%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;シークレットの更新は、バージョンを追加する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p@SSw0RD&amp;#34;&lt;/span&gt; | gcloud secrets versions add secret-sample --data-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Created version &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; of the secret &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;secret-sample&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud secrets versions access latest --secret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;secret-sample&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;p@SSw0RD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;過去バージョンのシークレットの取得&#34;&gt;過去バージョンのシークレットの取得 &lt;a href=&#34;#%e9%81%8e%e5%8e%bb%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e5%8f%96%e5%be%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;latest&lt;/code&gt;の部分を取得したいバージョンに変更（例では&lt;code&gt;1&lt;/code&gt;）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud secrets versions access &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; --secret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;secret-sample&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;P@ssw0rd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rubyのコードからシークレットの取得&#34;&gt;Rubyのコードからシークレットの取得 &lt;a href=&#34;#ruby%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%8b%e3%82%89%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e5%8f%96%e5%be%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際に使うのはCloud Functionsだったりのアプリケーション内なので、Rubyのコードからシークレットの取得を試す&lt;/p&gt;
&lt;h3 id=&#34;サービスアカウントの作成&#34;&gt;サービスアカウントの作成 &lt;a href=&#34;#%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e3%81%ae%e4%bd%9c%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下URLからサービスアカウント作成し、「Secret Manager のシークレット アクセサー」のロールを付与する
&lt;a href=&#34;https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create&#34; target=&#34;_blank&#34;&gt;https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;サービスアカウントキーをダウンロードして、そのパスを環境変数にセットする&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ export GOOGLE_APPLICATION_CREDENTIALS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/path/to/service-account-file.json&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;rubyのコードを作成&#34;&gt;Rubyのコードを作成 &lt;a href=&#34;#ruby%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e4%bd%9c%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-ruby:title=Gemfile&#34; data-lang=&#34;ruby:title=Gemfile&#34;&gt;source &amp;#34;https://rubygems.org&amp;#34;

gem &amp;#34;google-cloud-secret_manager&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby:title=app.rb&#34; data-lang=&#34;ruby:title=app.rb&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;google/cloud/secret_manager&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;client &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Google&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Cloud&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SecretManager&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;secret_manager_service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;secret_version_path(&lt;span style=&#34;color:#e6db74&#34;&gt;project&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;project-id&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  &lt;span style=&#34;color:#e6db74&#34;&gt;secret&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;secret-sample&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  &lt;span style=&#34;color:#e6db74&#34;&gt;secret_version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;latest&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;access_secret_version(name: name)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;payload&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;実行して確認&#34;&gt;実行して確認 &lt;a href=&#34;#%e5%ae%9f%e8%a1%8c%e3%81%97%e3%81%a6%e7%a2%ba%e8%aa%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec ruby app.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;p@SSw0RD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後に追加した値が取れている&lt;/p&gt;
&lt;h4 id=&#34;過去バージョンのシークレットの取得-1&#34;&gt;過去バージョンのシークレットの取得 &lt;a href=&#34;#%e9%81%8e%e5%8e%bb%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%81%ae%e5%8f%96%e5%be%97-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;もちろんバージョンを指定してあげたら過去の値も取得できる&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;secret_version_path(&lt;span style=&#34;color:#e6db74&#34;&gt;project&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;project-id&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  &lt;span style=&#34;color:#e6db74&#34;&gt;secret&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;secret-sample&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  &lt;span style=&#34;color:#e6db74&#34;&gt;secret_version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bundle exec ruby app.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;P@ssw0rd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://qiita.com/toshi0607/items/fc2f106bbcd2d5ff3c7c&#34; target=&#34;_blank&#34;&gt;gcloudコマンドで試すGCP Secret Manager - Qiita&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zenn.dev/nananaoto/articles/43e3414fdb1da37b377e&#34; target=&#34;_blank&#34;&gt;【GCP】Secret Manageを触ってみた&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://swfz.hatenablog.com/entry/2020/12/03/075129&#34; target=&#34;_blank&#34;&gt;GCPのSecret Managerを使ってみる - notebook&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>【Mac】gcloudコマンドのインストール</title>
      <link>https://takagi.blog/how-to-install-gcloud-command-on-mac/</link>
      <pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://takagi.blog/how-to-install-gcloud-command-on-mac/</guid>
      <description>&lt;p&gt;GCPも触っておかないといけないので、とりあえずgcloudコマンドを使える状態にしておく。&lt;/p&gt;
&lt;h2 id=&#34;インストール方法&#34;&gt;インストール方法 &lt;a href=&#34;#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;インストール&#34;&gt;インストール &lt;a href=&#34;#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://sdk.cloud.google.com | bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;対話形式で質問に答えていけばあっという間にインストールできる。&lt;/p&gt;
&lt;h3 id=&#34;シェルの再起動&#34;&gt;シェルの再起動 &lt;a href=&#34;#%e3%82%b7%e3%82%a7%e3%83%ab%e3%81%ae%e5%86%8d%e8%b5%b7%e5%8b%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ exec -l $SHELL
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;確認&#34;&gt;確認 &lt;a href=&#34;#%e7%a2%ba%e8%aa%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud -v
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Google Cloud SDK 319.0.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bq 2.0.62
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;core 2020.11.13
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gsutil 4.55
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;環境の初期化&#34;&gt;環境の初期化 &lt;a href=&#34;#%e7%92%b0%e5%a2%83%e3%81%ae%e5%88%9d%e6%9c%9f%e5%8c%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcloud init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ブラウザが開くので認証などを済ませる。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考 &lt;a href=&#34;#%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://cloud.google.com/sdk/docs/downloads-interactive?hl=ja&#34; target=&#34;_blank&#34;&gt;Google Cloud SDK インストーラの使用  |  Cloud SDK のドキュメント&lt;/a&gt;
&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
