AWS bietet keine offizielle CloudFormation-Ressource zum Erstellen von Objekten in einem S3-Bucket. Sie können jedoch eine Lambda-backed Custom Resource erstellen, um diese Funktion mit dem AWS SDK auszuführen, und das gilt/cloudformation-helpers GitHub-Repository stellt eine benutzerdefinierte Standardressource bereit, die genau dies ermöglicht.
Wie bei allen benutzerdefinierten Ressourcen Setup ist ein wenig ausführlich, da Sie zunächst die Lambda-Funktion und IAM-Berechtigungen bereitstellen müssen, dann verweisen Sie als benutzerdefinierte Ressource in Ihrer Stack-Vorlage.
Fügen Sie zunächst die Lambda::Function
und die damit verbundenen IAM::Role
zu Ihrer Stapelvorlage:
"S3PutObjectFunctionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version" : "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [ "lambda.amazonaws.com" ]
},
"Action": [ "sts:AssumeRole" ]
}
]
},
"ManagedPolicyArns": [
{ "Ref": "RoleBasePolicy" }
],
"Policies": [
{
"PolicyName": "S3Writer",
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": "*"
}
]
}
}
]
}
},
"S3PutObjectFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": "com.gilt.public.backoffice",
"S3Key": "lambda_functions/cloudformation-helpers.zip"
},
"Description": "Used to put objects into S3.",
"Handler": "aws/s3.putObject",
"Role": {"Fn::GetAtt" : [ "S3PutObjectFunctionRole", "Arn" ] },
"Runtime": "nodejs",
"Timeout": 30
},
"DependsOn": [
"S3PutObjectFunctionRole"
]
},
Dann können Sie die Lambda-Funktion als benutzerdefinierte Ressource verwenden, um Ihre S3-Objekt zu erstellen:
"MyFolder": {
"Type": "Custom::S3PutObject",
"Properties": {
"ServiceToken": { "Fn::GetAtt" : ["S3PutObjectFunction", "Arn"] },
"Bucket": "mybucket",
"Key": "myfolder/"
}
},
Sie kann auch dieselbe benutzerdefinierte Ressource verwenden, um ein stringbasiertes S3-Objekt zu schreiben, indem ein Body
Parameter zusätzlich zu Bucket
und Key
hinzugefügt wird (siehe docs).
eigentlich muss ich cloudformation jsons in einem Ordner unter S3-Bucket aus einer Lambda-Funktion aufrufen ... also wo soll ich meine jsons platzieren, wenn der Ordner nicht im Voraus erstellt werden muss ??? – shiv455
Könnten Sie bitte mehr Informationen über Ihre tatsächlichen Anforderungen geben (zB was meinen Sie mit "cloudformation jsons aufrufen")? Am besten aktualisieren Sie die ursprüngliche Frage anhand eines Beispiels, was Sie versucht haben und welche Probleme aufgetreten sind. –
Aktualisiert meine Frage bitte überprüfen !!! .. Im Versuch, mehrere Ressourcen (SNS, EC2 etc ..) mit AWS Lambda, die create_stack api erstellt, wobei nestedstack.json ist einer der Parameter .... – shiv455