Невозможно загрузить артефакт None, на который ссылается параметр CodeUri ресурса HelloWorldFunction
Я следую этому уроку, чтобы узнать, как использовать SAM.
Вот код, который у меня есть:
template.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
Почему это происходит?
Я создал ведро S3 brian-test-sam
на моем аккаунте AWS. Я проверил, что мой пользователь 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
Что не так с моей облачной информацией?
Моя версия aws cli aws-cli/1.16.169 Python/3.7.3 Darwin/18.6.0 botocore/1.12.159
, И мой npm
версия 6.10.1
,
10 ответов
Даже столкнувшись с этой проблемой, я предпринял следующие действия.
Проблема возникла из-за несовпадения корзины в app.py и в команде пакета sam, поэтому исправил имя корзины и снова выполнил команды "sam build" и "sam package", у меня это сработало!
Еще одна забота: если вы столкнулись с проблемой времени при запуске "пакета sam", то должно быть недействительное системное время, исправьте его и снова запустите "пакет sam".
Я обнаружил, что эта ошибка связана с тем, что я не добавил доступ S3 к роли службы, которая запускает сборку.
На вкладке "Разрешения" в разделе "Роль" выберите кнопку "Прикрепить политики" и выберите "AmazonS3FullAccess", прикрепите его с помощью кнопки "Прикрепить политику".
Теперь перезапустите вашу сборку.
Для меня проблема заключалась в том, что мои учетные данные aws были из неправильной учетной записи.
aws s3 ls
показал проблему довольно быстро.
Я только что обновил свои учетные данные профиля AWS, и у меня это сработало.
Как правило, проблема такого типа может быть вызвана тем, что учетная запись, используемая для развертывания CloudFormation, не имеет доступа к указанной корзине S3, в которую необходимо загрузить ресурсы во время развертывания. Вы можете попробовать следующее:
- Создайте новое ведро S3, используя ту же учетную запись, под которой выполняется развертывание, и убедитесь, что это именно то ведро, которое используется в развертывании.
- Убедитесь, что у учетной записи есть полный доступ к S3, как объяснено в ответе @JiminyJames - /questions/49807143/nevozmozhno-zagruzit-artefakt-none-na-kotoryij-ssyilaetsya-parametr-codeuri-resu/55452338#55452338
Это также может произойти, когда вы делаете
Я столкнулся с той же проблемой при выполнении следующей команды:
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>
Если у вас есть эта проблема, и она также показывает следующие сообщения об ошибках: Ошибка: невозможно загрузить артефакт HelloWorldFunction, на который ссылается параметр CodeUri ресурса HelloWorldFunction.
ZIP не поддерживает метки времени до 1980 года.
Тогда проблема в том, что временные метки файлов старше 1980 года. Это легко исправить в терминале, в папке, из которой вы пытаетесь запустить «sam deploy», просто запустите это, чтобы обновить временные метки:
touch `find . -type f`
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>/*"
}
]
}
Вы должны предоставить 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