GoogleAppEngineクイックスタート①

# 概要

* GAEを中心としたLAMPスタックを設定・確認できるまでの環境を作る
* 環境はStandard Edition PHP7.2の環境
* コンソール画面から作成が前提。コード化は考慮しない。

## 設定

* 新規プロジェクトを作成しておく
* Consoleからインスタンス作成

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/a71c2ec0-79bd-c775-7bd2-1c3b4d500082.png">

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/de8b16fd-ad80-178c-9a43-5b99ed39176e.png">

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/8a33cdaf-cb75-bf4f-1f23-6279e1b7199d.png">

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/73c10189-6a61-88c9-8b91-30cea68ce2bf.png">

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/153e699f-470d-9e8d-5fb3-6da466ca9f45.png">

## 確認

* デプロイをテストする
* app.yamlは最低限の記述
* まずは”default”サービスをデプロイ
* ソースコードのあるルートディレクトリにapp.yamlを配置

```
$ vi app.yaml
runtime: php72
service: default
```

```
$ gcloud app deploy --project=<project_name>
：
Do you want to continue (Y/n)?  Y
：
To view your application in the web browser run:
  $ gcloud app browse
```

* Consoleデプロイを確認する

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/9c6a0075-2d34-cefb-a31e-8ae04569f78d.png">

```
$ gcloud app browse
Did not detect your browser. Go to this link to view your app:
https://projectname-production.an.r.appspot.com
```
* まだ設定がないのでアクセスしてもエラーになる

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/9c78d326-42dc-e7cd-55e3-83b2ff8eba46.png">


* 遭遇しがちなエラー

アプリケーションの複数のサービスをデプロイして作成するには、その前に default サービスをデプロイして作成する必要がある。

```
ERROR: (gcloud.app.deploy) INVALID_ARGUMENT: The first service (module) you upload to a new application must be the 'default' service (module). Please upload a version of the 'default' service (module) before uploading a version for the 'production-service' service (module). See the documentation for more information. Python: (https://developers.google.com/appengine/docs/python/modules/#Python_Uploading%%20modules) Java: (https://developers.google.com/appengine/docs/java/modules/#Java_Uploading%%20modules)
```

# CloudSourceRepository
## 設定

* かんたんなソースコードを配置
* 前提としてCloudSourceRepositoryにサンプルソースコードがある状態
* [CloudSourceRepository](https://source.cloud.google.com/repos?hl=ja)
* リポジトリ追加を選択

<img width="30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/c475c4ce-8d3d-8b00-19be-7742b30f248f.png">

* 「新しいリポジトリを作成」を選択

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/47e84bd2-81b8-86d2-3aeb-e5a4b428eeaa.png">

* 「リポジトリ名」と「プロジェクト名」を入力

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/adc3063c-5ac7-1e69-cf06-ed44bbf75a13.png">

# CloudSDK

## 設定

* CloudSDK認証でローカルにClone
* この場合においてCloudSDK認証でローカルのMacにCloneする為、SSH認証する必要はない

```
$ gcloud source repos clone <repository_name> --project=<project_name>
```

* [公開鍵を登録](https://source.cloud.google.com/user/ssh_keys)


*　鍵を追加登録する場合はリポジトリ選択画面→「クローン」→「SSH認証」タブ→「GoogleCloudにSSH認証鍵を登録します」を選択

<img width="50%" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/be03c2c8-e151-bbfd-7652-116fc47228ba.png">

* 以下のように鍵が登録される

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/b279be49-02a7-45c0-0f93-cce3ba29789e.png">

```
$ gcloud source repos clone REPOSITORY_NAME [DIRECTORY_NAME] ---project=PROJECT_NAME

$ echo 'test' > README.md
$ git add README.md
$ git commit -m '最初のコミット'
$ git push
```

# IAM

## 設定

* CloudSourceRepositoryに対して権限を付与したい場合
* IAMから「IAM」→「追加」→任意のユーザのアドレスと任意の権限を選択

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/06834449-9c6b-43d6-bb7a-ce8e0e3dd00d.png">



# GAE

## 設定

* CloudShellを起動

```
$ gcloud source repos clone <repository_name>

# ソースコードディレクトリにapp.yamlを配置する（最小設定のみでテストする）
$ vim <project_dir>/app.yaml
runtime: php72
service: default

$ ls
app.yaml  index.php
```

## 確認

* デプロイが成功する事を確認

```
$ gcloud app deploy --project=<project_name>
$ gcloud app browse --project=<project_name>
```
* 出力されたURLにアクセス
* レスポンスが帰ってくる事を確認できたらひとまずOK

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/6e3280c5-d1d8-78d2-c5a2-cc2fb7b9b441.png">

# カスタムドメイン

* 以下を参考に任意のドメインネームでアクセスできるようにする

[GoogleDomainsでカスタムドメイン設定](https://qiita.com/ezaqiita/items/a383d6a06c01f5a947c6)

# CloudSQL

[GoogleAppEngineスタートメモ②へ](https://qiita.com/ezaqiita/private/7433e39912dbd05e9d1f)