質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

解決済

Serverless Framework v3のデプロイが失敗する原因について【Python3.9】

yuta1989
jetstream

総合スコア50

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

2回答

0リアクション

0クリップ

403閲覧

投稿2022/07/16 10:29

編集2022/07/19 17:19

デプロイコマンド

sls deploy \ --verbose \ --force \ --region $region \ --region_type ${REGION_TYPE[$i]} \ --stage $STAGE \ --alias $API_ENV \ --test_app_name $TEST_APP_NAME \ --test_main_region $TEST_MAIN_REGION \ --test_sub_region $TEST_SUB_REGION \ --test_domain $TEST_DOMAIN \ --nr_account_id $NR_ACCOUNT_ID

エラー

Error: Cannot resolve serverless.yml: Variables resolution errored with: - Cannot resolve variable at "provider.environment.API_ENV": Value not found at "self" source

環境

Python3.9.10
Serverless Framework v3 (serverless@3.19.0)

デプロイコマンド(sls deploy)を実行したらエラーが出ました。
修正が必要な箇所を教えていただけると嬉しいです。

エラーが出ている箇所はserverless.yml の

API_ENV: ${self:provider.alias}

の部分です。
serverless-aws-aliasというプラグインを使用して、現在デプロイされているエイリアスを${self:provider.alias}で参照しているようです。
Serverless Framework3.19.0にバージョンアップした後、デプロイがエラーで失敗しました。1.61.2に戻したら、デプロイができることは確認しました。

serverless.yml

yml

