Serverless FrameworkなどでデプロイしたLambdaをask-cliから利用する

この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の24日目の記事です。 ask-cliでalexa-sdkのスキルをデプロイ・シュミレートするの最後で少し触 […]

広告ここから
広告ここまで

目次

    この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の24日目の記事です。

    ask-cliでalexa-sdkのスキルをデプロイ・シュミレートするの最後で少し触れたのですが、ask-cliではデプロイ済みのLambdaをターゲットにすることができます。

    LambdaのARNを取得

    まずはaws lambda list-functionsで指定したいLambdaのarnを調べましょう。

    $ aws lambda list-functions | jq ".Functions[] | .FunctionArn"
    "arn:aws:lambda:us-east-1:999999:function:alexa-kyoto-city-guid-v0-0-1-alexaCityGuide"
    "arn:aws:lambda:us-east-1:999999:function:ask-custom-example-skill-test-hide-dev"
    "arn:aws:lambda:us-east-1:999999:function:ask-custom-example-sample"
    

    skill.jsonの変更

    skillManifest.apis.customのデータを以下のように変更します。

    変更前

    "apis": {
          "custom": {
            "endpoint": {
              "sourceDir": "lambda/custom"
            }
          }
        }
    

    変更後

    "apis": {
          "custom": {
            "endpoint": {
              "uri": "arn:aws:lambda:us-east-1:999999:function:ask-custom-example-sample"
            },
            "regions": {
              "NA": {
                "endpoint": {
                  "uri": "arn:aws:lambda:us-east-1:99999:function:ask-custom-example-sample"
                }
              }
            }
          }
        }
    

    デプロイ

    あとはデプロイするだけです。

    $ ask deploy -p test
    -------------------- Create Skill Project --------------------
    Profile for the deployment: [test]
    Skill Id: amzn1.ask.skill.XXXX-XXXX-XXXX-XXX
    Skill deployment finished.
    Model deployment finished.
    [Warning]: Lambda deployment skipped, since AWS credentialsfor profile: [test] hasn't been set up yet.
    

    もしCannot find valid lambda function with the given name, nor find sourceDir as codebase path to create lambda function.が出てエラーになる場合は、ask initでAWS-CLIのプロファイルを指定していないプロファイルを新しく作成してみてください。

    ask-cliかServerless Frameworkかそれとも

    ask-cliだけにすることで手軽にLambdaのデプロイができます。
    ただしServerless FrameworkでLambdaを管理することで、LambdaのIAMの設定や各種プラグインでよしなにすることができるなどのメリットを享受することができます。

    そしてCloudFormationもといSAMを使った場合は、AWS Serverless Application Repositoryに公開されたスキルバックエンドなどが今後出た場合に簡単に利用することができるようになるかなと思います。

    どれも一長一短だとは思いますので、用法用途にあった組み合わせ方で楽しんでください。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark