新しいAWSアカウントではLambdaの同時実行数が10に制限されていたので、AWS CLIで緩和申請した
新しく作ったAWSアカウントで、Lambdaの同時実行数のクォータが10だったため、予約された同時実行数を指定したcdk deployが失敗した記録。AWS CLIでの緩和申請、申請先リージョンの確認、CASE_CLOSED後の適用値の確認まで。
目次
Organizationsで新しく作ったAWSアカウントに、AWS CDKでLambda関数をデプロイしようとしたところ、同時実行数のクォータに引っかかって失敗しました。クォータの緩和申請から反映の確認までAWS CLIだけで済んだので、その流れをまとめました。
遭遇したエラー
cdk deployを実行すると、Lambda関数の作成でCREATE_FAILEDになりました。
CREATE_FAILED | AWS::Lambda::Function | RenderFunction6D95D9E3
Resource handler returned message: "Specified ReservedConcurrentExecutions for function decreases account's Unreserved
ConcurrentExecution below its minimum value of [10]. (Service: Lambda, Status Code: 400, ...)"
このLambda関数にはreservedConcurrentExecutions(予約された同時実行数)を指定しています。その分を予約すると、アカウントに残る未予約の同時実行数が最小値の10を下回ってしまう、というエラーです。
作ったばかりのアカウントは同時実行数のクォータが10だった
Service Quotasで、Lambdaの同時実行数(Concurrent executions、クォータコードL-B99A9384)の現在値を見てみます。
aws service-quotas get-service-quota \
--service-code lambda --quota-code L-B99A9384 --query Quota.Value
10.0
デフォルト値は1,000のはずですが、このアカウントでは10でした。Lambdaのクォータのドキュメントを見ると、新しいAWSアカウントは同時実行数とメモリのクォータが引き下げられていて、利用状況に応じてAWSが自動で引き上げると書かれています。
クォータが10で、未予約として残さないといけない最小値も10なので、予約に回せる分がありません。reservedConcurrentExecutionsにどんなに小さい値を指定しても失敗します。デプロイのトラブルシューティングのページにも同じエラーが載っていて、クォータの引き上げを申請するよう案内されていました。
緩和申請はAWS CLIからも出せる
クォータの引き上げは、AWS CLIのservice-quotas request-service-quota-increaseでも申請できます。
aws service-quotas request-service-quota-increase \
--service-code lambda --quota-code L-B99A9384 --desired-value 1000
実行すると、申請がPENDINGで登録されました(出力は一部抜粋)。
{
"RequestedQuota": {
"Id": "975cd47ebe3946dfad7ae367791a87d372Y0gJCX",
"ServiceCode": "lambda",
"QuotaCode": "L-B99A9384",
"QuotaName": "Concurrent executions",
"DesiredValue": 1000.0,
"Status": "PENDING",
"QuotaArn": "arn:aws:servicequotas:us-west-2:...:lambda/L-B99A9384",
"QuotaRequestedAtLevel": "ACCOUNT"
}
}
クォータはリージョンごとなので、申請先のリージョンを確認する
ところが、返ってきたQuotaArnを見るとus-west-2になっていました。Lambdaの同時実行数のクォータはリージョンごとなので、これではデプロイ先の東京リージョンのクォータは増えません。--regionを付けて出し直しました。
aws --region ap-northeast-1 service-quotas request-service-quota-increase \
--service-code lambda --quota-code L-B99A9384 --desired-value 1000
今度はQuotaArnがarn:aws:servicequotas:ap-northeast-1:...になりました。
ステータスがCASE_CLOSEDになったら、適用値を確認する
申請の状況はlist-requested-service-quota-change-history-by-quotaで追えます。
aws --region ap-northeast-1 service-quotas list-requested-service-quota-change-history-by-quota \
--service-code lambda --quota-code L-B99A9384 \
--query 'RequestedQuotas[0].Status' --output text
CASE_CLOSED
東京リージョンへの申請は、およそ9時間でCASE_CLOSEDになりました。ただ、CASE_CLOSEDは承認されたという意味ではありません。Service QuotasのAPIリファレンスによると、これは申請に紐づくサポートケースがクローズされた状態です。結果はサポートケースのやり取りで確認するよう書かれています。ステータスだけでは承認されたかどうかが分からないので、適用されている値を直接見ました。
aws --region ap-northeast-1 service-quotas get-service-quota \
--service-code lambda --quota-code L-B99A9384 --query Quota.Value
1000.0
Lambda側からも、get-account-settingsで確認できます。
aws --region ap-northeast-1 lambda get-account-settings --query AccountLimit
{
"TotalCodeSize": 322122547200,
"CodeSizeUnzipped": 262144000,
"CodeSizeZipped": 52428800,
"ConcurrentExecutions": 1000,
"UnreservedConcurrentExecutions": 1000
}
同時実行数も、未予約の同時実行数も1,000に増えていました。
まとめ
新しく作ったAWSアカウントでは、Lambdaの同時実行数のクォータがデフォルトの1,000より少ない10になっていることがあり、その状態で予約された同時実行数を指定するとデプロイが失敗します。緩和申請はAWS CLIから出せますが、申請先のリージョンと、CASE_CLOSEDになったあとの適用値は自分で確認しましょう。
新しく作ったアカウントでこういう制限に引っかかるのは面白いところでしたし、緩和申請がCLIで出せるというのも今回の発見でした。