[Terraform][google provider]Cloud Run Serviceメモ

# 前提
[ver5.36.0のv2 APIのリファレンスを元にしたもの](https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/cloud_run_v2_service)になります

# Resources
## google_cloud_run_v2_service
### 必須の引数
- name: service名
- location: リージョン
- template: このserviceのリビジョン作成時に使うテンプレート

#### template
指定が必須のものは(必須)付き
- revision: リビジョン名。指定されない場合はサービス名をベースとして自動生成
- labels: GCPの利用料金に関して、フィルタリングに使えるキーバリュー
- annotations: Kubernetesのアノテーションに相当するものらしい(よくわからなかっていない)
- scaling: このリビジョンのスケール設定。
    - min_instance_count: 最小インスタンス数
    - max_instance_count: 最大インスタンス数
- vpc_access: VPCアクセス設定
    - connector: VPCアクセスコネクタ名
    - egress: トラフィックVPC Egress設定: ALL_TRAFIC or PRIVATE_RANGES_ONLY
    - network_interfaces: ダイレクトVPC Egress設定
        - network: Cloud Runリソースがトラフィックを送信できるVPCネットワーク。network, subnetworkの少なくとも一方が指定されていなければならず、双方指定されている場合はサブネットはネットワークに所属していなければならない
        - subnetwork: Cloud RunリソースがIPを取得するサブネット。
        - tags: Cloud Run サービスに適用されるネットワークのタグ
