昨日からGoogle Cloud Next Tokyo 2018が開催されていますね。私は残念ながら家庭の事情により基調講演のみの参加となりました。
聴きたいセッションがたくさんあってかなり前からセッションの予約をしていたのに非常に残念です。後日動画がアップされることを祈るばかりです。
GCEイメージ *1 をプロジェクト間で共有する方法を紹介します。
どこかに同じような記事があるかもしれませんが気にしない。
想定例
Aプロジェクトから BプロジェクトにあるGCEイメージを使いたいとします。
- 取得先: Aプロジェクト
- 取得元: Bプロジェクト
IAMの設定変更
他プロジェクトのイメージを取得する権限をIAMで付与する必要があります。
取得元のプロジェクト(Bプロジェクト)のIAM画面を開きます。ユーザがない人は追加ボタンからユーザを追加しておきます。
ユーザの権限編集で「Compute Engine」->「Compute イメージ ユーザー」を選択します。
VMインスタンスの作成など
VMインスタンスを作成する際に、ブートディスクの選択で「カスタムイメージ」-> 「イメージの取得元」からイメージを保有しているプロジェクト(Bプロジェクト)をプルダウンから選ぶとイメージが出てきますのでそれを選択します(モザイクばかりですいません。。。)。
マネージドインスタンスグループ
マネージドインスタンスグループから他プロジェクトのイメージでVMインスタンスを起動しようとすると次のようなエラーがでます。
これはGoogle APIサービスアカウントがイメージ取得元(Bプロジェクト)にあるGCEイメージに対して取得権限がないためです。
Instance 'hogehoge' creation failed: Required 'compute.images.useReadOnly' permission for 'projects/project-b/global/images/xxxxxxxxxxxxx' (when acting as 'xxxxxxxxxxxxx@cloudservices.gserviceaccount.com')
先ほどのIAM画面に戻り、今度はGoogle APIサービスアカウントに対して権限付与します。
ユーザ追加画面で取得先のサービスアカウントを入力します。
サービスアカウントは [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
となります。[PROJECT_NUMBER]
はプロジェクト一覧画面から確認できます。
権限は先ほどと同じように「Compute Engine」->「Compute イメージ ユーザー」を選択します。
*1:AWSのAMIに相当