仕事の上では「エンジニアである」ということよりも「課題を解決するために、なんのスキルをどれだけ持っているか」の方が重要です。そのためのロールの1つがエンジニアリングなのであり、エンジニアリングでなくてももっと簡単に課題解決出来るならそれでいいわけです。「ソフトウェアを作る人」というエンジニア職種要件の見えない壁をぶち壊して、「課題解決人」としてエンジニアリング+αのαの部分をどれだけ積み重ねていけるか。戦えて魔法も使える勇者のように、課題解決に最適な職種を自分で定義して自分がそれを目指していく。それこそが本質的な成長であり、課題解決へのアプローチであり、エンジニアとしての成長であり、自分自身の市場価値の引き上げなのだと思っています!最後に。そんなアソビュー!では楽しく課題解決して成長しまくる仲間を募集しています。kubernetesアソビュー!SREチームの霧生です。13日目の記事となります。アソビューでは最近一部のアプリケーションのインフラにEKSを導入しています。その運用をしていく中でDBのuser/passやAPIキーといった機密情報を隠蔽したい要件が出てきました。ECSでは下記のClassmethodさんの記事にある通り、タスク定義とパラメータストアによる隠蔽ができますが、EKSではまだ公式で対応していないためどうしようかと悩んでいたところ、kubernetes-external-secretsを見つけました。パラメータストアを利用して、機密情報の引き渡しが行えます。github.comより詳細に知りたい場合はGitHubにもありますが、下記の公式ブログが参考になると思います。jp.godaddy.com導入の決め手でもありますが、kubernetes-external-secretsは引き渡したい機密情報をyaml管理できる点が優れていると感じています。EKS環境にkubernetes-external-secretsをインストールするinstall方法は公式のGitHubでも公開されていますが、今回は単にkubectlコマンドを利用したインストールを試していきたいと思います。(バージョン2.1までは生のyamlもあったのですが、現在はHelmを利用したインストールが推奨されているようです。)まずはkubectlが利用できる環境でHelmをインストールします。helm.shインストールが完了したら、kubernetes-external-secretsをローカルに落としてきます。https://github.com/godaddy/kubernetes-external-secretskubernetes-external-secretsのルートディレクトリに移動し、下記のコマンドを実行すると./output_dir以下にyamlファイルが生成されます。./charts/kubernetes-external-secrets/あとは生成されたyamlファイルをそれぞれapplyしていけばインストールは完了です。環境変数等の設定について基本的にはデフォルトのままで問題ないと思いますが、AWS_REGIONの値が利用する環境と違っていると値の取得ができないため注意が必要です。設定の一覧はここから確認できます。Managerを使う場合とパラメータストアを使う場合でそれぞれ必要な権限が変わります。こちらもサンプルがGitHubのページにありますが下記にそれぞれ載せておきます。]}実際に使ってみる今回はパラメータストアを利用した方法を紹介します。パラメータストアへの機密情報の登録は上記でも紹介したClassmethodさんの記事が参考になると思います。dev.classmethod.jpパラメータストアで機密情報を登録した後、次はkubernetes-external-secretsを利用してSecretsを作成します。/staging/test-app/TEST_VALUEという変数をパラメータストアで登録した場合、yamlは下記のようになります。この変数の一意の名前を設定する作成されたExternalSecretを例えばDeploymentで利用する場合は下記のように設定します。注意点これは導入した後に見えた問題なのですが、DBのuser/passといったアプリケーションの起動時に参照される情報をパラメータストアに登録し、同じyamlファイルでExternalSecretとDeploymentを定義すると、ExternalSecretがAWSからパラメータを取ってくる際のほんの少しのラグによってDeploymentの作成時にSecretsの取得に失敗し、初回のアプリケーションの起動に失敗します。yamlを分けてデプロイの順番を整理することで対応しましたが、利用する状況によっては注意が必要です。導入してみて正直ここまで公式のREADMEの内容をなぞってるだけでは?という感じなのですが、それほど導入も利用も簡単です。kubernetes-external-secretsを導入することで、ソースと機密情報を完璧に分離しつつ、利用するyamlは管理できる理想の状態が作れました。利用するパラメータストアの変数はTerraformで作成することで人的ミスを減らしています。いくつか注意点はあるものの、EKS環境では現状最適解ではないかと思っています。最後にベンチャーやスタートアップでは優先したいことも多く軽視されがちな部分ではありますが、導入も利用も簡単なので十分に検討する価値があるかと思います。バージョンアップも盛んに行われているようなので、今後にも期待です。アソビュー!ではSREの募集も行っています。2019の12日目です。アソビューでエンジニアをしている兼平🐼(@disc99)です。現在Javaは世界中で広く使われる言語である一方で、古い技術と捉えられることも少なくありません。社外の方からは、なぜJavaなのかと聞かれる機会があります。多くの企業で支援される言語Javaというと硬いイメージを持つ方も多いと思いますが、世界的に見るとGoogle、Amazon、Netflix、Airbnbなどは主要言語、またはその一つとしてJavaを使用しています。国内でもLINE、楽天、ヤフーなどを始め多くの企業が選択している言語でもあります。非常に多くの利用者がいるため、各サービスやフレームワークが優先的にサポートやSDK提供されることが多く、メジャーなものだけでなく、先進的なサービスやツールを使う場合でも、他言語よりも先行して開発に取り入れることが可能になります。結果的に、多くの経験者やナレッジが揃い、サービス開発に還元しやすくなります。優れたランタイムJavaの特徴の一つがJVMです。Web、金融、基幹システム、ビッグデータ、スマートフォンから組み込み機器まで、幅広い環境で利用され、非常に高いパフォーマンスや安定性、信頼性などの厳しい条件をクリアしています。Javaだけでなく、多くの言語(Scala、Kotlin、Clojure、Groovy)の実行環境として利用されています。B向けのアクティビティ、チケット管理システム、OTAへのデータ連携や、社内向けシステムの他にも、それらをつなぐAPIやバッチ、運用のためのツールなど様々です。これらの幅広い、条件をクリアする上でJavaは非常に有効な選択肢となっています。弊社同様に多くの企業で採用される理由としてJVMの存在は大きいと思います。言語そのものとしては決して新しい部類ではないものの、現在でも半年に1度のバージョンアップを行っています。進化を続けながらも、Javaの特徴である高い後方互換性を維持しています。これに関しては、サービスをローンチしてから5年以上経過している弊社のサービスを安心して運用を続けられる理由でもあります。最近では、言語仕様だけでなく、現代的なクラウド環境で重視される、高速起動や低リソース対応など、従来のJavaでは難しかった課題もGraalVMの登場により、新たな可能性が見えてきています。最近の言語では、優れた構文であることより、たとえ冗長でも誰でも読み書きしやすかったり、ランタイムやエコシステムなど総合的に扱いやすいことが重視されることもあり、Javaもその特性に近いと感じています。細かな部分は他にもいろいろありますが、これらは大きな理由となっています。どのようにJavaを使っているかWeb現在アソビューでは大小合わせて、数十のアプリケーションが連携しています。API、gRPCサーバなどのアプリケーションです。紹介した通り、非常に多く使われており、パフォーマンスや信頼性、ナレッジも含め非常に充実している分野です。Bootが多く使われているため、開発も素早く開始できます。Bootアプリケーションが新規でローンチされています。Gatewayを活用しています。Gatewayとして求められる機能を活用してます。spring.ioサーバーレス現在弊社で稼働しているアプリケーションの多くはコンテナベースの環境で稼働しています。以前まではECSを採用していましたが、EKSが発表されてからEKSへの移行を進めています。CaaSは柔軟性で優れてはいますが、要件次第ではもっと素早く、スケーラブルで運用コストの低い環境が求められることも増えています。Lambdaを代表とするサーバレス環境を利用しています。Functionを利用したサーバーレスアプリケーションの開発も行っています。spring.io実際にサーバレスを利用したSpringアプリケーションは開発から本番運用開始するまで1日以内で可能なため、マッチするケースでは強力な選択肢となります。2.3のFeatureであるGraalVM対応には非常に期待しています。開発ツール弊社でメインで利用しているクラウドであるAWSやアプリケーション実行の基盤となるKubernetes他、開発を行う上では様々なツールを駆使することになります。基盤を構築しているSREと、それらを利用する開発メンバーの間に知見の差異があることも少なくありません。これらのギャップを減らし、素早くセットアップや各環境を操作できることを目的としたCLIツールを、SREチームから配布しています。このツールもJavaで開発しており、GraalVMに対応したpicocliでネイティブなバイナリの生成を行っています。11を使用して開発しています。11をサポートしましたが、即日アップデートするなど、可能な限り最適なランタイムを選択できるようにしています。その他よくある質問Javaだと開発が遅くならないか言語としての向き不向きが無いことは無いですが、多くのサービスがそうであるように、実運用レベルになると言語特性だけでなく、それを取り巻く環境や、ビジネスモデル、人材などの複合的要素により開発速度や品質が決まってくると思います。実際にアソビューが提供してるサービスでも様々なニーズがあり、それらを満たす上で言語そのものだけで解決できる部分は決して多くないです。多くのWeb企業で採用されてることからも分かるように、言語そのものだけで開発速度が決まるわけではないので、用途に合わせ適切に選択できることを重視しています。今の開発メンバーがJavaの知見が多いので、Javaを選択することが多いですが、用途に合わせ適材適所で使い分けています。イベントレポートcanvasを使って動体感知。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。