我们可以使用AWS :: CloudFormation :: Init在启动实例后执行命令并上传文件.但是有人知道这次行动的内部是什么(来自亚马逊方面)?
当我们传入模板时,文件或命令在什么时候传输到VM?这是Xen功能(通过特殊管道),还是通过网络?
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {
:
},
"sources" : {
:
},
"commands" : {
:
},
"files" : {
:
},
"services" : {
:
},
"users" : {
:
},
"groups" : {
:
}
}
}
},
"Properties": {
:
}
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在尝试在新的Cloud Formation模板上附加我目前正用于我的一个Elastic Load Balancing实例的SSL证书,但每次都得到:
找不到密钥的服务器证书
然后Cloudformation模板开始在那一点回滚.
"Listeners" : [
{
"LoadBalancerPort" : "443",
"InstancePort" : "80",
"SSLCertificateId" : "start_certname_com",
"Protocol" : "HTTPS"
},...
Run Code Online (Sandbox Code Playgroud)
亚马逊要求使用SSL证书的ARN.我相信这是正确的,因为这是在当前设置ELB的下拉列表中出现的确切字符串,它在实例上占用443到端口80.
我在听众身上遗漏了什么?
我可以使用cloudformation创建一个S3存储桶,但是想在S3存储桶中创建一个文件夹
<mybucket>--><myfolder>
Run Code Online (Sandbox Code Playgroud)
请让我知道用于在存储桶中创建文件夹的模板......两者都应该在同一时间创建...
我正在使用AWS lambda,如下所示
stackname = 'myStack'
client = boto3.client('cloudformation')
response = client.create_stack(
StackName= (stackname),
TemplateURL= 'https://s3.amazonaws.com/<myS3bucket>/<myfolder>/nestedstack.json',
Parameters=<params>
)
Run Code Online (Sandbox Code Playgroud) 考虑到在线数据的文档和解决方案数量较少,我决定解决有关更改通过云形态模板启动的EBS卷的默认大小的常见问题
默认情况下,启动的实例大小为8GB,如果您想知道如何根据您的偏好将其更改为某些内容,而不是您已找到正确的解决方案.
有两种方法可以避免这个问题
解决方案1:使用VolumeAttachment创建新卷(方式不正确)
"EBS" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "100",
"AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ] }
}
},
"MountPoint" : {
"Type" : "AWS::EC2::VolumeAttachment",
"Properties" : {
"InstanceId" : { "Ref" : "EC2Instance" },
"VolumeId" : { "Ref" : "EBS" },
"Device" : "/dev/sda1"
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我创建了一个新卷并且厌倦了将它附加到不起作用的实例.(CF模板无法启动)
解决方案2.阻止设备映射(正确方式)
使用BlockDeviceMappings是正确的方法
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeType": "io1",
"Iops": "300",
"DeleteOnTermination": "false",
"VolumeSize": "30"
}
}
],
Run Code Online (Sandbox Code Playgroud)
不要将设备名称保留为/ dev/xvda1,否则它将无法正常工作.相反,如果所选操作系统是Amazon …
我正在尝试使用CloudFormation模板在AWS中启动S3 Bucket.该项目的一个要求是对存储桶进行加密.我一直试图通过CloudFormation模板找到一种方法来设置它(我已经阅读了所有可以获得SSE-S3,KMS,CFT和S3s的文档......).但所有迹象似乎都指向它只能通过控制台获得.
我担心我只是遗漏了一些明显的东西,我想知道是否有人知道如何使用CloudFormation模板(或至少是自动化的东西)将S3 Bucket的默认加密设置为SSE-S3或SSE-KMS?
我们希望将公司特定标签用于我们在AWS中创建的用于计费目的的资源.我正在使用云形成模板来启动我们的Elasticbeanstalk实例和其他依赖于项目的资源.当我使用CloudFormation控制台创建堆栈时,它会在参数后面询问页面中的标签.我必须手动输入该堆栈的标签.但是有没有办法在云形成模板本身中指定那些标签(堆栈的标签)?这样Tag就会传播到其他资源?我知道云形成会自动使用堆栈名称标记资源.但我们需要公司特定的标签来向不同的部门收费.
我正在尝试在CloudFormation中创建一个应用程序负载均衡器,其目标组将流量转发到EC2实例.以下是相关代码段,其中ELBSubnets,ECSCluster,taskdefinition和VpcId作为参数传入:
"EcsElasticLoadBalancer" : {
"Type" : "AWS::ElasticLoadBalancingV2::LoadBalancer",
"Properties" : {
"Subnets" : { "Ref" : "ELBSubnets" },
"SecurityGroups": [
{ "Ref": "ELBAccessSecurityGroup" }
]
}
},
"LoadBalancerListener": {
"Type": "AWS::ElasticLoadBalancingV2::Listener",
"Properties": {
"DefaultActions": [{
"Type": "forward",
"TargetGroupArn": { "Ref": "TargetGroup" }
}],
"LoadBalancerArn": { "Ref": "EcsElasticLoadBalancer" },
"Port": 80,
"Protocol": "HTTP"
}
},
"TargetGroup": {
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
"Properties": {
"Name": { "Fn::Join": [ "-", [ { "Ref": "AWS::StackName" }, "TargetGroup" ] ] },
"Port": 80,
"Protocol": "HTTP",
"VpcId": { "Ref": …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个以 Lambda 函数作为目标的 AWS Eventbridge 规则。我可以很好地添加规则和目标,但是当我尝试通过RoleArnCloudformation 堆栈部署设置 lambda 权限时失败,并显示:
RoleArn is not supported for target arn:aws:lambda:us-east-1:1234567890:function:contacts-lambda-consume-new-customer. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException; Request ID: xxxxx-ec5d-45e8-b45d-xxxxxx; Proxy: null)
这是我的 Cloudformation 堆栈代码:
EventRuleNewCustomer:
Type: AWS::Events::Rule
Properties:
Name: new-customer
EventBusName: myEventBus
# RoleArn: !Join ["", ["arn:aws:iam::",!Ref "AWS::AccountId", ":role/my-role"] ] #no error but doesn't add the permissions
Description: "New customer event rule"
EventPattern:
detail-type:
- "NewCustomer"
State: "ENABLED"
Targets:
-
Arn: !Join ["", ["arn:aws:lambda:" ,!Ref "AWS::Region", ":", !Ref "AWS::AccountId", ":function:contacts-lambda-consume-new-customer"] …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-iam aws-lambda aws-event-bridge
我正在尝试验证Cloudformation模板.我发出的命令是:
? aws cloudformation validate-template --template-body file://template.json
Run Code Online (Sandbox Code Playgroud)
然而,我得到的回应是:
"CapabilitiesReason": "The following resource(s) require capabilities:
[AWS::IAM::Role]",
Run Code Online (Sandbox Code Playgroud)
遗憾的是,我无法找到任何设置功能的方法.
你如何设置能力?
有没有办法将在cloudformation之外创建的现有AWS资源合并到现有cloudformation堆栈中?我想这样做,而不必在cloudformation堆栈中添加新资源并将现有资源的数据迁移到该新资源上。我看到AWS现在具有针对云形成堆栈的漂移检测。我想知道是否可以利用它来将现有资源合并到堆栈中。
amazon-s3 ×2
amazon-ebs ×1
amazon-ecs ×1
amazon-iam ×1
aws-lambda ×1
encryption ×1
json ×1
ssl ×1
xen ×1