Cloud SpannerのエミュレータにDBツールでローカルから接続する(DBeaver)

はじめに

  1. Cloud Spanner使いたいけれどお高いので、なるべく使いたくない。
  2. そんな時はローカルに立てたエミュレータでOKじゃない?
  3. SpannerってCLIじゃないと接続できないの?
  4. DBeaverで接続できるらしい
  5. DBeaverだとエミュレータに接続できてないっぽい?  👈いまここ  

ということでDBeaverからCloud Spannerのエミュレータに接続したいと思います。

事前準備

Cloud SDK をインストール

gcloud の更新

gcloud components update
エミュレータの起動
gcloud emulators spanner start

Executing: docker run -p 127.0.0.1:9010:9010 -p 127.0.0.1:9020:9020 gcr.io/cloud-spanner-emulator/emulator:1.2.0
[cloud-spanner-emulator] Unable to find image 'gcr.io/cloud-spanner-emulator/emulator:1.2.0' locally
[cloud-spanner-emulator] 1.2.0: Pulling from cloud-spanner-emulator/emulator
・・・
[cloud-spanner-emulator] Status: Downloaded newer image for gcr.io/cloud-spanner-emulator/emulator:1.2.0
[cloud-spanner-emulator] 2021/08/18 11:27:52 gateway.go:140: Cloud Spanner emulator running.
[cloud-spanner-emulator] 2021/08/18 11:27:52 gateway.go:141: REST server listening at 0.0.0.0:9020
[cloud-spanner-emulator] 2021/08/18 11:27:52 gateway.go:142: gRPC server listening at 0.0.0.0:9010

# これで起動完了

DBeaverのインストール

割愛

接続タイプの選択

Cloud Spannerを選択 f:id:katutoki:20210818201513p:plain

接続情報の設定

プロジェクト、インスタンス、データベースをそれぞれ設定
例)test-project、test-instance、test-database
private keyは未設定でOK
f:id:katutoki:20210818201754p:plain

ドライバの設定

[ドライバのプロパティ]タブを開く
初回はドライバのインストールが必要なのでダウンロード

f:id:katutoki:20210818202019p:plain

終わると下記の画面になるので、[ドライバのプロパティ]の[autoConfigEmulator]の値をtrueに変更 f:id:katutoki:20210818202203p:plain

テスト接続してエラーが出なければOK f:id:katutoki:20210818203007p:plain


参考サイト

Cloud Spanner エミュレータの使用  |  Google Cloud

Use DBeaver with Cloud Spanner and Cloud Spanner Emulator | Google Cloud - Community


おまけ

テーブル作成

SQLエディタを開く
インスタンス名右クリック>SQLエディタ>SQLエディタ

f:id:katutoki:20210818204155p:plain

・作成するCREATE文を入力して実行 f:id:katutoki:20210818204403p:plain

・自動的には画面に表示されないので、作成したスキーマを選択してF5
 ※スキーマ名右クリックで[更新]でも可 f:id:katutoki:20210818204546p:plain

無事作成できています。

おまけ2

・gcloudでエミュレータを参照したい場合は以下のコマンドを実行します。

エミュレータの構成を作成して有効にする

gcloud config configurations create emulator
  gcloud config set auth/disable_credentials true
  gcloud config set project your-project-id
  gcloud config set api_endpoint_overrides/spanner http://localhost:9020/

・構成の確認

gcloud config configurations list               
NAME      IS_ACTIVE  ACCOUNT                  PROJECT          COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
default   False      アカウント  プロジェクト名      asia-northeast1-b     asia-northeast1
emulator  True                                your-project-id

emulatorの[IS_ACTIVE]がTrueになっているのでemulator側の構成が有効になっているのがわかります。

インスタンスの作成

