私は開発者であり、Intellij IDEAやEclipseなどの統合開発環境(IDE:統合開発環境)で毎日働いています。これらのIDEはデスクトップアプリケーションです。 Googleドキュメントの登場以来、ワードプロセッサやスプレッドシートアプリケーションに相当するオンラインを使用して、デスクトップバージョンのWordまたはExcelからクラウドに作業を移行する人が増えています。
作業を保存するためにクラウドを使用する明らかな理由があります。今日、従来のデスクトップビジネスアプリケーションと比較して、一部のWebアプリケーションには機能の面で不利な点がありません。コンテンツはWebブラウザーがあればどこでも利用でき、最近ではほとんどどこでも利用できます。コラボレーションと共有は簡単で、ファイルが失われる可能性は低くなります。
残念ながら、クラウドのこれらの利点は、ソフトウェア開発の世界ではビジネスアプリケーションの場合ほど一般的ではありません。オンラインIDEを提供する試みはいくつかありますが、それらは従来のIDEに近づいていません。
それは逆説的です。私たちはまだ毎日のスケジュールを立てるためにデスクに縛られていますが、ソフトウェアは複数のサーバーで生成されています。開発者は、自分のコンピューターに保持できなくなったものを扱う必要があります。もちろん、ラップトップはもはや処理能力を向上させません。タブレットなどの新しいガジェットのメモリがさらに少ないことは言うまでもなく、ラップトップに16GBを超えるRAMを搭載することはまれで高価です。
ただし、ソフトウェア開発のために従来のデスクトップアプリケーションを置き換えることがまだ不可能な場合でも、可能です。 開発デスクトップ全体をクラウドに移動します 。それを発見した日、ラップトップにすべてのソフトウェアをインストールする必要はなくなり、Webバージョンの端末とVNCが利用可能になったことに気づき、すべてをクラウドに移行しました。最終的に、私はその環境を自動的に作成するための構築キットを開発しました。
この記事では、クラウドベースの開発環境を構築するための一連のスクリプトを紹介します。 はしご ビッグデータアプリケーション、Amazon AWSでのDockerによる実行、IntelliJ IDE、Spark、Hadoop、Zeppelinをサービスとして使用したWebアクセス可能なデスクトップの圧縮、およびWebベースのSSH、SBT、Ammoniteなどのコマンドラインツール。キットはで無料で入手できます GitHub 、インスタンスの構築に使用する手順についても説明します。環境を構築し、特定のニーズに合わせてカスタマイズできます。準備が整うまでに10分以上かかることはありません。
キットを開発する上での私の主な目標は、開発環境を、使用するすべてのサービスとサーバーで簡単にアクティブ化し、不要になったときに破棄できるものにすることでした。これは、特にさまざまなプロジェクトで作業している場合に重要です。
私の理想的なクラウドベースの環境は次のようになります。
最新のクラウドソフトウェアとインフラストラクチャ、最新の検索エンジンのパワー、さまざまなブロードバンドの可用性、そして貴重なDockerを活用することで、Scalaと ビッグデータ開発 それは私の開発用ラップトップに取って代わりました。
現在、私はMacBook Pro、Surface Tablet、またはiPad(キーボード付き)からでもいつでも作業できますが、後者のオプションは理想的ではないことを認めます。これらのデバイスはすべて基本的にクライアントです。デスクトップとすべてのサービスはクラウドにあります。
私の現在の環境は、次のオンラインサービスを使用して構築されています。
私はまた、次のようないくつかの無料サービスを使用しています DuckDns IPアドレスと 暗号化しましょう 無料のSSL証明書を取得します。
現在、この環境では次のことがあります。
しかし、何よりも重要なのは、WebアクセスがWebベースのVNCとSSHの両方でHTTPSで暗号化されていることです。データの損失を防ぐために、さまざまな命の恩人がいます。これは、コンテンツを「所有」していない場合はもちろん重要です。物理ハードドライブ。コンピューター上のすべての作業のコピーを自動的に取得することは非常に高速であることに注意してください。誰かがあなたのパスワードを盗んだためにすべてを失った場合でも、すべてが正しく設定されている限り、とにかくコンピュータにコピーがあります。
それでは、環境がどのように機能するかを説明しましょう。午前中に仕事を始めるとき、最初に行うことは、Amazon Web Servicesコンソールに移動することです。ここで、すべてのインスタンスが表示されます。通常、私はさまざまなプロジェクト用に多くの開発インスタンスを構成しており、使用されていないものはオフにして、請求額を節約しています。結局のところ、私は一度に1つのプロジェクトにしか取り組むことができません。 (時々私は2人で働きます)。
だから、私は欲しいインスタンスを選択し、それを開始し、しばらく待つか、コーヒーを飲みに行きます。コンピュータの電源を入れても大した違いはありません。通常、インスタンスが機能し始めるまでに数秒かかります。緑色のアイコンが表示されたら、検索エンジンを開いて、よく知られているURLに移動します:https://msciab.duckdns.org/vnc.html
。これが私のURLであることを覚えておいてください。キットを作成すると、独自のURLが作成されます。
AWSは起動時に各マシンに新しいIPを割り当てるため、ダイナミックDNSサービスを設定しました。これにより、サーバーを停止して再起動した場合でも、常に同じURLを使用してサーバーにアクセスできます。検索エンジンでマークすることもできます。さらに、パスワードやその他の機密データを処理する必要がある場合に備えて、有効なキーでHTTPSを使用して、作業を詮索好きな目から可能な限り保護しています。
アップロードされると、システムはNoVNC、VNCWebクライアントであなたを歓迎します。ログインするだけでデスクトップが表示されます。私はデスクトップをほとんど使用せず、意図的に、アプリケーションを含むメニューのみを使用し、唯一の贅沢は仮想デスクトップです(開発時に多くのウィンドウを開くため)。メールについては、私はまだ他のアプリケーションに依存しています。今日では、ほとんどが検索エンジンの他のタブです。
仮想マシンには、ビッグデータアプリケーションを開発するために必要なものがあります。何よりもまず、IDEがあります。ビルド時にはIntelliJエディションを使用します アイデアコミュニティ 。また、SBTビルドツールとScalaRELPのAmonniteがあります。
ただし、この環境の主な機能は、同じ仮想マシン上にコンテナーとして実装されるサービスです。特に、次のものがあります。* Zeppelin、現時点でScalaコードを使用し、データ分析を行うWebノートブック(http://zeppelin:8080
)* Spark Job Server、実行および実装 スパークジョブ Restインターフェース付き(http://sparkjobserver:8080
)。 * HDFSからデータを保存および取得するためのHadoopインスタンス(http://hadoop:50070
)。
これらのURLは固定されていますが、仮想環境内でアクセスできることに注意してください。次のスクリーンショットで彼らのウェブインターフェースを見ることができます。
ページオブジェクトモデルseleniumjava
各サービスは個別のDockerコンテナで実行されます。あまり技術的に話すことなく、これを仮想マシン内の3つの異なるサーバーと考えてください。 Dockerを使用する魅力は、サービスを追加したり、2つまたは3つの仮想マシンを追加したりできることです。 Amazonコンテナを使用することで、環境を簡単に調整できます。
大事なことを言い忘れましたが、あなたは利用可能なウェブ端末を持っています。 HTTPSを使用してURLを入力するだけで、Webページへの端末が表示されます。
上のスクリーンショットでは、3つのサーバーとデスクトップであるコンテナーのリストを確認できます。このコマンドライン シェル コンテナが配置されている仮想マシンにアクセスできるため、コンテナを管理できます。サーバーが「マトリックス内」(実質的にコンテナ内)にあるかのようですが、これは シェル サーバーとデスクトップを管理するための「マトリックス」の外への脱出を提供します。ここから、コンテナーを再起動し、ファイルシステムを入力し、Dockerで許可されているその他の操作を実行できます。この時点ではDockerについて詳しく説明するつもりはありませんが、Dockerに関するドキュメントはたくさんあります。 DockerWebサイト 。
これまでのところこれが好きで、インスタンスが必要ですか?簡単で安いです。アマゾンウェブサービスの仮想マシンとストレージのコストでそれを手に入れることができます。現在の構成のキットでは、すべてのサービスを実行できるように4GBのRAMが必要です。注意して仮想マシンを必要なときにだけ使用し、たとえば月に160時間作業する場合、現在の価格の仮想マシンのコストは160 x 0.052ドル、つまり月に8ドルになります。ストレージのコストを追加する必要があります。私は約30GBを使用していますが、すべてを10ドル未満でまとめることができます。
ただし、2 GBを超えるコードをバックアップする場合は、(Pro)Dropboxアカウント(最終的に)のコストは含まれません。これは月に15ドル多くかかりますが、データに重要なセキュリティを提供します。有料のGitHubでも、無料のプライベートリポジトリを提供するBitbucketなどの別のサービスでも、プライベートリポジトリが必要になります。
必要なときにだけ使うと、専用サーバーよりも安いことを強調したいと思います。はい、ここに記載されているものはすべて物理サーバーにインストールできますが、ビッグデータを扱うため、多くのAWSサービスが必要なので、すべてを同じ場所に配置するのが理にかなっていると思います。
インストール全体を行う方法を見てみましょう。
仮想マシンの構築を開始する前に、次の4つのサービスに登録する必要があります。
クレジットカードを使用する必要があるのは、Amazon WebServicesだけです。 DuckDnsは完全に無料ですが、DropBoxは2GBの無料ストレージを提供します。これは多くのタスクに十分です。 Let’s Encryptも無料で、証明書に署名するためのイメージを作成するときに内部で使用されます。これとは別に、GitHubやBitbucketなどのリポジトリホスティングサービスもお勧めしますが、コードを保存する場合は、インストールする必要はありません。
開始するには、に移動します GitHubBigDataDevKitリポジトリ 。
ページを下にスクロールして、画像に表示されているスクリプトをお好みのテキストエディタにコピーします。
このスクリプトは、画像をブーストするために必要です。あなたはそれを変更し、パラメータにいくつかの値を提供する必要があります。引用内のテキストを慎重に変更してください。引用符自体、円記号、ドル記号などの文字は、入力しない限りパスワードに使用できないことに注意してください。 予定 。この問題は、パスワードにのみ関係します。安全を確保したい場合は、引用符、ドル記号、円記号は避けてください。
パラメータPASSWORD
これは、Webインターフェイスを介して仮想マシンに入力するために選択するパスワードです。パラメータEMAIL
これはあなたの電子メールであり、SSL証明書を登録するときに使用されます。 Let’sEncryptからSSL証明書を取得するための唯一の要件であるメールアドレスを提供するように求められます。
TOKEN
の値を取得するにはおよびHOST
、DuckDNSサイトにアクセスしてログインします。あなたは選択する必要があります ホスト名 新着。
画像を見て、コピーする場所を確認してください トークン どこに追加する必要があります ホスト名 。 「ドメインの追加」ボタンをクリックして予約する必要があります ホスト名 。
すべてのパラメーターがあり、スクリプトを編集したとすると、インスタンスを起動する準備が整います。アマゾンウェブサービスの管理インターフェースに入り、EC2インスタンスパネルに移動して「インスタンスの起動」をクリックします。
最初の画面で、画像を選択します。スクリプトはAmazonのLinuxを中心に構築されており、他に利用できるオプションはありません。 AmazonからLinuxを選択します。これは、クイックスタートリストの最初のオプションです。
2番目の画面で、インスタンスタイプを選択します。実行中のソフトウェアのサイズを考えると、複数のサービスがあり、少なくとも4 GBのメモリが必要なので、インスタンスを選択することをお勧めします t2.medium 。あなたはそれを使用して最小化することができます t2.small 一部のサービスをオフにした場合、または マイクロ デスクトップが必要な場合。
3番目の画面で、[詳細]をクリックし、前の手順で構成したスクリプトを貼り付けます。また、偶発的な終了が発生した場合にすべての作業が失われないように、期間に対する保護を設定することをお勧めします。
次のステップは、ストレージを構成することです。インスタンスの標準は8GBですが、これは、作成するすべてのイメージを含めるのに十分ではありません。 20GBに増やすことをお勧めします。同様に、必須ではありませんが、少なくとも10GBの別のブロックデバイスをお勧めします。スクリプトは、2番目のブロックデバイスをデータファイルとしてマウントします。その内容のイメージを取り、インスタンスを終了してから、その内容のイメージを使用して再作成し、すべての作業を回復することができます。さらに、インスタンスを終了してもカスタムブロックデバイスが失われることはないため、偶発的なデータ損失に対して二重の保護があります。セキュリティをさらに強化するために、Dropboxを使用してデータを自動的にバックアップできます。
5番目のステップは、インスタンスに名前を付けることです。必要なものを選択してください。 6番目のステップは、アクセス制御バーを構成する方法を提供します。デフォルトでは、SSHのみが使用可能ですが、HTTPSも必要です。 HTTPSを世界に公開することもできますが、他のユーザーがデスクトップに侵入するのを防ぐために、IPのみを対象とする方がよいでしょう。 シェル 、パスワードで保護されていますが。
この最後の構成が完了したら、インスタンスを起動できます。起動スクリプトが実行されてから最初に初期化に数分かかる場合があります。また、Let’s Encryptを使用してHTTPS証明書を生成するなど、いくつかの長いテストも実行されます。
最終的に、管理コンソールがコミットで「実行中」になり、「初期化」されなくなった場合は、準備ができています。
すべてのパラメーターが正しいと仮定すると、https://YOURHOST.duckdns.org
に移動できます。
置き換えますYOURHOST
選択したホスト名を使用しますが、HTTPではなくHTTPSサイトであることを忘れないでください。サーバーへの接続は暗号化されているため、https//
と記述する必要があります。 URLで。このサイトでは、Let’sEncryptの有効な証明書も提示されます。証明書の取得に問題がある場合、初期化スクリプトは自己署名証明書を生成します。暗号化された接続で接続することはできますが、検索エンジンは、それが不明なサイトであり、安全でない接続であることを警告します。それは起こるべきではありませんが、あなたは決して知りません。
すべてが機能すると仮定すると、ButterflyWebターミナルに入ることができます。ユーザー名を使用してログインできます app
インストール時にスクリプトで使用したパスワード。
ログインすると、Dockerや、Nginx Frontend、Git、Butterfly WebTerminalなどの他の景品も含まれるパワード仮想マシンが手に入ります。これで、開発環境用のDockerイメージをビルドしてインストールを完了することができます。
次に、次のコマンドを入力します。
git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.sh
最後のコマンドでは、デスクトップに入るためのパスワードの入力を求められます。これが完了すると、イメージの構築が開始されます。工事には約10分かかりますが、すべてが画面に表示されているのでどうなるかわかります。
構築が完了したら、次のコマンドを使用してDropboxをインストールすることもできます。
/app/.dropbox-dist/dropboxd
Dropboxを有効にするためにクリックする必要のあるリンクが表示されます。 Dropboxに入る必要があり、それで準備が整います。 Dropboxフォルダーに入れたものはすべて、すべてのDropboxインスタンスと自動的に同期されます。
準備ができたら、仮想マシンを再起動して、URL https://YOURHOST.dyndns.org/vnc.html
で環境に入ることができます。
作業を続行するときに、マシンを停止して再起動できます。アクセスURLは同じままです。このように、あなたはそれを使用する時間だけに加えて、使用済みストレージのための毎月の追加料金を支払うことになります。
以下の説明では、DockerとAmazonがどのように機能するかについてある程度の知識が必要です。詳細を理解したくない場合は、次のルールに注意してください。仮想マシンには、使用可能なフォルダーがあります/app/Dropbox
、何を入れても/app/Dropbox
それは保存され、他のすべては使い捨てで消えることができます。セキュリティを強化するには、貴重なコードをシステム管理バージョンに保存してください。
これを理解したい場合は、読み続けてください。仮想マシンの作成で私の指示に従った場合、仮想マシンは終了から保護されているため、誤って破壊することはありません。故意に終了すると、メインボリュームが破壊されます。行ったすべての変更を含め、すべてのDockerイメージが失われます。
ただし、/app/Dropbox
コンテナ用のDockerボリュームとしてマウントされ、Dockerイメージの一部ではありません。仮想マシンでは、フォルダー/app
作成したAmazonボリュームにマウントされます。これも、仮想マシンを特別に終了しても破棄されていません。ボリュームを削除するには、特にボリュームを削除する必要があります。
論理的なDockerエンティティであるDockerボリュームと、やや物理的なエンティティであるAmazonボリュームを混同しないでください。何が起こるかというと、Dockerボリューム/app/Dropbox
Amazonボリューム内にあります/app
。
仮想マシンを終了してもAmazonボリュームは自動的に破棄されないため、ボリュームを明示的に破棄するまで、内部にあるものはすべて保持されます。さらに、Dockerボリュームに入れたものはすべてコンテナーの外部に保存されるため、コンテナーが破棄されても破棄されません。 Dropboxを有効にした場合、推奨されているように、Dropboxをコンピューターと同期すると、すべてのコンテンツがDropboxサーバーとハードドライブにコピーされます。また、ソースコードをバージョン管理システムに保存することをお勧めします。
したがって、Dropboxフォルダの下のバージョン管理システムに物を置いた場合、データを失うには、これがすべて発生する必要があります。
あなたのデータが十分に保護されていることを願っています。
プロジェクトごとに仮想マシンを保持し、完了したら、未使用の仮想マシンをオフのままにします。もちろん、すべてのコードをGitHubに保存し、Dropboxに保存しています。また、プロジェクトでの作業をやめると、仮想マシンを完全に削除する前に、Amazon WebServicesブロックの写真を撮ります。このように、メンテナンスなどでプロジェクトに戻るときは、ブロック写真を使用して新しい仮想マシンを起動するだけです。私のすべてのデータはあなたのサイトに返され、私は仕事を続けることができます。
まず、プロキシなしでインターネットにアクセスできる場合は、ネイティブSSHおよびVNCクライアントを使用できます。仮想マシンにファイルをコピーしたり、仮想マシンからファイルをコピーしたりする必要がある場合は、SSHへの直接アクセスが重要です。ただし、ファイル共有の場合は、Dropboxをより簡単な代替手段として検討する必要があります。
VNC Webアクセスは非常に貴重ですが、ネイティブクライアントよりも遅くなる場合があります。ポート5900を使用して仮想マシン上のVNCサーバーにアクセスできます。デフォルトで閉じるため、特に開く必要があります。インターネットには、参加するサービスを探すためにインターネットをスキャンする「ボット」がたくさんあり、VNCはこれらのボットのターゲットになることが多いため、IPアドレスに対してのみ開くことをお勧めします。
この記事では、最新のクラウドテクノロジーを最大限に活用して、効果的な開発環境を実装する方法について説明します。クラウドマシンは、仕事用のコンピューターやラップトップの完全な代替品ではないかもしれませんが、IDEへのアクセスが重要な場合は開発作業を行うのに十分です。私の経験では、現在のインターネット接続では、動作するのに十分な速度です。
クラウド内にあるため、サーバーへのアクセスと操作は、ローカルにある場合よりも高速です。メモリを増やしたり減らしたり、別の環境を開始したり、イメージを作成したりすることができます。指先にデカンターがあり、ビッグデータプロジェクトで作業するときは、堅牢なサービスと多くのスペースが必要です。それがクラウドが提供するものです。