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