【Java,AWS】自分のPCで動かしていたJavaのプログラムをAWSで動かしてモダナイゼーション（リプレース）を体験する。

こんばんは。

めっちゃ長いタイトルになった・・でも、件名がそのままやりたい事です。

現在、会社ではシステムリプレースのプロジェクトを担当しています。既存システムの基盤を再構築します。
当然自分の役割は限定的で（いや、それだけ規模が大きいという事ですよ）、自分でゼロから最後までやりたくなってしまいました。
先日の記事にAWS Lambdaを使ったハンズオンセミナーについて書きましたが、それからAWSで色々やってみたい欲も出てきたので、調べながらやってみました。
ソース1本を動かして一言メッセージを出すくらいならできるだろう、という気持ちで着手しました。

一番目的に沿っていそうな以下を参考にしました。

https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/sample-java.html

Lambdaに関数を作ってテストを実行してみたのですが、Javaはサポートされていないようでコードを書くことができませんでした。pythonは大丈夫でしたが、僕はpythonを書けないので一旦断念する事にしました。
結果、Cloud9をあたかもローカルのドライブのように活用してプログラムを実行する方法に落ち着きました。

結構簡単です！ぜひ試してみてください。

###0.読んで欲しい方

以下のいずれかに該当する方には、読んでいただきたいです。
・「クラウド（AWS）使った事ある人」になりたい方
・自作プログラムをAWSで実行してみたい方
・ローカルでプログラムを実行するのに飽きてきた方

注意点は、環境構築すると課金されることです。
といっても月0.11ドル程度でしたが。
遊んだ後は片付けましょう（削除しましょう）。

###1.プログラムを用意する。

この記事はAWS環境が主役なので、プログラムは簡単なものにしておきます。
Helloworldでも良いのですが、せっかくなのでちょっとしたもの・・・という事でAtcoderのA問題を使う事にします。ABC-200から使います。
世紀を求めるプログラムです。
コメント文に少し手を加えました。

```Main.java
import java.util.Scanner;

public class Main{

public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  System.out.println("西暦" + n + "年は" + ((n-1)/100+1) + "世紀です。");

}
}
```

###2.AWSにアカウントを登録する。

既にアカウントを保有している方はスキップしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/d00b2c0b-7b75-c59b-a010-f6f2dfa7d5fe.png)

AWSの「無料でサインアップ」をクリックして登録を進めてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/1ea13c74-d57d-0ab1-2349-9aa5a1e160d8.png)

ここはそんなに難しいものではないので、指示に従って進めてください。
クレジットカード情報を登録します。
一年間の無料枠付きですし、一年間を超過しても何もしなければ課金は発生しません。
環境構築してずっと放置すると課金が発生します。利用量に応じての課金になりますので、大きな額にはなりませんが、心配な方は稼働させた後は削除させた方が良いです。
削除の仕方は後述します。

###3.Cloud9上に環境を生成する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/d7f40de9-5182-bdc5-5062-b6d1460cd7b6.png)

マネジメントコンソール画面を開きます。
「すべてのサービス」を展開し、「開発者用ツール」のカテゴリから「Cloud9」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/9869affa-c886-9833-71cf-8b0f9887d33e.png)

「create environment」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/ba61e774-a398-4a2e-f2bf-6800c5129bd1.png)

名前を入力します。Descriptionは任意入力です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/7cb4b62c-e915-6a77-0c54-86ce81ab27cd.png)

今回は特別な指定は不要ですので、すべて初期値のままで大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/0ab7c006-488a-257d-df24-997839669d05.png)

「Next step」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/4b6e95b4-3033-dfa3-52d2-585a404ec8bf.png)

「create environment」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/0d86a0c3-e497-03ff-2166-249ed5edd063.png)

これで環境は構築されました！
確かに簡単ですね。

###4.Javaの環境設定をする。

自分のPCにJavaをインストールすると思いますが、cloud9には既にJavaがインストールされています。
コンソール画面に、「java -version」を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/746cd5c5-d61c-1fc6-1096-d098f225e8d0.png)

どんなメッセージが出ましたか？
java version 1.8 および OpenJDK で始まる値が含まれていればJavaはインストール済です。恐らくこのメッセージが出る方が殆どではないかと推測しますが、もし異なるメッセージが出るようでしたら、冒頭のAWSの解説を読んでみてください。

今回はJavaがインストール済となっていましたので、先に進みます。

###5.Javaのプログラムを配置・実行・検証する。

複数のやり方があります。

####(1).cloud9上でファイルを新規作成してコンパイル・実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/f41669c6-157c-2efc-1362-a68de9ed5f2f.png)

コンソールの左側で右クリックし、「new file」を選択します。
一番上のフォルダ（自分で名前を決めたフォルダ）にカーソルを合わせて右クリックします。そうしないと、配下の.c9フォルダの下にファイルが作られます（試していませんが、cdコマンドで.C9フォルダを指定すればよいと思います）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/c696567b-77b5-9633-8472-0b38075f7395.png)

Main.javaで保存します。保存後、ファイル名をダブルクリックするとエディタ画面が右側に開きます。1.に記載したソースコードを貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/f6bbdc96-7614-8c3f-43c4-cf046fb4aa63.png)

ローカルのPCと同じように、下段のコマンド画面で「javac Main.java」を入力してコンパイル、「java Main」で実行します。
入力した数字が何世紀かを判定します。今回は2021年なので、21世紀になっていますね。

####(2).ローカルでソースを編集してcloud9にアップロードし、cloud9でコンパイル・実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/998d8558-2818-f3e1-99e8-5f17a057d13d.png)

ローカルの環境でソースを編集します。
このとき、UTF-8でソースを保存します。Shift-Jisだと、cloud9にアップロードするとき文字化けします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/6f254a6f-c7e8-5df1-d087-bbeea80d16cf.png)

一番上のフォルダ上に（フォルダが青くなるように）ドラッグ＆ドロップします。
あとは(1)と同じく、コンパイルして実行します。

####(3).ローカルでソースを編集・コンパイル。classファイルをcloud9にアップロードし、実行

ローカルでコンパイルして生成したクラスファイルをcloud9にドラッグ＆ドロップでアップロードすれば、そのまま実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/dd735411-776b-318e-5415-9480bc6e67d0.png)

左がCloud9、右側がローカルのコマンドプロンプトで実行した結果です。

###6.クリアランス

環境は一定期間が経つと課金が始まるので、クリアランスをしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/46d64080-b6a8-a347-e8c5-6a08460c7716.png)

マネジメントコンソール画面に戻ります。「最近アクセスしたサービス」にCloud9が表示されているのでクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/b4e6b745-29cb-6166-e234-d66c9ec71f6f.png)

ラジオボタンが、先ほど作成した環境であることを確認し、deleteをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/9b795c7e-e54c-f421-8257-0cecaecf42c9.png)

コメント欄に、「Delete」を入力すると削除ボタンが活性化しますのでクリックします。
これで削除完了です。

まあ、このくらいのプログラムであれば課金は殆ど発生しないと思いますが、実行したらクリアランスする癖をつけておくと安全です。

###7.最後に

簡単なプログラムで試しましたが、クラウドを動かす気分は味わえました。少なくとも「Cloud9がプログラムをクラウドで動かす環境である」という事は体感できます。
新人研修のAWSに触れる、といったカリキュラムがあるとしたら、このくらいのレベルの作業でも良いんじゃないかと思いました。

Cloud9環境自体は操作もサクサク動くし悪くないです。どうせならここに色々作り込んで、もっと凝ったアプリケーションを動かしたいので、課金体系も今後調べてここに書いていこうと思います。

では。