- timeout: タイムアウトの最大許容時間(秒)
- service_acccount: リビジョンに紐づくサービスアカウントのメールアドレス。そのリビジョンのIDであり、リビジョンが持つ権限が決定される。デフォルトはGCPプロジェクトデフォルトのサービスアカウント。
- containers: サービスの実行単位を定義するコンテナを保持する。
    - name: DNS_LABEL として指定されるコンテナ名
    - image(必須): Artifacat Registry内のコンテナイメージのURL
    - command: エントリポイントの配列。シェル内で実行されない。指定されない場合、DockerイメージのENTRYPOINTが使用される。$(VAR_NAME)はコンテナの環境を使って展開される。 
    - args: エントリポイントに与える引数。指定されない場合、DockerイメージのCMDが使用される。$(VAR_NAME)はコンテナの環境を使って展開される。 
    - env: コンテナに設定する環境変数のリスト。
        - name(必須): 環境変数名。C言語の識別子のルールを満たさねばならず、32768文字までで指定。
        - value: 環境変数値。文字列で指定。
        - value_source: 環境変数の値のソース。
            - secret_key_ref: シークレットマネージャーからのシークレットと特定のバージョンを選択
                * secret: Secret Manager内のシークレットの名前
                - version: Secret Manager内のシークレットのバージョン。 'latest' or 特定バージョンの整数。
    - resources: コンテナのリソース要件
        - limits: CPUとメモリの上限を指定できる。お互いが必要とする最低要件([CPUから見た必要メモリ]( https://cloud.google.com/run/docs/configuring/cpu?hl=ja), [メモリから見た必要CPU]( https://cloud.google.com/run/docs/configuring/memory-limits?hl=ja))がある。
            - cpu: "1", "2", "4", "8"から指定できる 
            - memory: "xxxxMi"　や "xxxxGi" と指定する
        - cpu_idle: リクエスト時のみCPUを割り当てるかどうか true/false
        - startup_cpu_boost: コールドスタートのレイテンシを減らすためのCPUブーストをするかどうか true/false https://blog.g-gen.co.jp/entry/cloudrun-cpu-startup-boost
    - ports: コンテナから公開するポート。単一のポートのみ指定できる。省略時はPORT環境変数が使われる。全インターフェース(0.0.0.0)でリスンしていなければアクセスできない。
        - name: 使うプロトコルを指定できる "http1", "h2c" のみ指定できる
        - container_port: Cloud Run外部から、リビジョン内のコンテナへの転送先ポート(=エントリポイントでリスンすべきポート)を指定する。環境変数PORTに値がセットされる。1〜655355。
    - volume_mounts: コンテナのファイルシステムへマウントするボリューム
        - name: ボリューム名
        - mount_path: ボリュームをマウントするコンテナ内のパス。":"を含んではならない
    - working_dir: コンテナの作業ディレクトリ。指定されない場合、コンテナランタイムのデフォルト値となる。コンテナイメージの設定が使われるかもしれない。
    - liveness_probe: [ライブネスプローブ](https://cloud.google.com/run/docs/configuring/healthchecks?hl=ja)の設定。コンテナのヘルスチェックする。死んでいる場合は、コンテナが再起動される。
        - initial_delay_seconds: コンテナが起動してから、ヘルスチェックを始めるまでの秒数。0〜3600までを指定可能。
        - timeout_seconds: ヘルスチェックのタイムアウト秒数。1〜3600までを指定可能。period_seconds 以下の値でないとダメ
        - period_seconds: ヘルスチェックの実行頻度。1〜3600までを指定可能。 timeout_seconds 以上の値でないとダメ。
        - failure_threshold: ヘルスチェック失敗判定のしきい値。連続でx回失敗したら失敗という形。最小値1。
        - http_get: 実行するHTTPリクエスト
            - path: パス
            - port: ポート番号
            - http_headers: リクエストヘッダ
                - name(必須): ヘッダフィールド名
                - value: ヘッダフィールド値
        - grpc: 実行するgRPCリクエスト
            - port: ポート番号
            - service: gRPC HealthCheckRequestに配置するサービス名
        - tcp_socket: ソケットをオープンするアクションを記述する
            - port(必須): ポート番号 
    - startup_probe: [起動プローブ](https://cloud.google.com/run/docs/configuring/healthchecks?hl=ja)の設定
        - initial_delay_seconds: コンテナが起動してから、ヘルスチェックを始めるまでの秒数。0〜240までを指定可能。
        - timeout_seconds: ヘルスチェックのタイムアウト秒数。1〜3600までを指定可能。period_seconds 以下の値でないとダメ
        - period_seconds: ヘルスチェックの実行頻度。1〜3600までを指定可能。 timeout_seconds 以上の値でないとダメ。
        - failure_threshold: ヘルスチェック失敗判定のしきい値。連続でx回失敗したら失敗という形。最小値1。
        - http_get: 実行するHTTPリクエスト
            - path: パス
            - port: ポート番号
            - http_headers: リクエストヘッダ
                - name(必須): ヘッダフィールド名
                - value: ヘッダフィールド値
        - grpc: 実行するgRPCリクエスト
            - port: ポート番号
            - service: gRPC HealthCheckRequestに配置するサービス名
        - tcp_socket: ソケットをオープンするアクションを記述する
            - port(必須): ポート番号 
    - depends_on: このコンテナの前に起動すべきコンテナ群。それらがヘルスチェックOKになるまで起動を待つ。
- volumes: コンテナで利用できるようにするボリュームのリスト
    - name(必須): ボリューム名
    - secret: このボリュームに入るべきシークレット？
        - secret(必須): Secret Manager内のシークレット名。 
        - default_mode: 作成されたファイルに設定されるパーミッション 0000 〜 0777 (8進数)を指定。デフォは0444
        - items: 
    - cloud_sql_instance: Cloud SQL ボリュームのためにマウントされるべきインスタンスを指定する
    - empty_dir: 共有ボリュームとして使用されるエフェメラルストレージ
        - medium: サポートされるメディアの種類。MEMORYのみ指定可能
        - size_limit: サイズ
    - gcs: Cloud Storage FUSE を使用してボリュームとしてマウントするGCSバケット。
        - bucket(必須): GCSバケット名
        - read_only: true/false
    - nfs: NFSマウント
        - server(必須): ホスト名 or IPアドレス
        - path(必須): NFSサーバーによってエクスポートされるパス
        - read_only: true/false 
- execution_environment: このリビジョンを公開するサンドボックス環境。EXECUTION_ENVIRONMENT_GEN1 or EXECUTION_ENVIRONMENT_GEN2。
- encryption_key: Cloud Runへデプロイされたコンテナイメージ(デプロイ前のArtifact Registry上のイメージとは別の話)の暗号化に使用するCMEKへの参照。
- max_instance_request_concurency: それぞれのインスタンスが受け取ることができるリクエストの最大数を設定
- session_affinity: セッションアフィニティ(同じクライアントからのリクエストを同じコンテナインスタンスへ転送する機能)を有効化するか

---

### 任意の引数
- description: 説明
- labels: GCPの利用料金に関して、フィルタリングに使えるキーバリュー
- annotations: よくわからなかった
- client: よくわからなかった
- client_version: よくわからなかった
- ingress: この service の ネットワーク(内向き)のアクセス制限設定。リビジョンがアクティブでない場合、terraformのoutputは、INGRESS_TRAFFIC_UNSPECIFIED を返す。
               設定可能な値は、
  - INGRESS_TRAFFIC_ALL: すべて
  - INGRESS_TRAFFIC_INTERNAL_ONLY: 内部
  - INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER: 内部と外部アプリケーションロードバランサ
- launch_stage: よくわからなかった
- binary_authorization: よくわからなかった
- custom_audiences: よくわからなかった
- traffic: リビジョンにトラフィックを分配する方法を指定
    - type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST or TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION
    - revision: typeがTRAFFIC_TARGET_ALLOCATION_TYPE_REVISIONのときにトラフィックの一部を送信するリビジョン
    - percent: revisionで指定したリビジョンのトラフィックを送信するパーセンテージ。デフォルトは0
    - tag: このリビジョンへ直接アクセスするためのURIの一部となる文字列
- project: Cloud Run serviceリソースが属するプロジェクトID

**参考**

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service

---

## google_cloud_run_v2_service_iam
### 前提

https://qiita.com/WisteriaWave/items/17e7058991f606397ded


### 必須の引数

* name: IAMポリシーをバインドするCloud Run servicesのサービス名 (ドキュメントでは`service`という引数名になっていたが、`terraform apply`するとそんなパラメータはないとエラーが発生する。誤りの模様)
* member/members: ロールで権限を付与されるID。それぞれのエントリには、以下の値のいずれかを指定する。
* role: 適用するロール
* policy_data(policyのときのみ必須): google_iam_policy データソースによって生成されたポリシーデータ。

#### member/members
- `allUsers`: IDインターネット上の全てのユーザーを表す特別な識別子
- `allAuthenticatedUsers`: Googleアカウント, サービスアカウントで認証された全てのユーザーを表す特別な識別子
- `user:<emailid>`: 特定のGoogleアカウントを表すメールアドレス。例. "user:alice@gmail.com"
- `serviceAccount:<emailid>`: 特定のGoogleアカウントを表すメールアドレス。例. "my-other-app@appspot.gserviceaccount.com"
- `group:<emailid>`: Googleグループを表すメールアドレス。例. `group:admins@example.com`
- `domain:<domain>`: そのドメインの全てのユーザーを表すG Suiteドメイン(エイリアスじゃダメ)。例. `example.com`
- `projectOwner:<projectId>`: プロジェクトのオーナー。 例. `projectOwner:my-example-project`
- `projectEditor:<projectId>`: プロジェクトのエディター。 例. `projectEditor:my-example-project`
- `projectViewer:<projectId>`: プロジェクトのビューワー。 例. `projectViewer:my-example-project`

---

### 任意の引数
- location: Cloud Run servicesのリージョン
- project: Cloud Run servicesのプロジェクト

**参考**

https://qiita.com/WisteriaWave/items/17e7058991f606397ded