Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

AWS CloudFormationでGoogle Kubernetes Engineクラスタを起動する

By Aviv LauferDec 5, 20192 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

1 qgjmd4zcbov9rnu 7qukfa

「二人が合意しなければ、共に歩めるだろうか」 [アモス書3:3]

先週、AmazonがAWS CloudFormationでのサードパーティリソース対応を発表しました

1 qgjmd4zcbov9rnu 7qukfa

DoiT Internationalでは、AWSとGoogle Cloudの両方を扱っており、何でも自動化するのが大好きです。AWS CloudFormationはAWSユーザーにとって優れたツールですが、近年は複数のクラウドを併用する企業が増えています。そこで、マルチクラウド環境でInfrastructure as Codeに取り組むお客様向けのProof of Conceptとして、CloudFormationでGoogle Kubernetes Engineクラスタを作成してみることにしました。

カスタムリソースの開発手順については、CloudFormation CLIのウォークスルーと、こちらのブログ記事がわかりやすくまとまっています。本稿では、開発中に私が直面したいくつかのポイントに絞って解説します。

新しいクラスタの起動にはKubernetes Engine APIを使います。まずサービスアカウントを作成し、以下のコマンドで適切なロールを付与してください。

gcloud projects add-iam-policy-binding my-project —-member serviceAccount:[email protected] —-role roles/iam.serviceAccountUser —-role roles/container.admin

次に、IAMコンソール > Service Account Keyに移動し、キーをJSONファイルとしてダウンロードします。JSONの中身をコピーしたら、AWS Secrets Managerコンソールを開き、新しいプレーンテキストのシークレットを作成して、コピーした内容を貼り付けます。

コードからSecrets Manager APIを呼び出すには、AmazonWebServicesClientProxyを利用します。

1 drxsdop2axuqaii8zuotqa

なお、SAM ローカルテストを行う場合は、次の行を

getSecretValueResult =
clientProxy.injectCredentialsAndInvoke(getSecretValueRequest, client::getSecretValue);

以下のように書き換える必要があります。

getSecretValueResult = client.getSecretValue(getSecretValueRequest);

クラスタを作成するAPI呼び出しはすぐに返ってきますが、実際のクラスタ作成には2〜3分ほどかかります。進捗をモニタリングし、作成が成功(または失敗)した時点で初めて結果を返したいので、CallbackContextを使って作成ステータスをレポートしています。

1 nxvhyt gsrmvicwc27x4kq

クラスタ作成用のカスタムリソースの作り方さえ押さえれば、list、delete、updateといった他の操作を追加するのも難しくありません。このコードをベースに、他のGoogle Cloudサービス向けの独自カスタムリソースを作ることもできます。

コードはこちらで公開しています。

他の記事もぜひブログでチェックしてみてください。AvivのTwitterをフォローするのもおすすめです。