はじめに
serverless framework v4でAPI Gatewayのログを設定すると、The role with name serverlessApiGatewayCloudWatchRole cannot be found.
というエラーが出てデプロイできない不具合がありました。serverlessApiGatewayCloudWatchRole
という名前でIAM Roleを作れば解決するのですが、初見殺しすぎるので解決方法を共有します。
事象
以下のようにserverless.ymlでAPI Gatewayのログを出力するように設定します。
provider:
name: aws
logs:
websocket: true
これでsls deploy
をすると、以下のエラーが出て、デプロイに失敗します。
✖ An error occurred: CustomApiGatewayAccountCloudWatchRole - Received response status [FAILED] from custom resource. Message returned: The role with name serverlessApiGatewayCloudWatchRole cannot be found. See details in CloudWatch
解決策
serverlessApiGatewayCloudWatchRole
という名前のIAM Roleを作成します。
一度IAM Roleを作成すれば、そのAWSアカウント内では大丈夫です。
作成するIAM Role
以下の設定でIAM Roleを作成します。
- 信頼されたエンティティタイプ = AWSのサービス
- サービスまたはユースケース = API Gateway
- ユースケース = API Gateway
許可ポリシーにAmazonAPIGatewayPushToCloudWatchLogs
がデフォルトで選択されているので、そのまま次へ
をクリック。
ロール名にserverlessApiGatewayCloudWatchRole
を入力して、ロールを作成する。
参考文献
API Gateway で「CloudWatch Logs role ARN must be set in account settings to enable logging」が発生するときの対処方法
https://dev.classmethod.jp/articles/tsnote-apigw-what-to-do-when-cloudwatch-logs-role-arn-must-be-set-in-account-settings-to-enable-logging-occurs-with-api-gateway/