1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フロントエンドエンジニアがAWSを触る。

Last updated at Posted at 2023-10-25

その1 テーブルを作成する

・[テーブルの作成]
image.png
・[テーブル名]入力
・[パーティションキー]入力
 →本記事では、idとします。
image.png
DynamoDBテーブル作成完了。
image.png

その2 IAMロール作成

・[ロールを作成]
image.png
・[AWSのサービス]
 →Lambdaのrole作成のため。
・[次へ]
image.png
・[Lambda]選択
image.png
・[AWSLambdaBasicExecutionRole]選択
image.png
・[AmazonDynamoDBFullAccess]選択
・[次へ]選択
image.png
・[ロール名]入力
その他はdefaultのまま。
image.png

ロール作成完了。
image.png

その3 Lambda関数の作成

・[関数の作成]選択
image.png
・[関数名]任意入力
・[ランタイム:python3.9]選択
→本記事ではpythonで作成します。
image.png
・[既存のロールを使用する]選択
・[既存のロール:その2で作成したロール]選択
・画面下部の[関数の作成]選択
image.png
関数の作成ができました。ここからは関数を編集します。
image.png
コードソース欄:

lambda_function.py
import boto3
import json

dynamodb = boto3.resource('dynamodb')
table    = dynamodb.Table('data-list')

def post_users(requestJSON):
    table.put_item(Item={'id': requestJSON['id'], 'title': requestJSON['title'], 'price': requestJSON['price'], 'decribe': requestJSON['decribe']})

def lambda_handler(event, context):
    request = json.loads(event['body'])
    post_users(request)

・注意:Deployを忘れずに。
image.png

その4 APIGateway

・[RESTAPI 構築]選択
image.png
・[プロトコルを選択する:REST]
・[新しいAPIの作成:新しいAPI]
・[名前と説明 API名*:任意名]
・[APIの作成]選択
image.png

リソースの作成

image.png
作成できました。
image.png

メソッドの作成

・[アクション]選択
・[メソッドの作成]選択
image.png
・GET等のメソッドを作成します。
・Lambda関数以外はdefault状態。
・[Lambda関数:その3で作成したLambda関数]選択
・[保存]-[OK]
image.png
・[統合リクエスト]選択
image.png

・[マッピングテンプレート]選択
・[マッピングテンプレートの追加]選択
image.png
・[マッピングテンプレート下部]下記code添付 - [保存]選択
image.png

//POST メソッドの場合

post.
{
    "body" : "$util.escapeJavaScript($input.body)"
}

//GET メソッドの場合

get.
{
    "id" : "$input.params('id')"
}

・[application/json]入力
・[はい、この統合を保護します]選択
image.png

その5 Windowsのcmdで実行

cmd.
curl -X POST -H "Content-Type: application/json" -d "{\"id\":\"01\",\"title\":\"魔王勇者\",\"price\":\"250000\",\"decribe\":\"魔王勇者の冒険\"}"  https://********************/******/*****

・[APIGateway]-[ステージ]URLの呼び出しのURLをコピペ
image.png

POSTが成功しました。
※GET,PUT,DELETE,POSTいずれも上記手順で対応可能です。
※Lambda関数のcodeは実行したいAPI内容により異なります。
image.png

その6 AngularアプリからPOST実行するには

・[CORSの有効化]選択
image.png
・[Access-Control-Allow-Origin*]に許可したいオリジンを入力。
→一時的に試すためにCORSの有効化をしたい場合は'*'ままでもOK。
image.png
・[CORS を有効にして既存の CORS ヘッダーを置換]を選択

angular.ts
//[APIGateway]-[ステージ]URLの呼び出しのURLを urlで第一引数にセットしてます。
//DynamoDBに追加したい内容をbodyにobj型で第二引数にセット。
    const body = {
      id:"02",
      title:"転スラ",
      price:4890,
      decribe:"転生物語"
    }
    return this.HTTP.post(this.url,body);

http.ts
 //HTTPCLIENTで接続する方法です。
    /**
   * @POST
   * @param uri 
   */
    public post(uri:string,body:any):any{

      return this.HttpClient.post(uri,body)
      .pipe(
        catchError(this.handleError),
      );
    }

処理後に、AWS DynamoDBにレコード追加されてるか確認してレコード追加されてれば簡単ではあるが一連の流れはつかめたとおもいます。

最後に

休みの日に10時間くらいかけてAPIGatewayやLambdaの意味や役割がよくわかってない状態からここまでまとめましたため不備や誤りが生じているかもしれません。
実運用には本記事は参考にせず、一連の流れを簡単に把握する目的で閲覧ください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?