我正在研究对由 ELB 前置的一层网络服务器使用自动缩放组。我遇到的困难之一是如何为每个新实例提供正确的 DNS 名称。例如,我希望网络服务器具有这样的名称,frontend-web-XXX.prod.example.com以便它们的名称在日志中显示正确并且易于组织。我最终想要自动缩放另外两个层,并且我希望它们api-web-XXX.prod.example.com也有这样的名称。我对 cloudformation 模板有一些经验,并且已经使用关联的 Route53 记录启动了各个实例,但我没有看到任何迹象表明如何在自动缩放组中完成此操作。
amazon-web-services autoscaling amazon-route53 amazon-cloudformation
问题范围
我有一个使用多个云形成模板构建的应用程序。它们需要相互交互,但是太大/太复杂而无法在一个模板中构建。
场景细节
想象一下只有两个模板(还有更多)
模板 A 创建一个安全组(安全组 A),将自身作为唯一的入口规则。它应用于此模板中执行相同功能的一系列主机。
模板 B 创建了另一个安全组(安全组 B)和一些主机(在一个弹性 beantalk 中)。
题
如何使用云形成将入口规则添加到安全组 A以处理来自安全组 B 的流量?
我试过什么
我查看了文档,我想创建一个安全组 Ingress 规则并将其与安全组 A 相关联,但就我所见,这似乎不可行 - http://docs.aws.amazon.com /AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
其他选择
我可以只使用安全组 B 中主机的 CIDR 范围,因为在构建任何这些之前已知(所有这些都在具有单独子网的 VPC 中)但是我觉得必须有一种比接受来自cidr 范围。
我正在尝试使用此处提供的 CloudFormation ECS 服务模板 AWS作为指南来建立一个新的 ECS 集群。我的 ECS 实例在 AutoScaling 组内启动,但未通过运行状况检查并始终终止。
输出并没有真正告诉我什么检查失败或原因。
我使用的 CloudFormation 代码几乎是 AWS 文档中提供的股票代码。我添加了一个具有更广泛权限的安全组(以便我可以在迭代时通过 SSH 进入)并将 AMI 更新到 us-east-1 中 ECS 优化的 Amazon Linux 的最新版本。
当前模板:
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description": "Deploys PoC ECS infrastructure.",
"Parameters" : {
"KeyName": {
"Description": "Name of an existing EC2 KeyPair to enable SSH access to the Elastic Beanstalk and Bastion hosts",
"Type": "String",
"MinLength": "1",
"MaxLength": "255",
"AllowedPattern": "[\\x20-\\x7E]*",
"ConstraintDescription": "can contain only ASCII characters.",
"Default": "smx-test-key"
}, …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个 CloudFormation 模板,该模板将 Lambda 函数订阅到 CloudWatch Logs LogGroup。然后,此 Lambda 函数应解析日志并将它们放入 Amazon ES 集群。
订阅等都运行良好,但我无法理解的一点是如何将 Amazon ES 集群端点传递给 Lambda 函数。当您浏览控制台时,AWS 提供的模板包括一行:
var endpoint = 'my-aws-es-endpoint.amazonaws.com';
Run Code Online (Sandbox Code Playgroud)
每次运行 CloudFormation 模板时,我显然都需要更新它,因为每次我都会得到一个具有不同端点的不同集群。我不想手动更新它,但希望能够使用像“Fn::GetAtt”这样的 CloudFormation 函数来获取终点并将其传递给 Lambda。我就是不知道怎么做。
我正在通过 CloudFormation 模板启动一个 EC2 实例,但是,指定的实例t2.micro需要一个 VPC。
如何在 CloudFormation 模板中指定 VPC?
这是我的模板:
{
"Description" : "Single Instance",
"Resources" : {
"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-b73b63a0",
"InstanceType" : "t2.micro",
"KeyName" : "my-key",
"Tags" : [
{
"Key" : "Name",
"Value" : "test"
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我编写了一个 CloudFormation 模板,它创建了一个完整的环境,其中包括 VPC、HostedZone、子网、自动缩放组等的创建...
创建的 ASG 成员服务器在第一次启动时运行用户数据脚本,与许多其他任务一起,每个实例也在新创建的 HostedZone 中注册自己。
一切都很完美。
问题是,当我将堆栈标记为删除时,它会失败 (DELETE_FAILED),原因是 CloudFormation 无法删除 HostedZone。
即使您尝试手动删除包含多于必需记录(NS 记录)的托管区域,您也会收到一条错误消息,提示您需要先删除该区域中的所有非必需记录,然后才能删除该区域。
CloudFormation 中也会发生这种情况,这就是“删除失败”的原因。
CloudFormation 中的错误如下所示:
The specified hosted zone contains non-required resource record sets and so cannot be deleted.
Run Code Online (Sandbox Code Playgroud)
我想知道是否有解决方法可以避免收到“删除失败”消息并且堆栈将被正确删除?
我是新的 Cloudformation,我正在尝试找到一个 Cloudformation 脚本来注册域,例如 Route53 下的 example.com。我查看了cloudformation pdf,没有发现与route53下的域名注册相关的内容。
任何指示/帮助将不胜感激
domain amazon-web-services amazon-route53 amazon-cloudformation
我正在尝试在实例上安装 ansible。我想我可以AWS::CloudFormation::Init用来执行sudo pip install ansible. 不过,这似乎不起作用。这是我的实例资源:
ansibleInstance:
Type: 'AWS::EC2::Instance'
Metadata:
'AWS::CloudFormation::Init':
commands:
ansible:
command: "sudo pip install ansible"
test: "pip --version"
ignoreErrors: 'false'
Properties:
ImageId: ami-467ca739
KeyName: Candidate-EyMm7zuOcn
InstanceType: t2.micro
SubnetId: !Ref subnetTest
SecurityGroupIds:
- !Ref allowSSH
Tags:
- Key: Name
Value: Test
Run Code Online (Sandbox Code Playgroud)
有没有办法查看尝试执行此操作时发生的情况,以便我可以找出失败的位置/原因?有没有其他人可能会建议考虑解决这个问题?
EDIT1:我删除了sudo以防万一,以防万一,无论出于何种原因(我认为不会,但我还是想完全消除它)。那没有影响。我还验证了aws-cli工具已安装,这是预期的,因为它是AWS Linux AMI
EDIT2:这是 ansibleInstance 资源的一个版本,我试图在其中通过UserData以下方式执行命令:
ansibleInstance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: ami-467ca739
KeyName: Candidate-EyMm7zuOcn
InstanceType: t2.micro
SubnetId: !Ref subnetTest
SecurityGroupIds:
- !Ref …Run Code Online (Sandbox Code Playgroud) 我不明白为什么Fn::Sub在这个模板中不起作用。我收到以下错误:
模板包含错误。:模板错误:一个或多个 Fn::Sub 内部函数未指定预期参数。指定一个字符串作为第一个参数,并指定一个可选的第二个参数来指定要在字符串中替换的值的映射
Resources:
LambdaSubmitJob:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
LambdaJobStatusPoll:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
MyStepF:
Type: 'AWS::StepFunctions::StateMachine'
Properties:
DefinitionString: !Sub
- |-
{
"Comment": "A state machine that submits a Job to AWS Batch and monitors the Job until it completes.",
"StartAt": "Submit Job",
"States": {
"Submit Job": {
"Type": "Task",
"Resource": "${Lambda1}", …Run Code Online (Sandbox Code Playgroud) 我在云形成中运行此模板,以在 ubuntu-18.04 计算机中创建自动缩放,它将自动回滚由此模板创建的所有实例,并给出此类错误。
收到 0 个 SUCCESS 信号(共 1 个)。无法满足 100% MinSuccessfulInstancesPercent 要求 无法创建以下资源:[WebServerGroup]。。用户请求回滚。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"VpcId": {
"Type": "AWS::EC2::VPC::Id",
"Description": "VpcId of your existing Virtual Private Cloud (VPC)",
"ConstraintDescription": "must be the VPC Id of an existing Virtual Private Cloud."
},
"Subnets": {
"Type": "List<AWS::EC2::Subnet::Id>",
"Description": "The list of SubnetIds in your Virtual Private Cloud (VPC)"
},
"InstanceType": {
"Description": "WebServer EC2 instance type",
"Type": "String",
"Default": "t2.small",
"AllowedValues": [
"t1.micro",
"t2.nano",
"t2.micro",
"t2.small",
"t2.medium",
"t2.large", …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-cloudformation ubuntu-18.04 devops