service: TEST-v2-escalation-api frameworkVersion: '3' variablesResolutionMode: 20210219 configValidationMode: warn provider: name: aws runtime: python3.9 region: ${opt:region, 'ap-northeast-1'} stage: ${opt:stage, 'dev'} memorySize: 1024 timeout: 30 API_ENV: envB tracing: apiGateway: true lambda: true logs: restApi: level: INFO fullExecutionData: true stackName: ${self:custom.TEST_app_name}-${self:provider.stage}-escalation-api apiName: ${self:custom.TEST_app_name}-${self:provider.stage}-escalation-api iamRoleStatements: - Effect: "Allow" Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:DescribeLogGroups" - "logs:DescribeLogStreTEST" - "logs:PutLogEvents" - "logs:GetLogEvents" - "logs:FilterLogEvents" Resource: "*" - Effect: "Allow" Action: - "s3:*" Resource: - "arn:aws:s3:::${self:custom.masterdata-bucket_name.main}" - "arn:aws:s3:::${self:custom.masterdata-bucket_name.main}/*" - "arn:aws:s3:::${self:custom.masterdata-bucket_name.sub}" - "arn:aws:s3:::${self:custom.masterdata-bucket_name.sub}/*" - "arn:aws:s3:::${self:custom.escalation-api-bucket_name.${self:custom.region_type}}" - "arn:aws:s3:::${self:custom.escalation-api-bucket_name.${self:custom.region_type}}/*" - Effect: "Allow" Action: - "dynamodb:*" Resource: - "arn:aws:dynamodb:${self:provider.region}:#{AWS::AccountId}:table/${opt:dynamodb_table_name_phone-incidents}" - "arn:aws:dynamodb:${self:provider.region}:#{AWS::AccountId}:table/${opt:dynamodb_table_name_phone-assign}" - "arn:aws:dynamodb:${opt:TEST_main_region}:#{AWS::AccountId}:table/${opt:backlog_setting_table_name}" - "arn:aws:dynamodb:${opt:TEST_sub_region}:#{AWS::AccountId}:table/${opt:backlog_setting_table_name}" - "arn:aws:dynamodb:${opt:TEST_main_region}:#{AWS::AccountId}:table/${opt:backlog_setting_binding_table_name}" - "arn:aws:dynamodb:${opt:TEST_sub_region}:#{AWS::AccountId}:table/${opt:backlog_setting_binding_table_name}" - Effect: "Allow" Action: - "xray:PutTraceSegments" - "xray:PutTelemetryRecords" Resource: "*" - Effect: "Allow" Action: - "sts:AssumeRole" Resource: "*" environment: phone_incidents_table: ${opt:dynamodb_table_name_phone-incidents} phone_assign_table: ${opt:dynamodb_table_name_phone-assign} escalation_bucket_name: ${self:custom.escalation-api-bucket_name.${self:custom.region_type}} slack_oauth_token: ${opt:slack_oauth_token} pd_subdomain: ${opt:pd_subdomain} TEST_APPNAME: ${self:custom.TEST_app_name} TEST_STAGE: ${self:provider.stage} TEST_ACCOUNT_ID: "#{AWS::AccountId}" TEST_GLOBAL_VALUE_DOMAIN_BASE: ${opt:TEST_domain} NEW_RELIC_ACCOUNT_ID: ${opt:nr_account_id} API_ENV: ${self:provider.alias} REGION: ${self:provider.region} REGION_TYPE: ${self:custom.region_type} custom: TEST_app_name: ${opt:TEST_app_name} pythonRequirements: useDownloadCache: true useStaticCache: true newrelicPythonLambdaLayer: ap-northeast-1: arn: arn:aws:lambda:ap-northeast-1:111111111111:layer:NewRelicPython36:9 us-west-2: arn: arn:aws:lambda:us-west-2:111111111111:layer:NewRelicPython36:12 region_type: ${opt:region_type, 'secondary'} escalation-api-bucket_name: primary: ${opt:s3_bucket_escalation-api-bucket_name_primary} secondary: ${opt:s3_bucket_escalation-api-bucket_name_secondary} masterdata-bucket_name: main: ${self:custom.TEST_app_name}-${self:provider.stage}-${opt:TEST_main_region}-#{AWS::AccountId}-masterdata sub: ${self:custom.TEST_app_name}-${self:provider.stage}-${opt:TEST_sub_region}-#{AWS::AccountId}-masterdata package: exclude: - node_modules/** include: - ../../lib/** functions: # phone phone-register: name: ${self:provider.apiName}-phone-register handler: newrelic_lambda_wrapper.handler layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: phone/functions/register.main events: - http: path: phone/call method: post private: true cors: true phone-checker: name: ${self:provider.apiName}-phone-checker handler: newrelic_lambda_wrapper.handler layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: phone/functions/checker.main events: - http: path: phone/call method: get private: true cors: true phone-callback-action: name: ${self:provider.apiName}-phone-callback-action handler: newrelic_lambda_wrapper.handler layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: phone/functions/callback_action.main events: - http: path: phone/callback/action method: get private: false cors: true phone-callback-status: name: ${self:provider.apiName}-phone-callback-status handler: newrelic_lambda_wrapper.handler layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: phone/functions/callback_status.main events: - http: path: phone/callback/status method: post private: false cors: true # backlog backlog-notify: name: ${self:provider.apiName}-backlog-notify handler: newrelic_lambda_wrapper.handler # handler: backlog/functions/notify.handler layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: backlog/functions/notify.handler main_region: ${opt:TEST_main_region} sub_region: ${opt:TEST_sub_region} masterdata_bucket_name_main: ${self:custom.masterdata-bucket_name.main} masterdata_bucket_name_sub: ${self:custom.masterdata-bucket_name.sub} backlog_setting_table_name: ${opt:backlog_setting_table_name} backlog_setting_binding_table_name: ${opt:backlog_setting_binding_table_name} backlog_setting_encrypt_key: ${opt:backlog_setting_encrypt_key} backlog_setting_role_arn: ${opt:backlog_setting_role_arn} backlog_setting_role_external_id: ${opt:backlog_setting_role_external_id} events: - http: path: backlog/notify method: post private: true cors: true backlog-post: name: ${self:provider.apiName}-backlog-post #handler: newrelic_lambda_wrapper.handler handler: backlog/functions/post.main layers: - ${self:custom.newrelicPythonLambdaLayer.${self:provider.region}.arn} environment: NEW_RELIC_LAMBDA_HANDLER: backlog/functions/post.main events: - http: path: backlog/call method: post private: true cors: true # healthcheck healthcheck: name: ${self:provider.apiName}-healthcheck handler: healthcheck/functions/healthcheck.main environment: AWS_API_RETRY_COUNT: 2 # Retry count events: - http: path: healthcheck method: get plugins: - serverless-python-requirements - serverless-pseudo-parameters - serverless-plugin-include-dependencies - serverless-aws-alias

package.json

{ "name": "test-v2-escalation-api", "description": "", "version": "2.0.0", "dependencies": { "serverless-aws-alias": "^1.8.0" }, "devDependencies": { "serverless-python-requirements": "^4.2.5", "serverless-pseudo-parameters": "^2.2.0", "serverless-plugin-log-subscription": "^1.2.0", "serverless-plugin-tracing": "^2.0.0", "serverless-plugin-include-dependencies": "^3.2.1" } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。