CloudFormation не может создать AlexaSkill - ресурс не найден - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать навык Alexa, используя AWS CloudFormation с шаблоном ниже.Я сгенерировал токен обновления, используя процесс, описанный здесь с --scope alexa::ask:skills:readwrite.Однако, когда я пытаюсь создать стек, он не работает на Alexa::ASK::Skill с загадочным сообщением об ошибке:

Произошла ошибка при обновлении навыка.Причина: Ресурс не найден.

Все остальные ресурсы в стеке успешно создаются до его сбоя на AlexaSkill. Что может быть причиной этого сообщения об ошибке?

Обратите внимание: я пробовал это несколько раз, поэтому это не было ошибкой CloudFormation.

Редактировать: Этонаходится в регионе us-east-1 (North Virginia).

Обновление: я полагаю, что проблема связана с конечной точкой лямбды uri в манифесте навыка, потому что, если я жестко закодирую uri для функции, которая не существует, я получаю ту же ошибку.

Parameters:
  SkillName:
    Type: String
  BucketName:
    Type: String
  AlexaDeveloperClientId:
    Type: String
  AlexaDeveloperClientSecret:
    Type: String
  AlexaDeveloperRefreshToken:
    Type: String
  AlexaDeveloperVendorId:
    Type: String

Resources:
  AlexaS3ReadRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - alexa-appkit.amazon.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

  AlexaSkill:
    Type: Alexa::ASK::Skill
    Properties:
      AuthenticationConfiguration:
        ClientId: !Ref AlexaDeveloperClientId
        ClientSecret: !Ref AlexaDeveloperClientSecret
        RefreshToken: !Ref AlexaDeveloperRefreshToken
      SkillPackage:
        Overrides:
          Manifest:
            apis:
              custom:
                endpoint:
                  uri: !GetAtt LambdaFunction.Arn
        S3Bucket: !Ref BucketName
        S3BucketRole: !GetAtt AlexaS3ReadRole.Arn
        S3Key: !Sub ${SkillName}_skill_package.zip
      VendorId: !Ref AlexaDeveloperVendorId

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole

  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket: !Ref BucketName
        S3Key: !Sub ${SkillName}_lambda_package.zip
      FunctionName: !Sub bp_alexa_${SkillName}
      Handler: main.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: python3.7

Вот история событий стека:

2019-09-24 17:21:53 UTC-0400    bp-alexa-play-fortnite-stack    ROLLBACK_COMPLETE   -   AWS::CloudFormation::Stack
2019-09-24 17:21:52 UTC-0400    LambdaExecutionRole DELETE_COMPLETE -   AWS::IAM::Role
2019-09-24 17:21:50 UTC-0400    LambdaExecutionRole DELETE_IN_PROGRESS  -   AWS::IAM::Role
2019-09-24 17:21:50 UTC-0400    AlexaS3ReadRole DELETE_COMPLETE -   AWS::IAM::Role
2019-09-24 17:21:49 UTC-0400    LambdaFunction  DELETE_COMPLETE -   AWS::Lambda::Function
2019-09-24 17:21:49 UTC-0400    LambdaFunction  DELETE_IN_PROGRESS  -   AWS::Lambda::Function
2019-09-24 17:21:49 UTC-0400    AlexaS3ReadRole DELETE_IN_PROGRESS  -   AWS::IAM::Role
2019-09-24 17:21:48 UTC-0400    AlexaSkill  DELETE_COMPLETE -   Alexa::ASK::Skill
2019-09-24 17:21:46 UTC-0400    AlexaSkill  DELETE_IN_PROGRESS  -   Alexa::ASK::Skill
2019-09-24 17:21:45 UTC-0400    bp-alexa-play-fortnite-stack    ROLLBACK_IN_PROGRESS    The following resource(s) failed to create: [AlexaSkill]. . Rollback requested by user. AWS::CloudFormation::Stack
2019-09-24 17:21:44 UTC-0400    AlexaSkill  CREATE_FAILED   Error occurred while updating the skill. Cause: Resource not found. Alexa::ASK::Skill
2019-09-24 17:21:32 UTC-0400    AlexaSkill  CREATE_IN_PROGRESS  Resource creation Initiated Alexa::ASK::Skill
2019-09-24 17:21:29 UTC-0400    AlexaSkill  CREATE_IN_PROGRESS  -   Alexa::ASK::Skill
2019-09-24 17:21:27 UTC-0400    LambdaFunction  CREATE_COMPLETE -   AWS::Lambda::Function
2019-09-24 17:21:27 UTC-0400    LambdaFunction  CREATE_IN_PROGRESS  Resource creation Initiated AWS::Lambda::Function
2019-09-24 17:21:26 UTC-0400    LambdaFunction  CREATE_IN_PROGRESS  -   AWS::Lambda::Function
2019-09-24 17:21:23 UTC-0400    LambdaExecutionRole CREATE_COMPLETE -   AWS::IAM::Role
2019-09-24 17:21:23 UTC-0400    AlexaS3ReadRole CREATE_COMPLETE -   AWS::IAM::Role
2019-09-24 17:20:13 UTC-0400    LambdaExecutionRole CREATE_IN_PROGRESS  Resource creation Initiated AWS::IAM::Role
2019-09-24 17:20:12 UTC-0400    LambdaExecutionRole CREATE_IN_PROGRESS  -   AWS::IAM::Role
2019-09-24 17:20:12 UTC-0400    AlexaS3ReadRole CREATE_IN_PROGRESS  Resource creation Initiated AWS::IAM::Role
2019-09-24 17:20:11 UTC-0400    AlexaS3ReadRole CREATE_IN_PROGRESS  -   AWS::IAM::Role
2019-09-24 17:20:08 UTC-0400    bp-alexa-play-fortnite-stack    CREATE_IN_PROGRESS  User Initiated  AWS::CloudFormation::Stack

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Скорее всего, вы пытаетесь развернуть стек в регионе, где ресурс недоступен.Если возможно, попробуйте сначала развернуть его в N.Virginia.

0 голосов
/ 25 сентября 2019

Возможно, вам не нужно / не нужно объявлять раздел переопределений.Особенно, если вы планируете использовать такие вещи, как ASK CLI для обновлений и тому подобное, потому что каждый раз, когда вы повторно развертываете с CLI, вам нужно будет отправлять произвольное обновление облачной информации, чтобы переопределить ваш ARN, который будет определен в манифесте навыка.Это может создать путаницу относительно того, что является реальной конечной точкой в ​​данный момент времени.Я бы сказал, просто объявите эту конечную точку в Манифесте навыков.Скорее, вы можете поместить лямбда-ARN в раздел выходов и поместить его в манифест или на консоль.

Другим предложением является использование псевдонимов и версий, когда вы используете лямбду для навыков Alexa.Использование псевдонимов и версий очень помогает, когда вы выполняете обновления, и вам нужны две версии кода (живая версия и разработка).

...