📕

Lambda 実践ガイド(第2版)で詰まった箇所

2023/07/26に公開

はじめに

2023/7/15~7/30にかけてインプレス出版の「Lambda 実践ガイド(第2版)」を一通り行ったので、詰まった箇所について備忘録をして残しておく。
出版日が2022/3/1ということで書籍通りではうまくいかない箇所があったり、書籍の内容が不足しているところがあったためどなたかの役にも立てば幸いです。

注意すべき点

1. CLIのアップグレード

こちらはp.139に載っているのでその通りに行えば問題ないのだが、コラムだったため操作を飛ばしたところエラーが出て進まなくなった。
Cloud9の元々のCLIのバージョンは以下のようになっていた(aws --version で確認)

aws-cli/1.19.112 Python/2.7.18 Linux/4.14.320-242.534.amzn2.x86_64 botocore/1.20.112

最新バージョンのインストール方法(AWS公式サイト)

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
aws-cli/2.13.3 Python/3.11.4 Linux/4.14.320-242.534.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off

2系に切り替わっていることを確認する。

2. urllibの変更

第5章 S3のイベント処理の「5-6 別のバケットにファイルを書き出す」のp.236でバケットにファイルが置かれなかった。修正後、ファイルの保存やコマンドの再実施も行う(sam --use-container, sam deploy)
hello_world/requirements.txtに以下の内容を追記をすることで解決した。

requirements.txt
urllib3>2

3. ペイロードの変更

第6章 API Gateway、DynamoDB、SESとの連携の「6-3-7 ブラウザからAPI Gatewayを呼び出す」のp.294で以下のようなエラーが出た。

{"message": "Internal Server Error"}

結論、Lambdaの設計図からAPI Gatewayを作成するとペイロードが1.0になってしまうので、API Gatewayのマネジメントコンソールからペイロードを2.0に変更する。
参考:Lambdaの設計図からAPI GatewayのHTTP APIを作成する時にはペイロード形式のバージョンに注意

4. Lambdaマッピングの設定

第6章 API Gateway、DynamoDB、SESとの連携の「6-9-3 API Gatewayからカスタムドメインを設定する」のp.376でAPIマッピングのパス(オプション)にuserregistFunctionを入れてしまうとp.380でエラーとなってしまう。
結論、APIのマッピングのパスには何も入れず、アクセスしたところ問題なく実行できた。

5. S3バケット作成時のアクセスコントロール

S3のCloudFormationでは作成時にパブリックアクセスの許可が出来なくなった。
参考:[アップデート]Amazon S3の新規バケットのブロックパブリックアクセスが有効化およびACLが無効化されました。
一旦以下の内容で作成し、マネジメントコンソールで手動で変更した。

template.yml
  # S3バケット
  S3FormBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
  
  #上記S3バケットのポリシーなし
  

6. 環境変数の指定

第7章 SQSやSNSを使った連携の「7-5-2 SNSトピックでバウンスメールを処理する」のp.468でDynamoDBテーブルの環境変数を事前に設定しておくか以下のようにそのまま打ち込む。

table = dynamodb.Table('mailaddress')

7. app.pyファイルの修正

第7章 SQSやSNSを使った連携の「7-6-3 Lambda関数の実装」のp.475 リスト7-5でテーブル名が前のハンズオンの名前(mailaddress)になっている。以下に修正する。

send_mail/app.py
table = dynamodb.Table('mailaddress2')

8. Lambda関数のポリシー

第7章 SQSやSNSを使った連携の「7-6-4 template.ymlを作る」のp.478でLambda関数のポリシーの権限が足らず作成エラーとなる。
ひとまずこれまで使ってきた「example-lambda-role」でエラーが解消された。

おわりに

まだまだサーバレスは初心者だが少しづつ力をつけていきたい。

Discussion