エンジニアが英語で情報を集めてシステムをデプロイするには

多くのIT系のドキュメントは元は英語で書かれていて、それぞれの言語に訳されているかと思います。それゆえ、エンジニアが何かわからないことを検索する場合、英語のほうが情報量が圧倒的に多いと思われます。また、たとえ翻訳されていても、すべてを訳しているわけでなかったり、明らかに機械翻訳を使っていて誤訳になっていることもあります。

英語は苦手という方も、そもそもプログラミング言語は英語ベースのものが多いですし、少し勉強すればより多くある情報の中から自分がいま探しているものを見つけられるようになるのではないでしょうか。

製品やサービスとして提供されている場合は、プロバイダーが日本語の情報も出していると思うので、ここではQ&Aやクラウド周りのオープンソース系のサイトをいくつか取り上げたいと思います。翻訳機能なんかを通してみても、ある程度の情報が得られると思うので便利かと思います。

# Kubernetes
Kubernetesのオリジナルのドキュメントです。日本語版もありますが、やはり英語のほうが情報量は多いです。

https://kubernetes.io/docs/home/

## Terraform
クラウドでインフラをコードとして管理して、デプロイの自動化を行えます。

https://registry.terraform.io/browse/providers

## Docker
Dockerのオリジナルのドキュメントです。

https://docs.docker.com/

## Kaniko
コンテナ内でDockerのイメージをビルドするツールです。Kubernetes上で動いているJenkinsのパイプラインから、使用する時に便利です。

https://github.com/GoogleContainerTools/kaniko

## Helm Chart
Kubernetesのリソースを実装する場合、テンプレートをもとにパッケージ化してデプロイできます。

https://helm.sh/docs/topics/charts/

## Nginx Ingress Controller
NginxをKubernetes上で使用する場合、これを使ってシステムを外部に公開できます。

https://kubernetes.github.io/ingress-nginx/

## Jenkins
Jenkinsのオリジナルドキュメントです。

https://www.jenkins.io/

## OAuth2 Proxy
Idpを使ってSSOを実装するときに便利です。

https://oauth2-proxy.github.io/oauth2-proxy/

## cloud-init
VMのインスタンスのブートストラップ時にスクリプトなどを実行して、設定の標準化などを行えます。

https://cloudinit.readthedocs.io/en/latest/index.html

## Chef
インフラの自動化を行えるツールです。レシピと呼ばれるファイルに何を実行するかを記述し、システムの設定、パッケージのインストールなどをできます。繰り返し実行されることを考慮されているので、一度設定したりインストールしたら変更がない限りはその個所は実行されません。

https://docs.chef.io/

## Rundeck
主に複数あるVMなどを対象に、スクリプトなどを一斉に実行することができます。先ほどのChefと合わせて使用すると、複数のVM上で一斉にChefを実行して一度に多くのシステムの実装ができます。

https://docs.rundeck.com/docs/

# stackoverflow
いわゆるQ＆Aのサイトです。たとえすべて英語で表現できなくても、探している情報のキーワードだけでも多くのことが調べられます。
ただ、ここに書かれている解答が常に正しいとは限らないので、丸写し使うのは良くないでしょう。たまに見かけるのに、"I haven't tried this myself but..."　（試したことないがたぶん・・・）のようは場合はあまり参考にしない方が良いかもしれません。

https://stackoverflow.com/

# stackExchange
同じくQ＆Aのサイトです。

https://stackexchange.com/

# KubernetesとVMにアプリケーションのデプロイ

上でご紹介したものを使うと、クラウド上にシステムをほぼすべて自動でデプロイすることができます。
例えばAzure上にAKSおよびVMでシステムを作る場合、以下のような流れでできます。

* Terraformを実行して、AKS、ACRおよびVMをデプロイ

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/linux_virtual_machine

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/container_registry

* Helm Chartを利用して、Jenkins、Rundeck、Nginx Ingress ControllerなどをAKSにでプロしてCI/CD環境をつくる
* OAuth2 Proxyを利用してSSOの設定

https://qiita.com/dg4101/items/7fdcf0e14d00b3fa0c7e

https://qiita.com/dg4101/items/b51bca83b2ffa14653a4

* もしくは、AzureADのプラグインを利用して認証を実装

https://plugins.jenkins.io/azure-ad/

* RundeckのNode（Chefを実行する対象のVMです）を登録

https://docs.rundeck.com/docs/manual/05-nodes.html

* Jenkinsのパイプラインで、Kanikoをサイドカーとしたエージェントでアプリケーション用のDockerイメージをビルドしてACRにプッシュ
* VMはcloud-initで`Runcmd`をつかって、スクリプトを実行しシステム特有の設定をする

https://cloudinit.readthedocs.io/en/latest/topics/modules.html#runcmd

* AKS上で動くアプリケーションを、JenkinsのパイプラインからHelm Chartを利用してAKSにデプロイ
* VM上で動くアプリケーション（クラウドネイティブでサポートされていないようなアプリケーション）は、Jenkinsのパイプラインから、Rundeckを経由してChefを複数のVMに同時に実行してデプロイ

# 最後に
ご紹介したサイトの中には一部日本語化されているものもありますが、オープンソースやコミュニティーバージョンであったりする以上おそらくすべてが日本語されることはないと思います。IT企業が自社製品の技術文章を多言語に翻訳する場合でも、相当組織だって行いそれでもすべてをカバーされるわけでもありません。
変化が多くて速いIT業界では、日本語化を待っていては必要を入手するのにすごく時間がかかってしまいます。技術文章を英語である程度読めるようになるのは、仕事でもそれ以外でもこれから役に立つことも多くお勧めです。