| サンプル集 |
|
■VC ■C# ■Java ■BorlandC ■LinuxC ■MS-DOS ■bash ■Excel VBA ■VBScript ■PHP ■HTML ■perl ■iPhone ■Android ■Lua ■WordPress ■PowerShell ■Python ■Flutter ■other |
| Linuxコマンド |
| 用語集 |
| debian メモ |
| apache2 メモ |
| MySQL メモ |
| Oracle メモ |
| HOME |
サービス欄に「Lambda」と入力しLambdaの画面を開きます。

「関数の作成」をクリックします。

以下の情報を入力します。
| 関数名 | jsondump |
|---|---|
| ランタイム | Python 3.10 |
画面を下にスクロールさせて「関数の作成」をクリックします。

eventの内容をログに出すようにします。
| lambda_function.py | ||
|
「トリガーを追加」をクリックします。

「ソースを選択」をクリックします。

「API Gateway」を選択し、APIタイプは「REST API」を選択します。

「追加」をクリックします。

「triggerの作成中にエラーが発生しました。上記のエラーを修正してください。」と画面下に表示されました。 「セキュリティ」欄の下に「このフィールドは必須です。」と表示されています。

「セキュリティ」で「IAM」を選択し「追加」をクリックします。

トリガーの位置に「API Gateway」が追加されました。
「API Gateway」をクリックします。

「API エンドポイント」の後ろに表示されているURLをクリックします。

Missing Authentication Token(認証トークンが見つかりません)と表示されました。
「API Gateway」の後ろに表示されている「jsondump-API」をクリックします。

メソッドリクエストの左の枠に表示されている「テスト」をクリックします。

画面を下にスクロールさせます。

「テスト」をクリックします。

下に結果が表示されました。
jsonをPOSTするプログラムを作ります。
| jsonpost.py | ||
|
実行してみます。
Traceback (most recent call last):
File "C:\pywork\jsonpost.py", line 11, in <module>
with urllib.request.urlopen(req) as res:
File "C:\...\request.py", line 214, in urlopen
return opener.open(url, data, timeout)
File "C:\...\request.py", line 523, in open
response = meth(req, response)
File "C:\...\request.py", line 632, in http_response
response = self.parent.error(
File "C:\...\request.py", line 561, in error
return self._call_chain(*args)
File "C:\...\request.py", line 494, in _call_chain
result = func(*args)
File "C:\...\request.py", line 641, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
上の実行結果の...には「Users\xxx\AppData\Local\Programs\Python\Python39\lib\urllib」が表示されていました。
やはり403: Forbiddenが出ました。
curlコマンドでアクセスしてみます。
jsondump -iHTTP/1.1 403 Forbidden
Date: Sat, 08 Jul 2023 13:23:39 GMT
Content-Type: application/json
Content-Length: 42
Connection: keep-alive
x-amzn-RequestId: 44400000-00cc-44bb-aaaa-aaa999fff555
x-amzn-ErrorType: MissingAuthenticationTokenException
x-amz-apigw-id: HHH222bbbjjjmmm=
{"message":"Missing Authentication Token"}
結果は同じく403: Forbiddenでした。
API Gatewayの「設定」をクリックします。

「AuthenticationToken」で検索していたところ以下のページを見つけました。

リンクをクリックします。

「API メソッドで AWS Identity and Access Management (IAM) 認証がオンになっている場合に、APIリクエストが署名されていない」が原因のようです。
API Gatewayのステージのdefaultをクリックします。

レートとバーストを1にして「変更を保存」をクリックしました。
APIのリソースを開きます。

「アクション」を選択し「API のデプロイ」を選択します。

「デプロイされるステージ」のリストをクリックします。

「default」を選択し「デプロイ」をクリックします。
状況は変わりませんでした。
APIのリソースを開きます。

「メソッドリクエスト」をクリックします。

「許可」がAWS IAMになっています。リストから「なし」を選択し右のチェックマークをクリックします。
状況は変わりませんでした。
APIのデプロイをしたところアクセスできるようになりました。

Pythonのプログラムからもアクセスできました。
"Hello from Lambda!"
curlコマンドでもアクセスできました。
jsondump -iHTTP/1.1 200 OK
Date: Sun, 09 Jul 2023 00:32:07 GMT
Content-Type: application/json
Content-Length: 20
Connection: keep-alive
x-amzn-RequestId: 00066688-33aa-44bb-8833-555eeebbbeee
x-amz-apigw-id: HHHxxx555jjjhhh=
X-Amzn-Trace-Id: Root=1-666aaa00-000777777888666666000ddd;Sampled=0;l
ineage=22233377:0"Hello from Lambda!"
API Gatewayの許可設定をなしにしておくのは怖いのでAWS IAMに戻してデプロイしなおしておきました。
Copyright (C) 2023 - 2025 ymlib.com