gcloud spanner instances create test-instance2 `
--config=emulator-config --description="Test Instance" --nodes=1

test-instance2が作られ、接続もできます。 f:id:katutoki:20210818205348p:plain

エミュレータとデフォルトの設定切り替え

gcloud config configurations activate [emulator | default]

Cloud SQLにDBツールでローカルから接続する(A5:SQL Mk-2)

はじめに

Cloud SQLにローカルからA5:SQL Mk-2(DBツール)で接続する方法を紹介します。
今回はツールとしてA5:SQL Mk-2を選択していますが、他のツールでも問題ありません。

基本的に下記の公式ドキュメントを元に進めれば問題なく接続できると思います。 外部アプリケーションから Cloud SQL に接続する  |  Cloud SQL for MySQL  |  Google Cloud

環境

Windows10

事前準備

1. API を有効化する

Cloud SQL Admin API を有効にします。

2. ローカルマシンにプロキシ クライアントをインストールする

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe?hl=ja インストールというよりはexeファイルをダウンロードするだけのようです。

Windows64ビットのタブを開いてexeのリンクをクリックし保存します。

cloud_sql_proxy.exeとして、以下に保存しました。(保存場所は任意)
C:/Users/<ユーザ名>/.gcp/cloud_sql_proxy.exe

3 サービス アカウントを作成する

3-1 Google Cloud Console の [サービス アカウント] ページに移動します。

[サービス アカウント] ページに移動

3-2 Cloud SQL インスタンスを含むプロジェクトを選択します。
3-3 [サービス アカウントを作成] をクリックします。
3-4 [サービス アカウントの作成] ダイアログで、わかりやすいサービス アカウント名を指定します。

ここでは CloudSqlAccessとします。 f:id:katutoki:20210814003620p:plain

3-5 [役割] で、次のいずれかの役割を選択します。
  • [Cloud SQL] > [Cloud SQL クライアント]
  • [Cloud SQL] > [Cloud SQL 編集者]
  • [Cloud SQL] > [Cloud SQL 管理者]

ここでは権限が最低限の[Cloud SQL クライアント]を選択

f:id:katutoki:20210814005342p:plain

※これらの役割が表示されない場合、Google Cloud ユーザーに resourcemanager.projects.setIamPolicy 権限がない可能性があります。
権限を確認するには、Google Cloud Console の IAM ページにアクセスし、自分のユーザー ID を検索します。

3-6 サービスアカウントの作成

上記の設定で作成します。

3-7 [新しい秘密鍵の提供] をクリックし、キーのタイプが JSON であることを確認します。

作成したらサービスアカウントの一覧から作成したサービスアカウントをクリック
[鍵の追加]をクリック
[新しい鍵の作成]をクリック
f:id:katutoki:20210813235738p:plain

3-8 [作成] をクリックします。

f:id:katutoki:20210814000018p:plain 秘密鍵ファイルがマシンにダウンロードされます。
秘密鍵ファイルは、別の場所に移動できます。
安全な場所に鍵ファイルを保管してください。-

プロキシクライアントと同じ場所に保存しました。 C:/Users/<ユーザ名>/.gcp/cloudSqlAccess.json

4 プロキシの起動

以下のコマンドでプロキシを起動します。
ここでは、

C:/Users/<ユーザ名>/.gcp/cloud_sql_proxy.exe -instances=<インスタンス接続名>=tcp:13306 -credential_file=C:/Users/<ユーザ名>/.gcp/cloudSqlAccess.json

5 DBツールで接続情報の設定

5-1 [データベースの追加と削除]をクリック

f:id:katutoki:20210814001651p:plain

5-2 [追加]をクリック

5-3 [MySQL/MariaDB(直接接続)]をクリック

f:id:katutoki:20210814002540p:plain

5-4 接続情報を設定

  • ホスト名: 127.0.0.1 (ローカルループバックアドレス
  • ポート番号: 13306 (先ほどプロキシ起動で指定したポート)
  • ユーザID: Cloud SQLで作成したユーザ名
  • パスワード: Cloud SQLで作成したユーザのパスワード
  • データベース: Cloud SQLで作成したDB名

5-5 [テスト接続]をクリック

成功したらOK

GitHub ActionでCI環境やってみる

はじめに

今更ながらGitHub ActionでのCI環境作ってみる。

そもそも一から作ったことがないので、
改めて公式みながらやってみましょう。

初めに行っておくと今回は基本的な動作のみで、CI構築まで至らず。
CI構築は次の機会に。

公式が結構充実していて、クイックスタートやガイドを読み進めると基本的なパターンはわかりそうです。
ここで書いた内容もほぼ公式の抜粋となっております。

準備

  1. リポジトリを用意する。(新規でも既存のでもOK)

  2. ブランチ作っておきます。作業は作ったブランチで行います。
    github-action-demoとでもしておきます。
    ※後の手順でプルリクを作り、そこでGitHub Actionが動作するのを見たいので以降はブランチで作業します。

ワークフローの作成

クイックスタートをベースにしています。
クイックスタートではGitHub上で直接ファイルやディレクトリを作成していますが、
ここではローカルでブランチを切ってファイルを作成していくイメージとしています。
VSCodeでの入力補完など効かせたかったので上記としています。

GitHub Actions のクイックスタート - GitHub Docs

  1. リポジトリ直下にgithub/workflows ディレクトリを作成します。
  2. github-actions-demo.ymlというファイル名のYAMLファイルを作成します。
  3. YAMLの中身はまるっとコピペ
  4. YAMLファイルを保存して、コミット&プッシュします。
  5. プルリク作成します。
  6. Actionが動作します。

YAMLファイル

name: GitHub Actions Demo
on: [push]
jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v2
      - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."

クイックスタートのアクションはほぼechoでテキストを出力しているだけですが、
githubコンテキスト情報を使っていたり、
usesでソースをチェックアウトしてたり参考になります。

GitHub Actionsのワークフロー構文

name

ワークフローの名前。 GitHubでは、リポジトリのアクションページにワークフローの名前が表示されます。
nameを省略すると、GitHubリポジトリのルートに対するワークフローファイルの相対パスをその値に設定します。

on

必須。
ワークフローをトリガーするGitHubイベントの名前。
指定できるのは、1つのイベントstring、複数イベントのarray、イベントtypesのarrayです。
あるいは、ワークフローをスケジュールする、またはワークフロー実行を特定のファイルやタグ、ブランチ変更に限定するイベント設定mapも指定できます。
使用可能なイベントの一覧は、「ワークフローをトリガーするイベント」を参照

permissions

# 権限の指定(未指定の場合はnone)
permissions:
  actions: read|write|none
  checks: read|write|none
  contents: read|write|none
  deployments: read|write|none
  issues: read|write|none
  packages: read|write|none
  pull-requests: read|write|none
  repository-projects: read|write|none
  security-events: read|write|none
  statuses: read|write|none
# 読み込み権限
permissions: read-all
# 書き込み権限
permissions: write-all

env

環境変数のmap。
ワークフロー中のすべてのジョブのステップから利用できる。

env:
  SERVER: production

default

デフォルト設定のmap。
ワークフロー中のすべてのジョブに適用されます。

defaults:
  run:
    shell: bash
    working-directory: scripts

concurrency:

まだベータ版のようですが、並行処理の設定が可能
デフォルトでは、ジョブは並行して実行されます。

jobs

ワークフローの実行処理
1つ以上のジョブが必要
デフォルトでは並行して実行されるが、順序を制御したい場合はneedsキーワードを使用する。

jobs:
  my_first_job:
    name: My first job
  my_second_job:
    name: My second job

needs

jobs:
  job1:
  # job1の終了後に実行
  job2:
    needs: job1
  # job1とjobb2の終了後に実行
  job3:
    needs: [job1, job2]

※途中のジョブが失敗した場合、そのジョブを必要としている他のジョブはすべてスキップされます。

runs-on

ジョブが実行されるマシンの種類
GitHubホストランナーあるいはセルフホストランナー

runs-on: ubuntu-latest

environment

GitHub上で設定できるenvironmentの指定
environmentの名前を指定することでenvironment内の環境変数をすべて設定可能

jobs:
  stale:
    runs-on: ubuntu-latest

    permissions:
      issues: write
      pull-requests: write

    environment: staging_environment

    steps:
      - uses: actions/stale@v3

steps

ジョブの中の1実行単位

name

GitHubで表示されるステップの名前。

uses

実行されるアクションを選択します。

run

OSのシェルを使用してコマンドラインプログラムを実行します。

matrix

単一のジョブ設定を元に複数のジョブを実行する。
複数バージョンの言語や複数のOSなど

runs-on: ${{ matrix.os }}
strategy:
  matrix:
    os: [ubuntu-18.04, ubuntu-20.04]
    node: [10, 12, 14]
steps:
  - uses: actions/setup-node@v2
    with:
      node-version: ${{ matrix.node }}

container

ジョブ実行時のコンテナ設定

各ワークフロー構文の詳細

詳細は下記参照ですが、割と使いそうなものだけピックアップ
GitHub Actionsのワークフロー構文 - GitHub Docs

onの詳細

単一のイベントの例

# リポジトリ内の任意のブランチにコードがプッシュされたときにトリガーされる
on: push

複数イベントの例

# プッシュもしくはPull Requestイベントでワークフローをトリガーする
on: [push, pull_request]

複数イベントで異なるアクティビティを指定する例

on:
  # プッシュもしくはPull Requestでワークフローをトリガーする
  # ただしメインブランチの場合のみ
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  # page_buildとリリース作成イベントでもトリガーする
  page_build:
  release:
    types: # この設定は上記のpage_buildイベントには影響しない
      - created

詳細
ワークフローをトリガーするイベント - GitHub Docs

ホストランナー

GitHubホストランナー

オペレーティングシステム、プリインストールされたパッケージとツール、セルフホストランナーアプリケーションの自動アップデートを受信します。
GitHubによって管理及びメンテナンスされます。
ジョブの実行のたびにクリーンなインスタンスを提供します。
GitHubプランの無料の分を使います。無料の分を超えると、分単位のレートが適用されます。

セルフホストランナー

セルフホストランナーアプリケーションのみ、自動アップデートを受信します。
オペレーティングシステムとその他のソフトウェアのアップデートはあなたがしなければなりません。
すでに支払いをしているクラウドサービスあるいはローカルマシンを利用できます。
利用するハードウェア、オペレーティングシステム、ソフトウェア、セキュリティ上の要求に合わせてカスタマイズできます。
ジョブの実行のたびにクリーンなインスタンスを保持する必要がありません。
GitHub Actionsと合わせて無料で利用できますが、ランナーマシンのメンテナンスコストはあなたが受け持ちます。

さいごに

ベース部分はなんとなく理解したので、
引き続きCIの導入と個人的にやりたいプルリクの自動作成を導入します。

色々ためしたリポジトリ GitHub - KaT0819/github-action-test

WindowsにGoをインストールしようとしてハマった

はじめに

久しぶりのGo案件なので、改めてインストールしなおしたら動かなくなった。

結論としては環境変数でGOROOTを設定して解決しました。

環境

  • Windows10
  • Go 1.16.5

インストール

公式からインストーラをダウンロードしてインストール
https://golang.org/doc/install

f:id:katutoki:20210613104512p:plain 次へ

f:id:katutoki:20210613104512p:plain 次へ

f:id:katutoki:20210613104533p:plain 次へ

Programing Filesで良くなったみたいですね。
昔はCドライブ直下でしたよね。
f:id:katutoki:20210613104550p:plain

f:id:katutoki:20210613104705p:plain

インストール完了 f:id:katutoki:20210613104751p:plain

確認

C:\>go version
go: cannot find GOROOT directory: ~\go

おぉぅ。
GOROOTがおかしいみたい。
デフォルトでユーザディレクトリ配下を見てしまっているようです。

GOROOT設定しない方がいいと色々な記事には書いているみたいなのですが、
複数バージョン入れているような場合には設定するようなこともないようなので、
GOROOTを設定してみます。

f:id:katutoki:20210613110634p:plain

C:\>go version
go version go1.16.5 windows/amd64

無事確認ができました。

おまけ

コマンドで環境変数設定

コマンドプロンプト

SET GOROOT=C:\Program Files\Go

これだと、コマンドプロンプトを閉じると設定が戻ってしまいます。
永続的に設定をするためには、下記のコマンド実行

SETX GOROOT "C:\Program Files\Go"

上記はユーザ環境変数に対して設定されます。
システム環境変数に設定したい場合はパラメータで「/M」を指定

SETX /M GOROOT "C:\Program Files\Go"

Powershell

$ENV:GOROOT="C:\Program Files\Go"

コマンドプロンプトのSETと同様こちらも設定が戻ってしまいます。

永続的に設定するには以下

[System.Environment]::SetEnvironmentVariable("GOROOT", "C:\Program Files\Go", "User")

ちょっと長すぎて覚えられないですね。

SETXがPowershellでも使えました。書き方はコマンドプロンプトと同じなのでこちらの方がお手軽です。

SETX /M GOROOT "C:\Program Files\Go"

SETも試してみましたが何も起きず。
エラーにもならないので、設定されていると勘違いしそうな罠です。

追記

上記の設定でVSCodeを開くと拡張機能のGoのTool類のインストールが失敗してしまいました。
VSCode内では~\goを見ようとしているみたいです。
システム環境変数に設定を変えてみたり、VSCodeの設定にgoroot、gopathを設定してみましたが、結果変わらず。
ひとまず、1つづつgo getを自前で実行することでインストールは出来ましたが、
根本解決は引き続き。

AWS Amplifyのinitでs3:SetBucketEncryption Access Deniedエラー

結論

AWS Amplifyを試してみようと思い、セットアップを行っていたところエラーが発生。

ポリシーでs3:PutEncryptionConfigurationを追加してあげればOK

エラー発生まで

Amplify CLIのインストール

npm install -g @aws-amplify/cli

Amplify 初期化

amplify configure

# アカウントのログイン
Sign in to your AWS administrator account:
Press Enter to continue

# リージョンの選択(ap-northeast-1を選択)
Specify the AWS Region
? region:  ap-northeast-1

# IAM ユーザの作成(名前はデフォルトのまま)
Specify the username of the new IAM user:
? user name:  amplify-5lBeT

# コンソールの操作
# ポリシーをAdministratorAccessからAdministratorAccess-Amplifyに変更(セキュリティ面を考慮)
# 他はデフォルトのままIAMユーザを作成

# ターミナルに戻り
# 作成したIAMのAccessKeyとSecretAccessKeyを入力
Enter the access key of the newly created user:
? accessKeyId:  ********************
? secretAccessKey:  ****************************************

# プロファイル名の指定(任意 credentialsに書き込まれる)
This would update/create the AWS Profile in your local machine
? Profile Name:  amplify-sample
amplify init
# プロジェクト名の指定
Note: It is recommended to run this command from the root of your app directory
? Enter a name for the project amplifyproject

The following configuration will be applied:

Project information
| Name: awsamplifysample
| Default editor: Visual Studio Code
| App type: javascript
| Javascript framework: none
| Source Directory Path: src
| Distribution Directory Path: dist
| Build Command: npm.cmd run-script build
| Start Command: npm.cmd run-script start

# デフォルトのまま
? Initialize the project with the above configuration? Yes
Using default provider  awscloudformation

# 作成したIAMのprofileがcredentialsに作成されているのでprofileを指定
Using default provider  awscloudformation
? Select the authentication method you want to use: AWS profile
For more information on AWS Profiles, see:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

# amplify configureで作成したprofile名を指定
? Please choose the profile you want to use amplify-sample
Adding backend environment dev to AWS Amplify Console app: dbnvauyxfn0p0
/ Initializing project in the cloud...

# cloudformationによるセットアップ

CREATE_IN_PROGRESS amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:31:53 GMT-0900 (GMT-09:00) User Initiated
CREATE_IN_PROGRESS UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:31:57 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00) Resource creation Initiated
/ Initializing project in the cloud...

CREATE_IN_PROGRESS   AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:31:59 GMT-0900 (GMT-09:00) Resource creation Initiated

CREATE_IN_PROGRESS   DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:31:59 GMT-0900 (GMT-09:00) Resource creation Initiated

CREATE_FAILED        DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:32:00 GMT-0900 (GMT-09:00) API: s3:SetBucketEncryption Access Denied

CREATE_FAILED        AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:32:01 GMT-0900 (GMT-09:00) Resource creation cancelled

CREATE_FAILED        UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:32:01 GMT-0900 (GMT-09:00) Resource creation cancelled

ROLLBACK_IN_PROGRESS amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:32:02 GMT-0900 (GMT-09:00) The following resource(s) failed to create: [AuthRole, DeploymentBucket, UnauthRole]. Rollback requested by user.
| Initializing project in the cloud...

DELETE_IN_PROGRESS AuthRole         AWS::IAM::Role  Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00) 
DELETE_IN_PROGRESS UnauthRole       AWS::IAM::Role  Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00)
DELETE_SKIPPED     DeploymentBucket AWS::S3::Bucket Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00)
| Initializing project in the cloud...

DELETE_COMPLETE   AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:32:23 GMT-0900 (GMT-09:00) 
DELETE_COMPLETE   UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:32:24 GMT-0900 (GMT-09:00) 
ROLLBACK_COMPLETE amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:32:25 GMT-0900 (GMT-09:00)
/ Initializing project in the cloud...
An error occurred when creating the CloudFormation stack
/ Initializing project in the cloud...

Following resources failed

対処

結果から察するに、s3:SetBucketEncryption Access Deniedエラーが発生しロールバックした雰囲気 AdministratorAccess-Amplify権限つけているのに、initも出来ないのかい! と思いつつも、権限エラーぽいので、 気を取り直しポリシー増やす。 が、SetBucketEncryptionという権限がない。

それっぽいような、s3:PutEncryptionConfiguration 権限を追加し再度init実行で無事正常終了となりました。

AWS Amplifyのinitでs3:SetBucketEncryption Access Deniedエラー

結論

AWS Amplifyを試してみようと思い、セットアップを行っていたところエラーが発生。

ポリシーでs3:PutEncryptionConfigurationを追加してあげればOK

エラー発生まで

Amplify CLIのインストール

npm install -g @aws-amplify/cli

Amplify 初期化

amplify configure

# アカウントのログイン
Sign in to your AWS administrator account:
Press Enter to continue

# リージョンの選択(ap-northeast-1を選択)
Specify the AWS Region
? region:  ap-northeast-1

# IAM ユーザの作成(名前はデフォルトのまま)
Specify the username of the new IAM user:
? user name:  amplify-5lBeT

# コンソールの操作
# ポリシーをAdministratorAccessからAdministratorAccess-Amplifyに変更(セキュリティ面を考慮)
# 他はデフォルトのままIAMユーザを作成

# ターミナルに戻り
# 作成したIAMのAccessKeyとSecretAccessKeyを入力
Enter the access key of the newly created user:
? accessKeyId:  ********************
? secretAccessKey:  ****************************************

# プロファイル名の指定(任意 credentialsに書き込まれる)
This would update/create the AWS Profile in your local machine
? Profile Name:  amplify-sample
amplify init
# プロジェクト名の指定
Note: It is recommended to run this command from the root of your app directory
? Enter a name for the project amplifyproject

The following configuration will be applied:

Project information
| Name: awsamplifysample
| Default editor: Visual Studio Code
| App type: javascript
| Javascript framework: none
| Source Directory Path: src
| Distribution Directory Path: dist
| Build Command: npm.cmd run-script build
| Start Command: npm.cmd run-script start

# デフォルトのまま
? Initialize the project with the above configuration? Yes
Using default provider  awscloudformation

# 作成したIAMのprofileがcredentialsに作成されているのでprofileを指定
Using default provider  awscloudformation
? Select the authentication method you want to use: AWS profile
For more information on AWS Profiles, see:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

# amplify configureで作成したprofile名を指定
? Please choose the profile you want to use amplify-sample
Adding backend environment dev to AWS Amplify Console app: dbnvauyxfn0p0
/ Initializing project in the cloud...

# cloudformationによるセットアップ

CREATE_IN_PROGRESS amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:31:53 GMT-0900 (GMT-09:00) User Initiated
CREATE_IN_PROGRESS UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:31:57 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00)
CREATE_IN_PROGRESS UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:31:58 GMT-0900 (GMT-09:00) Resource creation Initiated
/ Initializing project in the cloud...

CREATE_IN_PROGRESS   AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:31:59 GMT-0900 (GMT-09:00) Resource creation Initiated

CREATE_IN_PROGRESS   DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:31:59 GMT-0900 (GMT-09:00) Resource creation Initiated

CREATE_FAILED        DeploymentBucket                   AWS::S3::Bucket            Mon May 24 2021 02:32:00 GMT-0900 (GMT-09:00) API: s3:SetBucketEncryption Access Denied

CREATE_FAILED        AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:32:01 GMT-0900 (GMT-09:00) Resource creation cancelled

CREATE_FAILED        UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:32:01 GMT-0900 (GMT-09:00) Resource creation cancelled

ROLLBACK_IN_PROGRESS amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:32:02 GMT-0900 (GMT-09:00) The following resource(s) failed to create: [AuthRole, DeploymentBucket, UnauthRole]. Rollback requested by user.
| Initializing project in the cloud...

DELETE_IN_PROGRESS AuthRole         AWS::IAM::Role  Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00) 
DELETE_IN_PROGRESS UnauthRole       AWS::IAM::Role  Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00)
DELETE_SKIPPED     DeploymentBucket AWS::S3::Bucket Mon May 24 2021 02:32:22 GMT-0900 (GMT-09:00)
| Initializing project in the cloud...

DELETE_COMPLETE   AuthRole                           AWS::IAM::Role             Mon May 24 2021 02:32:23 GMT-0900 (GMT-09:00) 
DELETE_COMPLETE   UnauthRole                         AWS::IAM::Role             Mon May 24 2021 02:32:24 GMT-0900 (GMT-09:00) 
ROLLBACK_COMPLETE amplify-amplifyproject-dev-12345 AWS::CloudFormation::Stack Mon May 24 2021 02:32:25 GMT-0900 (GMT-09:00)
/ Initializing project in the cloud...
An error occurred when creating the CloudFormation stack
/ Initializing project in the cloud...

Following resources failed

対処

結果から察するに、s3:SetBucketEncryption Access Deniedエラーが発生しロールバックした雰囲気 AdministratorAccess-Amplify権限つけているのに、initも出来ないのかい! と思いつつも、権限エラーぽいので、 気を取り直しポリシー増やす。 が、SetBucketEncryptionという権限がない。

それっぽいような、s3:PutEncryptionConfiguration 権限を追加し再度init実行で無事正常終了となりました。

CloudStorageをGCEにマウントする。

基本的に下記のgitに記載されているが、ちょっと判りずらいので整理

github.com

https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/installing.md

事前準備

gcsfuseのインストール

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install gcsfuse

認証

アカウントにログイン
コマンドを実行後、入力を求められる。
コンソールに出力されたURLにアクセスし、
表示されたコードをコピーしてコンソールに貼り付ける

gcloud auth application-default login
gcloud auth login

マウント

マウント先のディレクトリを作成し、
gcsfuseでマウント
my-bucket:マウントするバケット

mkdir /path/to/mount/point
gcsfuse my-bucket /path/to/mount/point