【AWS Lambda関数作成】APIGatewayの作成手順（状態維持API編）



## はじめに
【AWS Lambda関数作成】APIGatewayの作成手順に関しての備忘録です。
初心者です😅
間違えてる部分が多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
<br>
## 🦁<INS>**結論**</INS>🦁

:::note info
押さえておくべき点
* AWSではAPI Gatewayは必須ツール。
* API Gatewayは「情報の出し入れの管理」「セキュリティ」「様々なデバイスに対応」「データの変換」などを行うことができる。
* CORS（Cross-Origin Resource Sharing）は、ウェブブラウザーのセキュリティポリシーの一部で、異なるウェブサイト（オリジン）間でデータを共有するためのルールや仕組み。
* オリジンとは、ウェブサイトやウェブアプリケーションがホストされているドメイン（サイトのアドレス）のこと。
:::  
***


:::note alert
注意点
* テストではステータスが「200」が返ってきたとしてもエラーメッセージがある場合がある。
:::  

***


## <INS>**前提**</INS>🙊
AWSのアカウント作成が終わってる。
AWS Lambdaの環境構築が終わってる。
AWS Lambdaのコードがテスト含め完了してる。
IAMでの権限設定が完了してる。
Step Functionsの設定が完了してる。

***


## 手順詳細
<状態維持APIの作成手順>
### APIの作成
AWSコンソールにログインし、API Gatewayをクリック。
<br>

左側のナビゲーションで「API」を選択し、「新しいAPIの作成」をクリック。
<br>

REST APIの「構築」をクリック。
<br>

新しいAPIを選択し、APIの名前（StateControlAPI）を入力し、「APIを作成」をクリック。
※他はデフォルト設定のままでOK
<br>
***


### リソースの作成:
作成したAPIに移動し、左側のナビゲーションで「リソース」を選択し、「リソースの作成」をクリック。
<br>


リソース名を入力（今回は「status-check」と入力）してCORS (クロスオリジンリソース共有)にチェックを入れる。
<br>
***

### メソッドの作成:
リソースを選択（今回は「status」)して、右下にある「メソッドを作成」をクリック。
<br>


メソッドのタイプを「POST」を選択して、統合タイプを「AWSのサービス」を選択。
<br>
***

### メソッドでの統合リクエスト:
メソッド設定で、統合タイプとして「Lambda関数」を選択し、関連付けたいLambda関数を指定します。
<br>

AWSリージョンを「ap-northeast-1」を選択。
AWSサービスを「Step Functions」を選択。
HTTPメソッドは「POST」を選択。
アクション名を入力（今回は「DescribeExecution」）
<br>

実行ロールにIAMで作成した「実行ロール」を貼り付けして「メソッドを作成」をクリック。
IAM ＞ ロール > myrole ここにある概要の部分にある「ARN」(発火APIと同じもの)
<br>

下にあるマッピングテンプレートの「Add mapping template」をクリック。
<br>

コンテンツタイプに「application/json」を入力。
（テンプレート生成は入力なし）
テンプレート本文に下記のコードを作成（Step FunctionsのArnを入力）して貼り付ける。
```
{
    "startActionArn": "$input.path('$.startActionArn')"
}
```
<br>

「保存」をクリック。
（他のコンテンツタイプがあったら削除する）

***


### レスポンスの設定:
リソースから「POST」をクリック。
右下にある「メソッドレスポンス」をクリック。
「編集」をクリック。
<br>

「ヘッダーを追加」をクリックして「Access-Control-Allow-Headers」を入力する。
再度「ヘッダーを追加」をクリックして「Access-Control-Allow-Methods」を入力する。
再度「ヘッダーを追加」をクリックして「Access-Control-Allow-Origin」を入力する。
レスポンス本文に「application/json」を入力して、モデルを「Empty」を選択する。
「保存」をクリック。
<br>


「統合レスポンス」をクリック。
「編集」をクリック。
ヘッダーマッピングに「’*’」を入力。


マッピングテンプレートにある「削除」をクリック。
「保存」をクリック。
***

### リクエストの設定
リソースから「POST」をクリック。
右下にある「統合リクエスト」をクリック。
「編集」をクリック。
<br>
***

### テスト
リソースから「POST」をクリック。
右下にある「テスト」をクリック。
<br>

「リクエスト本文」に下記のコードを作成して入力。
※local_jan_codeの値は設定したサイトにあるスクレイピングしたいものを設定。
<br>

```
{
    "inputData": {
        "local_jan_code": "4901133716676",
        "executionArn": "ここにStep FunctionsのARNを入力"
    }
}
```
<br>

「テスト」をクリック。
ステータスに「200」があればOK
※ここでは必ず「Invalid Arn: 'Invalid ARN prefix:」というエラーメッセージがきます。
これはテスト環境では発火APIの実行がないため、非同期にてLambda関数の処理が進められてない関係でARNがないことになってしまうから。
あとは、実際のローカルからテストを実行して確認して調整が必要になる。

### デプロイ:
右上の「APIをデプロイ」をクリック。
<br>

ステージを「*New stage*」を選択。
<br>

ステージ名を「prod」と入力して「デプロイ」をクリック。
<br>

完了。
***

AWS Lambda関数作成 セクション　リンク
1. [<INS>AWSアカウントの作成](https://qiita.com/nyanyacyan/items/f533938e4f5d7960a32e)
2. [<INS>AWSの開発環境の構築](https://qiita.com/nyanyacyan/items/d1dd2fb874725226f9da)
3. [<INS>Lambda関数の開発とデバッグ](https://qiita.com/nyanyacyan/items/9644db9eb01bdc91d85b)
5. [<INS>IAMロールの作成と設定（途中まで作成したら、Step Functionsを設定する必要あり）](https://qiita.com/nyanyacyan/items/8b0bba4fe59b0c06a946)
6. [<INS>AWS Step Functionsの設定とデバッグ（完了後、IAMの権限にStep Functionsを追加）](https://qiita.com/nyanyacyan/items/004e0dc6145a0fc90b1d)
7. [<INS>API Gateway（発火API）の設定とデバッグ](https://qiita.com/nyanyacyan/items/3cd13fc016103d1de5c1)
8. [<INS>API Gateway（状態維持API）の設定とデバッグ](https://qiita.com/nyanyacyan/items/e96686b5b54b4059d2aa)
9. [<INS>Python（local環境）の開発とデバック](https://qiita.com/nyanyacyan/items/d76e98b0e6e9d9665a54)