AWSからGoogle Cloudのサービスを操作する
はじめに
マルチクラウドへの第一歩としてAWS環境からGoogle Cloud環境を操作する方法を示します。他にも様々な方法で実現できますが、本記事ではWorkload Identityを用いてGoogle Cloud環境を操作することを可能にしています。
Workload Identity
Workload Identityはサービスアカウントキーを使用せずに、Google Cloudリソースへのアクセス権をGoogle Cloud以外のワークロードに付与できるサービスです。今回はWorkload Identity連携を使用することで、AWSアカウントを指定して、AWSのIAMプリンシパルがGoogle Cloudのサービスアカウントの権限を借用することを許可します。
参考:
権限借用の流れは以下のイメージです。
画像引用元:
システム構成図
今回は以下の記事を参考にAWSサービスを新たに追加して少し複雑なアーキテクチャを構築してみます。
参考:
参考記事ではLambda関数のテストでLambda関数を実行させ、S3バケットからGCSにファイルをコピーするようにしています。今回は、Lambda関数の前にAPI Gatewayを置いて、アーキテクチャによりマルチクラウドなアプリケーションっぽくしてみます。
構築
はじめに
本手順は上記参考記事の構築が全て完了していることを前提としています。
GCS名、S3バケット名、コピーしたいファイルは構築するときに合わせて変えて下さい。今回は以下AWSのロゴをコピーしてみます。
AWS側の構築
今回新たに追加したAPI Gatewayを作成します。
API GatewayのサービスコンソールからREST APIを構築します。
API名は何でもよいです。
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バケットを見てみると、ファイルがコピーされていることが確認できます。
処理順序をざっくりまとめると以下のとおりです。
- API Gatewayで入力したリクエストをLambda関数に投げる
- 1.で得たリクエストを使ってLambda関数が実行される
- AWS環境内のS3バケットからコピー対象のファイルを取得する
- Lambda関数がGoogle Cloudにアクセスするため、Workload Identityを通してGoogle Cloudへのアクセス権限を借用する
- Google Cloudの指定したGCSにファイルをアップロードする
上記4.の中で、上のWorkload Identityのサービス紹介で記載した権限借用の流れが行われています。
今回はコンソール上でテストしましたが、APIをデプロイして以下の記事を参考にターミナルからのcurl
コマンドでも大丈夫です。
参考:
おわりに
今回は参考記事を基により実用的なマルチクラウドアーキテクチャとしてAPI GatewayからLambda関数を通してGCSを操作する方法を説明しました。
本検証はまだ簡単なものなので、より実務的なアーキテクチャとなるようによりよい方法を考えて行きたいと思います。
Discussion