gpt4 book ai didi

aws-lambda - aws sam 发布/部署流程

转载 作者:行者123 更新时间:2023-12-02 02:47:08 25 4
gpt4 key购买 nike

我没有完全掌握与 sam 一起发布/部署的流程。我最大的问题是我的 sam 模板声明了一个 AWS::Serverless::Function并且 CodeUri 参数强制我放入一个 s3 存储桶 url。

我见过一些示例,其中 CodeUri 只是您计算机上代码资源的路径。当我尝试这个时,山姆提示

'CodeUri' is not a valid S3 Uri of the form "s3://bucket/key" with optional versionId query parameter.



为了解决这个问题,我必须
  • 将我的函数的 CodeUri 更改为模板中代码的根文件夹
  • 进入AWS控制台,删除我s3桶中的资源,否则sam包不会上传
  • 运行 sam 包上传我更新的代码资源
  • 复制新的 s3 资源 key
  • 回到我的模板并用新的 s3 存储桶 uri 替换 CodeUri
  • 运行 sam 部署

  • 这是非常令人讨厌的。

    我错过了什么?
    { 
    "Description" : "Serverless backend",
    "Transform" : "AWS::Serverless-2016-10-31",
    "Globals" : {
    },
    "Resources" : {
    "db" : {
    "Type": "AWS::RDS::DBInstance",
    "Properties" : {
    "AllocatedStorage": "20",
    "DBInstanceClass": "db.t2.micro",
    "DBName": "nameforthedb",
    "DeleteAutomatedBackups": true,
    "Engine": "postgres",
    "MasterUsername": "masterUserName",
    "MasterUserPassword": "******",
    "PubliclyAccessible": true
    }
    },
    "signIn" : {
    "Type": "AWS::Serverless::Function",
    "Properties": {
    "Handler": "index.signIn",
    "Runtime": "nodejs8.10",
    "CodeUri": "src", <--- complains when this is set to this. Code lives in the src folder. this is fine when I run sam package, but has to be changed to the s3 bucket when running sam deploy
    "FunctionName": "signIn",
    "Events": {
    "SignIn" : {
    "Type": "Api",
    "Properties" : {
    "Path" : "/signIn",
    "Method" : "post"
    }
    }
    }
    }
    },
    "Auth" : {
    "Type" : "AWS::Cognito::UserPool",
    "Properties": {
    "Schema" : [
    {
    "AttributeDataType": "String",
    "Name": "email",
    "Mutable": true,
    "Required": true
    },
    {
    "AttributeDataType": "String",
    "Name": "family_name",
    "Mutable": true,
    "Required": true
    },
    {
    "AttributeDataType": "String",
    "Name": "given_name",
    "Mutable": true,
    "Required": true
    },
    {
    "AttributeDataType": "String",
    "Name": "houseId",
    "Mutable": true
    },
    {
    "AttributeDataType": "Boolean",
    "Name": "owner",
    "Mutable": true
    }
    ],
    "UsernameAttributes": ["email"]
    }
    }
    }
    }

    最佳答案

    TemporaryFix 的评论是对此的正确答案。 AWS SAM 将工件正确上传到 s3,然后生成更新的模板文件。您需要指定 --template-output-path packaged.yaml运行时 sam package ,然后此命令将生成文件,其中包含对您的函数的 s3 存储桶的引用。然后您必须指定 --template-file packaged.yaml运行 deploy command

    就像是:


    sam build

    sam package --s3-bucket your-bucket --output-template-file packaged.yaml

    sam deploy --template-file packaged.yaml \
    --region eu-west-1 \
    --capabilities CAPABILITY_IAM \
    --stack-name your-stack


    关于aws-lambda - aws sam 发布/部署流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com