12

我正在按照本教程学习如何使用SAM

这是我的代码:

模板.yml

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10

index.js

exports.handler = async function(event, context) {
    return 'Hello World!';
};

当我跑

sam package \
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket brian-test-sam

我得到错误说Unable to upload artifact None referenced by CodeUri parameter of HelloWorldFunction resource. An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

为什么会这样?

我已经brian-test-sam在我的 AWS 账户上创建了 S3 存储桶。我已检查我的 IAM 用户是否具有AmazonS3FullAccess权限。

命令

sam --debug package \                                                                                           <aws:dev-bionime>
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket brian-test-sam

说错误是由aws cloudformation package --output-template-file package.yml --s3-bucket brian-test-sam --template-file /path/to/my/files/helloworld/template.yml

我的 cloudformation 有什么问题?

我的 aws cli 版本是aws-cli/1.16.169 Python/3.7.3 Darwin/18.6.0 botocore/1.12.159. 我的npm版本是6.10.1.

4

8 回答 8

9

即使我遇到了这个问题,我也采取了以下行动。

问题是由于 app.py 和 sam package 命令中的存储桶不匹配,因此更正了存储桶名称并再次运行“sam build”和“sam package”命令,它对我有用!

再注意一点,如果您在运行“sam package”时遇到与时间相关的问题,那么应该有无效的系统时间,纠正它并再次运行“sam package”。

于 2019-08-13T06:58:45.013 回答
4

我发现这个错误是因为我没有添加对运行构建的服务角色的 S3 访问

在角色的权限选项卡上,选择“附加策略”按钮并选择“AmazonS3FullAccess”,通过“附加策略”按钮附加它。

现在重新运行您的构建。

于 2020-08-22T04:09:24.520 回答
1

对我来说,问题是我的 aws 凭据来自错误的帐户。aws s3 ls很快就显示了这个问题。

于 2021-10-20T15:21:09.423 回答
1

我在运行以下命令时遇到了同样的问题:

sam package \
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket <your_bucket_name>

上面的命令缺少带有默认配置文件的 AWS 凭证。[我在 AWS 配置中没有默认配置文件] 如果没有找到默认配置文件,您可能需要在命令中提供配置文件名称,如下所示

sam package \
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket brian-test-sam \
  --profile <profile_name>
于 2020-11-06T05:04:07.497 回答
0

您需要提供CodeUri指向本地目录的属性。

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: ./code
于 2019-07-19T10:55:22.197 回答
0

In general this type of issue is likely to be caused by the account being used for the CloudFormation deployment not having access to a specified S3 bucket that resources need to be uploaded to during the deployment. You can try the following:

  • Create a new S3 bucket using the same account that the deployment is being run under, and ensure that this is the bucket that's used in the deployment
  • Ensure the account has full access to S3 as explained in the answer by @JiminyJames - https://stackoverflow.com/a/63532472/1549918
于 2022-01-17T05:00:18.007 回答
0

当您执行 asam build后跟 asam deploy并且您没有指定构建步骤创建的模板文件时,也会发生这种情况。如果您删除 --template-file 或将其指向在 sam build 中创建的 .aws 文件,它可以解决此问题。

于 2022-02-01T17:44:32.617 回答
0
Uploading to 5ede295b3d735d7cadf2a5368bcff051  124068 / 124068.0  (100.00%)
Successfully packaged artifacts and wrote output template to file package.yaml.
Execute the following command to deploy the packaged template..........

通过应用如下存储桶策略为我工作

{
    "Version": "2012-10-17",
    "Id": "Policy1624441771081",
    "Statement": [
        {
            "Sid": "Stmt1624441768741",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "<your_bucket_arn>/*"
        }
    ]
}
于 2021-06-23T10:03:56.943 回答