🐤

AWSからGoogle Cloudのサービスを操作する

2024/03/31に公開

はじめに

マルチクラウドへの第一歩としてAWS環境からGoogle Cloud環境を操作する方法を示します。他にも様々な方法で実現できますが、本記事ではWorkload Identityを用いてGoogle Cloud環境を操作することを可能にしています。

Workload Identity

Workload Identityはサービスアカウントキーを使用せずに、Google Cloudリソースへのアクセス権をGoogle Cloud以外のワークロードに付与できるサービスです。今回はWorkload Identity連携を使用することで、AWSアカウントを指定して、AWSのIAMプリンシパルがGoogle Cloudのサービスアカウントの権限を借用することを許可します。

参考:
https://cloud.google.com/iam/docs/workload-identity-federation?hl=ja

権限借用の流れは以下のイメージです。
Workload Identityイメージ図
画像引用元:
https://www.youtube.com/watch?v=4vajaXzHN08

システム構成図

今回は以下の記事を参考にAWSサービスを新たに追加して少し複雑なアーキテクチャを構築してみます。
参考:
https://blog.g-gen.co.jp/entry/aws-lambda-to-cloud-storage

参考記事ではLambda関数のテストでLambda関数を実行させ、S3バケットからGCSにファイルをコピーするようにしています。今回は、Lambda関数の前にAPI Gatewayを置いて、アーキテクチャによりマルチクラウドなアプリケーションっぽくしてみます。
システム構成図

構築

はじめに

本手順は上記参考記事の構築が全て完了していることを前提としています。
GCS名、S3バケット名、コピーしたいファイルは構築するときに合わせて変えて下さい。今回は以下AWSのロゴをコピーしてみます。
コピー対象

AWS側の構築

今回新たに追加したAPI Gatewayを作成します。
API GatewayのサービスコンソールからREST APIを構築します。
API名は何でもよいです。
API Gatewayの構築

REST API構築後、POSTメソッドを作成します。
左のペインから「リソース」を選択し、右の詳細画面にある「メソッドを作成」から作成します。
以下に記載モノ以外のパラメータはデフォルトで構いません。

パラメータ
メソッドタイプ POST
統合タイプ Lambda関数
Lambda関数 test-lambda (参考記事の手順で作成したLambda関数を選択)

Google Cloud側の構築

参考記事以外の構築は特に発生しません。

検証

API Gatewayのサービスコンソールでテストタブを選択します。
サービスコンソール

画面を下にスクロールし、リクエスト本文と書いてある欄にバケット名やファイル名などをJSON形式で記入します。
リクエスト本文

※以下、実際に検証する際にご活用ください。

  "s3_bucket_name": "my-test-bucket",
  "s3_object_name": "aws.png",
  "gcs_bucket_name": "my-test-bucket"

記入した内容で問題なければ、画面下部の「テスト」をクリックします。
しばらく待った後、メソッドテストの結果が表示され問題なく実行されたことが分かります。
テスト結果

Google Cloud側でコピー先に指定していたGCSバケットを見てみると、ファイルがコピーされていることが確認できます。
GCS画面

処理順序をざっくりまとめると以下のとおりです。

  1. API Gatewayで入力したリクエストをLambda関数に投げる
  2. 1.で得たリクエストを使ってLambda関数が実行される
  3. AWS環境内のS3バケットからコピー対象のファイルを取得する
  4. Lambda関数がGoogle Cloudにアクセスするため、Workload Identityを通してGoogle Cloudへのアクセス権限を借用する
  5. Google Cloudの指定したGCSにファイルをアップロードする

上記4.の中で、上のWorkload Identityのサービス紹介で記載した権限借用の流れが行われています。
今回はコンソール上でテストしましたが、APIをデプロイして以下の記事を参考にターミナルからのcurlコマンドでも大丈夫です。

参考:
https://qiita.com/the_red/items/e5808f3ceda64bef73e4

おわりに

今回は参考記事を基により実用的なマルチクラウドアーキテクチャとしてAPI GatewayからLambda関数を通してGCSを操作する方法を説明しました。
本検証はまだ簡単なものなので、より実務的なアーキテクチャとなるようによりよい方法を考えて行きたいと思います。

Discussion