1
/
5
This page is intended for users in Japan. Go to the page for users in United States.

Serverless Frameworkで出たエラーの対処法(ちょっとだけ)【エンジニアブログより】

はじめに

花粉がかなり舞って、マスクしてる方多いですよね。僕の周りの方々もくしゃみしたりして大変そうです。
今回はエラー特集と題して、Serverless Frameworkを使ってて出たエラーの対処法(ちょっとだけ)をお送りします。
(後、やったほうがいいことも)


エラーその1 「Missing required key 'Bucket' in params」

エラー内容

最初にserverless.ymlの「service」名を変更した後、sls deployを実行したときにこのようなエラーが発生しました。

An error occurred: ServerlessDeploymentBucket - API: s3:CreateBucket Access Denied.

S3の権限がないのかと思い、serverless.ymlを見直してもフルアクセスになってました

        {
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::*"
]
},

sls deply と sls remove を繰り返し実行していると、以下のメッセージに到達。

user@ubuntu:~/serverlessframework$ sls deploy
Serverless: Installing requirements of requirements.txt in .serverless...
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless Error ---------------------------------------
Missing required key 'Bucket' in params
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Forums: forum.serverless.com
Chat: gitter.im/serverless/serverless
Your Environment Information -----------------------------
OS: linux
Node Version: 9.5.0
Serverless Version: 1.26.1

対処

一番最初に出てたエラーメッセージ
An error occurred: ServerlessDeploymentBucket - API: s3:CreateBucket Access Denied.
をキーワードに調査してみると CloudFormationというキーワードが出てきたので、Stackを削除。
以後は正常にデプロイされました。

その他

他にも確認するべきところがあり、S3バケットが上限(100)に達していないかなども確認しておくべきポイントです。


エラーその2 「ServerlessError: Signature expired」

エラー内容

単純にデプロイ sls deployを実行してみました。すると以下のメッセージが出力

  Serverless Error ---------------------------------------

ServerlessError: Signature expired: 20180412T100757Z is now earlier than 20180412T101229Z (20180412T101729Z - 5 min.)

Stack Trace --------------------------------------------

AWSにデプロイするときにクライアント側の時刻が現在時刻と10分以上差があったので、

Signature expired

が発生。

対処

時刻がズレてるので、時刻同期をしました。

$ sudo ntpdate -v ntp.nict.jp

参考URL


番外編:やったほうがいいこと

Serverless Frameworを使って開発を行っているとどうしてもserverless.ymlが大きくなってメンテナンスがしにくくなってきます。
そんなときにファイルを分けて書く方法があります。

分割前

service: sls-sample

plugins:
- serverless-python-requirements
provider:
name: aws
runtime: python3.6

# you can overwrite defaults here
stage: dev
region: ap-northeast-1

# AWS IAM for Lambda
iamRoleStatements:
- Effect: "Allow"
Action:
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
Resource:
- "*"
- Effect: "Allow"
Action:
- "dynamodb:PutItem"
- "dynamodb:GetItem"
Resource:
- "*"
- Effect: "Allow"
Action:
- "sns:Publish"
Resource:
- "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxx:example-topic"
- Effect: "Allow"
Action:
- "logs:CreateExportTask"
Resource:
- "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxxx:log-group:/aws/lambda/lambda-log:log-stream:"

functions:
lambda_handler001:
handler: handler.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler002:
handler: handler.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler003:
handler: handler.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler004:
handler: handler.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler005:
handler: handler.main
events:
- schedule: cron(0 * ? * * *)


分割後

serverless.yml

service: sls-sample

plugins:
- serverless-python-requirements
provider:
name: aws
runtime: python3.6

# you can overwrite defaults here
stage: dev
region: ${file(./config/aws.yml):region}

# AWS IAM for Lambda
iamRoleStatements:
- Effect: "Allow"
Action:
- "ec2:CreateNetworkInterface"
- "ec2:DescribeNetworkInterfaces"
- "ec2:DeleteNetworkInterface"
Resource:
- "*"
- Effect: "Allow"
Action:
- "dynamodb:PutItem"
- "dynamodb:GetItem"
Resource:
- "*"
- Effect: "Allow"
Action:
- "sns:Publish"
Resource:
- "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxx:example-topic"
- Effect: "Allow"
Action:
- "logs:CreateExportTask"
Resource:
- "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxxx:log-group:/aws/lambda/lambda-log:log-stream:"

functions:
${file(./config/functions.yml)

config/functions.yml

  lambda_handler001:
handler: handler001.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler002:
handler: handler002.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler003:
handler: handler003.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler004:
handler: handler004.main
events:
- schedule: cron(0 * ? * * *)
lambda_handler005:
handler: handler005.main
events:
- schedule: cron(0 * ? * * *)

config/aws.yml

region: ap-northeast-1

それから

これ以外にも色々serverless.ymlの書き方があるので、それについてはまた別のタイミングで書きます。

さいごに

使ってると色々問題にブチ当たって解決していくかと思います。
これからも継続的にアウトプットしていこうかと思います。
尚、私の花粉症アウトプットは今のところ、くしゃみのみです。
それでは。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング