ハッカソン参加時の備忘録 ～ 第１回：クラウド環境を作成してみよう！ ～

ハッカソンでプロダクトを作るにあたって、画面だけで完結するサービスは少なく、
どうしてもサーバ通信を行い、サーバ側でAIを呼び出したり、APIを呼び出したり、はたまたDBを呼び出しサーバ側で色々な処理を行うといったプロダクトを作ることがほとんどです。

そうなってきますとどうしてもサーバが必要となってきます。
昔は自分のPCにIISを入れて、自分のPC内にサーバを構築した記憶がある人も少なくないのではないでしょうか。

ですが、現在はクラウドがありますので、そちらを使われることが一般的でしょう。
ということで、今回の記事ではAWSを用いたサーバ環境の立ち上げを行っていきたいと思います。

# １．AWS環境を作成する。
記事の記載量から、AWSのアカウント作成等はスキップさせて頂き、
ハッカソンでよく使われるサーバレス環境（Lambda環境）の構築から、記載したいと思います。

## そもそもLambdaとは
LambdaとはAWSが提供するサーバレスの処理（関数）を実行できるサービスになります。
AWSにはクラウド内に仮想サーバを構築するEC2というサービスが御座いますが、
EC2とLambdaの違いとしては以下になります。
+ EC2はOSがインストールされたのみの為、初期設定が必要。
+ LambdaはAWSにてプログラムの実行環境が用意されているため、利用者がインフラ環境を整備する必要なし。
+ EC２に比べるとLambdaはアプリケーションの構築が簡単



## Lambdaで関数を作成する
では早速関数を作成してみましょう。

### ➀、赤枠の『関数の作成』ボタンより関数の作成を開始します。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/17f85b49-adb6-f7f8-12bd-a886053b81e6.png)


### ➁、関数の設定を行います。
ポイントとしては以下になります。
+ ランタイムにて『Python』や『.Net』、『Node.js』、『Java』などの言語を選べます
+ 関数URLを有効化しておくと簡単に今回の関数を呼び出すことができます。
+ 認証タイプを「NONE」にしておくと簡単に今回の関数を呼び出すことができます。



### ➂、設定が終わったら『関数の作成』を押下。


### ➃、関数の作成完了
ということで、あっという間に関数が作成されました！！
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/31fefb2e-ab78-14fa-a636-a51ba0dc3875.png)


## Amazon VPCを作りましょう！
Amazon VPCとは『Amazon Virtual Private Cloud』の略で、論理的に隔離されているプライベートの仮想空間を作成するサービスになります。
これを設定しないとRDS（DB）が作成できなかったりするので、
早いうちに作っておきましょう！！
ということで、ここからはVPCの作成から、ハッカソン用のVPCの活用まで記載します。
ですが、『Amazon VPC』をより詳しく知りたい方は以下のQiita記事が分かりやすくオススメですので紹介させて頂きます。

https://qiita.com/c60evaporator/items/2f24d4796202e8b06a77


### ➀、VPCを作成しましょう。
赤枠のボタンを押して、VPCの作成を開始します。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/2fe2b87e-5270-e5e2-1c1c-e651a1e589c7.png)


### ➁、各種設定画面で、VPCについて設定します。
恥ずかしながら当方、あまりVPCとか分からなかったのですが、
言うなればVPCというのは、空間の切り分けを指すイメージです。
ですので、自分のクラウド内部からしか設定できないプライベートサブネットの作成や、
外部からのアクセスを想定したパブリックサブネットなどの作成が必要となってきます。
ですので、一番最初に「作成するリソース」ということで「VPCのみ」と「VPCなど」という選択肢がありますが、特段理由がない場合、「VPCなど」を選択するとプライベートサブネット、パブリックサブネットと必要なものを合わせて作成してくれます。

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/70f7ab1f-866c-f31e-d916-0952fe2d49a0.png)

『VPCなど』を選択した場合のイメージがプレビューとして、右側に表示されます。


### ➂、各AWSサービスの配置イメージ
ここからは各々の考えで、設定することをオススメしますし、
ここから記載する内容が正しいとは思いませんが、
ハッカソンにおける素早くネットワークを構築するためのやり方だと思い、参考程度に考えて頂ければと思います。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/26fe1d40-84e0-a273-32a3-bd577d646db7.png)

RDSをプライベートサブネットに、Lambdaなどをパブリックサブネットに配置するのが基本かと思いますが、当方はハッカソン中RDSに対して、別ツールでDBのレコードをInsert・SELECT・UPDATEしますので※、あえてパブリックサブネットに配置しております。
また、同じサブネットにLambdaを配置できないようですので、仕方なしにRDSとは別のプライベートサブネットにLambdaを配置しております。

あと、注目するべきポイントとしては、S3やRekognition、Bedrock、Transcribeなどハッカソンでよく使われるAWSのサービスについては、VPC内に配置できないので、『ゲートウェイエンドポイント』を設定して、接続する必要があるということですかね。。。


## 実際の設定を見てみましょう

### ★★ VPCの設定 ★★
AWS VPCを開くとリソースマップというものが御座いますので、
そちらの接続例です。
### ➀プライベートサブネット
サブネット、ルートテーブルともに、プライベート同士を繋ぎ合わせて、
ネットワーク接続のみパブリックのNATに接続させております。
（今回AZを二つ用意しておりますので、1/2両方とも数字を合わせて接続しております。）
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/3882993a-96b9-f4b6-cee6-90384ac22c51.png)

### ➁パブリックサブネット
パブリックサブネットは、ルートテーブルはパブリックにつないでおりますが、
ネットワーク接続については、igw（インターネットゲートウェイ）とS3につないで、
外部接続をしております。
※このパブリックサブネットマスクで接続する前に、「インターネットゲートウェイ」を作成する必要があります。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/64878bff-9524-66a7-60d9-cbaa9ff1d148.png)

### ➂エンドポイント
エンドポイントについては、各種VPC外にあるAWSのサービスを呼び出す場合や外部へ接続する際の抜け道を用意するイメージですので、以下のようにサービスごとに用意が必要です。
（今回の例ではS3やTranscribe、Rekognitionのエンドポイントを用意しました。）
※設定例はほぼほぼ一本道ですので、割愛します。
※マスクが雑ですみません。。。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/f65789e6-7acb-9b90-c76a-55b7500c4106.png)



### ★★ IAMの設定 ★★
IAMというのはAWSのサービスやリソースへのアクセス管理（権限管理）を行うサービスとなります。
こちらでAWSへのログインユーザ（Lambdaの実行ユーザ）について、アクセス権限を与えていきます。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/5ab0e272-dd7c-17ab-97b9-283bef6f6b1e.png)

オリジナルのユーザグループを作成し、そこに対して、ポリシーを追加していきます。
通常、必要最低限のポリシー（権限）を与えたほうが良いと思いますが、ハッカソンはとにかく時間がありません。
ですので、今回は必要なサービスに対するFullAccessを与えておりますが、ことハッカソンに限りましては、このやり方がベターではないでしょうか。



設定については、こんなところだと思います。
とにかく心がけるポイントとしては、ハッカソンは時間との勝負となりますので、
出来るだけ簡単に、汎用的にがキーとなります。