ConfigMapをEKSクラスタにCodeシリーズで自動デプロイする仕組みを構築してみたEKS2019年01月10日かたいなか(16)30この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、かたいなかです。EKSをチームで運用する際に、EKSクラスタにアクセスする必要があるIAMユーザ/ロールが増えるたび、すでにアクセスできる状態になっている人に依頼してaws-authConfigMapをeditしてもらうというのは大変ですよね。そこで今回は以下の図のように、Codeシリーズを使用してaws-authConfigMapのYAMLの変更が、Kubernetesのクラスタに自動で反映されるようにする方法をご紹介します。おさらい:aws-authConfigMapとはaws-authConfigMapはIAMのユーザ/ロールをKubernetes内のユーザやロールに紐付けを定義します。EKSクラスタ作成者以外のIAMのユーザ/ロールは、このConfigMapに紐づけが定義されていないと、Kubernetesクラスタ内のリソースにアクセスすることができません。具体的には以下のようなConfigMapとなります。system:masters実際に構築してみる流れ以下の流れで進めます。前提条件を満たした状態であることを前提に進めていきます。EKSのクラスタが作成されていることdocker,kubectl,aws-iam-authenticator等のツールが作業を行うPCにインストールされていることkubectlでEKSのクラスタにアクセスできるようになっていることCodeBuild用サービスロールの準備まずは、CodeBuildのサービスロールを定義します。Policyを作成し、アタッチします。]}EKSのクラスタをdescribeする権限とCodeBuildのサービスロールとして一般的に必要な権限を与えています。Roleできるようにするため、CodeBuildのサービスロールは以下のような信頼ポリシーを持つようにします。]}EKSクラスタ内のaws-authConfigMapにCodeBuildのサービスロールを追加CodeBuildのサービスロールをaws-authConfigMapに予め手動で追加しておきます。先に追加を済ませておかないとCodeBuildがConfigMapの編集を行えないためです。以下のようなYAMLを作成します。EKSのクラスタにワーカーノードが追加された時点でワーカーノードのインスタンスのロールに関する設定はされているはずなので、新たにハイライトされた部分のCodeBuildのサービスロールの設定を追加します。Dockerイメージの準備ECRのリポジトリを作成ECRのリポジトリを作成します。CodeBuildがイメージをpullできるようにするため、以下のようなリポジトリポリシーを付与しておきます。]}Dockerイメージをビルド・ECRにプッシュまず、以下のようなDockerfileを用意します。/usr/local/bin/aws-iam-authenticatorそして、以下のようなコマンドでDockerイメージをビルドし、ECRにプッシュします。<ECRのリポジトリのURI>:latestYAMLを管理するCodeCommitリポジトリの準備CodeCommitのリポジトリを作成し、以下に示すような2つのファイルがプッシュされた状態にします。先程、EKSのクラスタにapplyしたaws-authConfigMapのYAMLです。最後に、CodePipelineのパイプラインをは今まで作ったものをつなげて作成していきます。CodePipelineのソースに作成したCodeCommitリポジトリのmasterブランチを選択します。CodeBuildのプロジェクトを以下のような設定で作成し、CodePipelineに関連付けます。サービスロールとして予め準備しておいたCodeBuildのロールを使用するようにします。CodeBuildの環境として、ECRに予めプッシュしておいたイメージを使用するようにします。ビルド定義ファイルはCodeCommitのリポジトリのbuildspec.ymlを指定します。パイプライン作成が完了したら、処理が自動で開始されます。正常に処理が完了すれば、構築が正しく行えています。ここまででCodeCommit上でのaws-auth.yamlの変更が自動でEKSのクラスタに反映されるようになりました。自動で適用されることを確認してみるでは、実際に反映が正しく行われるか確認してみましょう。aws-auth.ymlに以下のハイライトの部分を追加してコミットし、CodeCommitにプッシュします。system:mastersそして、CodePipelineの処理が成功したのを確認したら、aws-auth.ymlに追加したIAMユーザを使用してkubectlでアクセスできることを確認してましょう。16h正しくアクセスが行えました。ConfigMapが自動で適用されるようにする方法の例をご紹介しました。CI等他のCIツールを使用しても同様の処理を行うことももちろん可能です。ConfigMapの適用を自動で行うしくみが作れると、すでにアクセス権を持っている人に依頼してConfigMapをeditしてもらうようなトイルになりがちな作業を削除できます。実は今回使用した方法は、Kuberenetesの特定のリソースに限った方法ではなく、CodeBuildで実行されるコマンドさえ修正すれば他のKubernetesのリソースの自動デプロイにも応用できるものです。そのため、EKSクラスタを立てたらまずはこのような仕組みを作っておくことで、自動デプロイの仕組みを整えていくのに良いスタートになるのではないかなと思います。EKSのクラスタを立てた際には試していただけますと幸いです。ロールの管理:EKSのドキュメントのIAMユーザ/ロールとEKSのユーザの関連付けのページです。ActionsでEKSへのCDの実装例のリポジトリです。mapUsersというプロパティの属性としてYAMLの文字列を埋め込む形で設定していますが、将来的には、IAMロールとKubernetesのRBACのロールのヒモ付をCustomResourceDefinitionとして設定できるようにすることが検討されているようです。167,850Scalaが好きです。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。2020年03月11日3【3/11(水)リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。kaji896AWSを全く知らない状態で入社して5年が経過、中途採用のAWSエンジニアの育成リーダーを1年間担当しています。そんな中で教える機会が増えました。自分がAWSに関するスキルアップために実践したことについてまとめてみました。どなたかのお役に立てれれば光栄です。濱田孝治437re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨132皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。kaji896AWSを全く知らない状態で入社して5年が経過、中途採用のAWSエンジニアの育成リーダーを1年間担当しています。そんな中で教える機会が増えました。自分がAWSに関するスキルアップために実践したことについてまとめてみました。どなたかのお役に立てれれば光栄です。濱田孝治437re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。夏目祐樹414こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。