Google CloudRunのアカウント作成からデプロイまでご紹介

# はじめに
今回はGoogle CloudのサーバーレスサービスであるGoogle CloudRunについて学びます。

Google CloudRunは、Google Cloudが提供するサーバーレスのコンテナ実行環境です。これにより、開発者はインフラストラクチャの管理を気にせずに、コードをデプロイし実行できます。この記事では、CloudRunの基本的な概念と機能を理解し、簡単な「Hello World」アプリをデプロイする方法を紹介します。対象読者は、CloudRunやサーバーレスコンピューティングに初めて触れる方です。

### Google Cloud アカウント作成手順
1\. ブラウザで https://cloud.google.com にアクセスします。ブラウザで https://cloud.google.com にアクセスします。
2\. 右上の「無料で開始」または「コンソールに移動」をクリックします。
3\. Googleアカウントでサインインします。Googleアカウントをお持ちでない場合は、新規作成してください。
4\. 国と組織の種類、支払い情報を入力します。
5\. 利用規約に同意し、「続行」をクリックします。
6\. アカウントのセットアップが完了したら、Google Cloud Consoleにリダイレクトされます。

### gcloudコマンドラインツールのインストール
#### Windows用
1\. https://cloud.google.com/sdk/docs/install にアクセスします。1\. https://cloud.google.com/sdk/docs/install にアクセスします。
2\. 「Windows」タブを選択し、インストーラーをダウンロードします。
3\. ダウンロードしたインストーラー（GoogleCloudSDKInstaller.exe）を実行します。ダウンロードしたインストーラー（GoogleCloudSDKInstaller.exe）を実行します。インストールウィザードの指示に従って進みます。
4\. 「Cloud SDK のインストール先を選択してください」で適切なディレクトリを選択します。コンポーネントの選択画面では、デフォルトのままで問題ありません。
5\. インストールが完了したら、「完了」をクリックします。

#### macOS/Linux用

1\. ターミナルを開き、以下のコマンドを実行してインストールスクリプトをダウンロードします。
```
Copycurl -O https://dl.google.com/dl/cloudsdk/channels/rapid/install_google_cloud_sdk.bash

```


2\. ダウンロードしたスクリプトを実行します。
```
Copybash install_google_cloud_sdk.bash
```

3\. プロンプトに従って、インストール先ディレクトリを選択します（デフォルトでよい場合はEnterキーを押します）。インストールが完了したら、ターミナルを再起動するか、以下のコマンドでシェルを更新します。
```
Copysource ~/.bashrc
``````
または
```
Copysource ~/.zshrc
```
### gcloudの初期化
1\. コマンドプロンプト（Windows）またはターミナル（macOS/Linux）を開き、以下のコマンドを実行してgcloudを初期化します。
```
gcloud init
```
2\. プロンプトに従って、Googleアカウントにログインし、プロジェクトを選択します。
3\. インストールが成功したことを確認するため、以下のコマンドを実行します。
```
gcloud versiongcloudバージョン
```
このコマンドがgcloudのバージョン情報を表示すれば、インストールは成功しています。

### 必要なコンポーネントのインストール
以下のコマンドで必要なコンポーネントをインストールできます。
```
gcloud components install kubectl
```

### ステップ1：プロジェクトの作成
1\. Google Cloud Consoleにログインし、左上の「プロジェクトを選択」をクリック。
2\. 「新しいプロジェクト」をクリックし、プロジェクト名を cloudrun-hello-world-project に設定して「作成」をクリック。
※必要に応じて、組織や場所を設定します（通常はデフォルトのままで問題ありません）。
3\.  作成したプロジェクトがリストに表示されるので、作成したプロジェクトを選択。
4\. 左側のナビゲーションメニューから「APIとサービス」→「ダッシュボード」を選択、「APIとサービスを有効化」をクリック。
5\. 「Cloud Run API」を検索し、クリックして有効にする。


### ステップ2：ローカル環境のセットアップ
1\. 任意のディレクトリに移動して、新しいディレクトリを作成し、その中にプロジェクトを構築。
```
mkdir cloudrun-hello-world
cd cloudrun-hello-world
```
※任意でPython仮想環境の設定。
プロジェクト固有の依存関係を隔離できるよう、Pythonの仮想環境を作成し、有効化することをお勧めします。
```
python -m venv venv
source venv/bin/activate  # Windowsの場合は `venv\Scripts\activate`
```
### ステップ3：「Hello World」アプリケーションの作成

1\. 作成したディレクトリに app.py ファイルを作成し、以下のコードを追加。
```php:app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
```

2\. requirements.txt ファイルを作成し、Flaskを依存関係として追加。
```php:requirements.txt
Flask==2.0.1フラスコ==2.0.1
Werkzeug==2.0.1
```
3\. 必要なパッケージをインストール。
```
pip install -r requirements.txt
```
4\. Dockerfileの作成4\.Dockerfileの作成4\.Dockerfileの作成4\.Dockerfileの作成
プロジェクトディレクトリに Dockerfile を作成し、以下の内容を追加。
```php:Dockerfile
# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.10-slim

# Set the working directory to /app
WORKDIR /appWORKDIR /アプリ

# Copy the current directory contents into the container at /app# 現在のディレクトリの内容を /app のコンテナにコピーします
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 8080 available to the world outside this container
EXPOSE 8080

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]
```
ここまでで作成したファイルは以下。
* app.py
* Dockerfile
* requirements.txt

ここまでで、アプリケーションがローカル環境で準備できたので、次はこのアプリケーションをコンテナイメージとしてビルドし、Google Container Registryにプッシュしてから、Cloud Runにデプロイします。

### ステップ3：コンテナイメージのビルドとプッシュ
1\. コンソールでご自身のプロジェクトID（$PROJECT_ID）を確認し、プロジェクトを設定します。
```
gcloud config set project $PROJECT_ID
```
2\. コンテナイメージをビルドし、Google Container Registryにプッシュする。
```
gcloud builds submit --tag gcr.io/$PROJECT_ID/hello-world
```
### ステップ4：Cloud Runサービスのデプロイ
1\. サービスエージェントがコンテナイメージにアクセスできるように権限を付与。
```
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')

# デフォルトサービスアカウントに権限を付与
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

# Cloud Runサービスエージェントに権限を付与
SERVICE_ACCOUNT="service-$PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/storage.objectViewer"
```
2\. 正しいイメージURLを使用してCloud Runサービスをデプロイ。
```
gcloud run deploy hello-world-service \
  --image gcr.io/$PROJECT_ID/hello-world \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated
```

3\. デプロイ後、CloudRunはURLを提供するので、そのURLをブラウザで開く。「Hello World!」と表示されることを確認します。

## さいごに
以上でデプロイ完了です。今回は、Google CloudRunの基本的な概念と機能を紹介し、簡単な「Hello World」アプリをデプロイする方法を解説しました。