Je suive - ce tutoriel Pour apprendre à utiliser SAM .
Voici le code que j'ai:
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!';
};
Quand je cours
sam package \
--template-file template.yml \
--output-template-file package.yml \
--s3-bucket brian-test-sam
J'ai eu l'erreur de dire Unable to upload artifact None referenced by CodeUri parameter of HelloWorldFunction resource. An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Pourquoi cela arrive-t-il?
J'ai créé le godet S3 brian-test-sam
Sur mon compte AWS. J'ai vérifié que mon utilisateur IAM a AmazonS3FullAccess
Autorisation.
La commande
sam --debug package \ <aws:dev-bionime>
--template-file template.yml \
--output-template-file package.yml \
--s3-bucket brian-test-sam
dit que l'erreur a été générée par aws cloudformation package --output-template-file package.yml --s3-bucket brian-test-sam --template-file /path/to/my/files/helloworld/template.yml
Quel est le problème avec mon cloudformation?
Ma version AWS CLI est aws-cli/1.16.169 Python/3.7.3 Darwin/18.6.0 botocore/1.12.159
. Et ma version npm
est 6.10.1
.
J'ai trouvé que cette erreur était parce que je n'avais pas ajouté l'accès S3 au rôle de service qui exécute la construction.
Dans l'onglet Autorisations du rôle, sélectionnez le bouton "Joindre des stratégies" et choisissez "Amazons3fullAccess", joignez-la via le bouton "Joindre la stratégie".
Maintenant réexécuter votre construction.
J'ai confronté le même problème, tout en exécutant la commande ci-dessous:
sam package \
--template-file template.yml \
--output-template-file package.yml \
--s3-bucket <your_bucket_name>
La commande ci-dessus a manqué des informations d'identification AWS avec le profil par défaut. [Je n'ai pas eu de profil par défaut dans AWS Configurations] Si le profil par défaut n'est pas situé, vous devrez peut-être fournir un nom de profil dans la commande ci-dessous.
sam package \
--template-file template.yml \
--output-template-file package.yml \
--s3-bucket brian-test-sam \
--profile <profile_name>
Vous devez fournir la propriété CodeUri
pointant votre annuaire local.
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