AWS không cung cấp tài nguyên CloudFormation chính thức để tạo đối tượng trong thùng S3. Tuy nhiên, bạn có thể tạo một Lambda-backed Custom Resource để thực hiện chức năng này bằng cách sử dụng SDK AWS, và trên thực tế, kho lưu trữ GitHub gilt/cloudformation-helpers cung cấp một nguồn tài nguyên tùy chỉnh không cần thiết chỉ thực hiện việc này.
Cũng giống như bất kỳ thiết lập tài nguyên tùy chỉnh nào, vì trước tiên bạn cần triển khai hàm Lambda và quyền IAM, sau đó tham chiếu nó dưới dạng tài nguyên tùy chỉnh trong mẫu ngăn xếp của bạn.
Đầu tiên, thêm các nguồn lực Lambda::Function
và liên IAM::Role
để ngăn xếp mẫu của bạn:
"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"
]
},
Sau đó, bạn có thể sử dụng chức năng Lambda như một tài nguyên Tuỳ chỉnh để tạo đối tượng S3 của bạn:
"MyFolder": {
"Type": "Custom::S3PutObject",
"Properties": {
"ServiceToken": { "Fn::GetAtt" : ["S3PutObjectFunction", "Arn"] },
"Bucket": "mybucket",
"Key": "myfolder/"
}
},
Bạn cũng có thể sử dụng cùng một tài nguyên tùy chỉnh để viết đối tượng S3 dựa trên chuỗi bằng cách thêm tham số Body
ngoài Bucket
và Key
(xem docs).
thực sự tôi cần gọi jsons đám mây được đặt bên trong thư mục bên dưới thùng S3 từ hàm Lambda ... vậy tôi nên đặt jsons ở đâu nếu thư mục không bắt buộc phải được tạo trước? – shiv455
Bạn có thể vui lòng cung cấp thêm thông tin về các yêu cầu thực tế của bạn không (ví dụ: bạn có ý nghĩa gì khi gọi "jsons cloudformation")? Cách tốt nhất là cập nhật Câu hỏi ban đầu với ví dụ về những gì bạn đã thử và những vấn đề bạn gặp phải. –
Cập nhật câu hỏi của tôi xin vui lòng kiểm tra !!! .. Im cố gắng tạo nhiều tài nguyên (SNS, EC2, vv ..) bằng cách sử dụng AWS lambda gọi inv_stack api trong đó nestedstack.json là một tham số .... – shiv455