我正在使用CloudFormation创建一个RDS实例:
"Resources": {
"myDB": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"AllocatedStorage": "5",
"DBInstanceClass": "db.m1.small",
"Engine": "MySQL",
"EngineVersion": "5.5",
"DBName": "mydb",
"MasterUsername": {
"Ref": "DBUser"
},
"MasterUserPassword": {
"Ref": "DBPassword"
},
"DBParameterGroupName": {
"Ref": "myRDSParamGroup"
}
}
}
这一切都有效.但我需要在创建数据库时在数据库上运行初始SQL,以设置我的应用程序架构.我目前的方法是让应用程序自我迁移,但我想在CloudFormation定义中执行此操作.这可能吗?
aws cloudformation --region ap-southeast-2 describe-stacks --stack-name mystack
Run Code Online (Sandbox Code Playgroud)
它返回结果OK:
{
"Stacks": [
{
"StackId": "arn:aws:mystackid",
"LastUpdatedTime": "2017-01-13T04:59:17.472Z",
"Tags": [],
"Outputs": [
{
"OutputKey": "Ec2Sg",
"OutputValue": "sg-97e13dff"
},
{
"OutputKey": "DbUrl",
"OutputValue": "myUrl"
}
],
"CreationTime": "2017-01-13T03:27:18.893Z",
"StackName": "mystack",
"NotificationARNs": [],
"StackStatus": "UPDATE_ROLLBACK_COMPLETE",
"DisableRollback": false
}
]
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何只返回OutputUall的值,即myUrl
因为我不需要休息,只需我的.
这可能通过aws cloudformation describe-stacks吗?
编辑
我才意识到我可以使用 - 查询:
--query "Stacks[0].Outputs[1].OutputValue"
Run Code Online (Sandbox Code Playgroud)
将得到我想要的,但我想使用DbUrl else如果输出的数量改变,我的结果将是意外的.
使用CloudFormation创建堆栈时,出现此错误:
Stack update error: Requires capabilities : [CAPABILITY_IAM]
Run Code Online (Sandbox Code Playgroud)
我找不到添加CAPABILITIES_IAM到CloudFormation配置的模板.
解决CAPABILITIES_IAM错误的选项有哪些?
我正在尝试使用CloudFormation创建一个新版本的Lambda函数.
我想拥有相同Lambda函数的多个版本,以便我可以(a)指向不同版本的别名 - 比如DEV和PROD - 以及(b)能够回滚到早期版本
这是我的Lambda版本的定义:
LambdaVersion:
Type: AWS::Lambda::Version
Properties:
FunctionName:
Ref: LambdaFunction
Run Code Online (Sandbox Code Playgroud)
运行"aws cloudformation create-stack"时会创建一个版本,但随后的"aws cloudformation update-stack"命令不会执行任何操作.没有创建新的Lambda版本.
我正在尝试在将新的zip文件上传到S3然后运行"update-stack"之后创建一个新版本的Lambda函数.我可以使用CloudFormation做到吗?AWS :: Lambda :: Version真的坏了吗(如https://github.com/hashicorp/terraform/issues/6067#issuecomment-211708071所述)或者我只是没有得到什么?
更新1/11/17 亚马逊支持的官方回复:"...对于要发布的任何新版本,您需要定义一个添加(原文如此) AWS :: Lambda :: Version资源......"
AWS CloudFormation/Lambda团队,如果您正在阅读此内容 - 这是不可接受的.修理它.
当我deploy使用带有API网关资源的模板运行CloudFormation时,第一次运行它时,它会创建并部署到阶段.随后我运行它,它会更新资源但不会部署到阶段.
这种行为是否符合预期?如果是的话,我是如何在更新时将其部署到阶段的?
(Terraform提到了类似的问题:https://github.com/hashicorp/terraform/issues/6613)
我正在使用cloudformation来创建一个包含自动调整的ec2实例和S3存储桶的堆栈.对于S3存储桶,我将DeletionPolicy设置为Retain,工作正常,直到我想再次重新运行我的cloudformation脚本.由于在之前的运行中,脚本创建了S3存储桶,因此在后续运行中失败,说我的S3存储桶已经存在.当然也没有创建其他资源.我的问题是如何检查我的S3存储桶是否首先存在于cloudformation脚本中,如果存在,则跳过创建该资源.我查看了AWS中的条件,但它似乎都是基于参数的,我还没有找到一个从现有资源检查的函数.
automation amazon-web-services conditional-statements aws-cloudformation
我已经在cloudformation中定义了我的lambda/roles,并且还希望使用它来添加预定的事件源......是否有任何文档或示例?
当我们说cloudformation是'Infrastructure as Code'时,立即想到的下一个问题是如何测试这些代码.我们可以对此代码进行某种基本的单元测试
我正在对云形式验证进行折扣,因为这只是一种进行语法验证的方法,而且我可以使用任何其他免费的JSON/YAML验证器.
我更倾向于某种功能验证,可能测试我已经定义了所有用作引用的变量.可能测试我正在使用的任何属性实际上是该组件支持的属性
不期望它应该测试权限是否正确或我没有用尽我的限制.但至少除了基本的JSON/YAML语法验证之外
我在 VPC 中有一个带有 Lambda 函数的 CloudFormation 堆栈,
当尝试删除堆栈时,AWS CloudFormation 至少卡住了 25-30,
我在事件中收到以下消息 -
CloudFormation is waiting for NetworkInterfaces associated with the Lambda Function to be cleaned up.
Run Code Online (Sandbox Code Playgroud)
这似乎是由于 ENI 附加到功能和安全组。
从控制台它不允许我强行删除 ENI 或 ENI 所附加的安全组,
所以我只需要等待吗?
我发现了一些甚至已经有 2 年历史的问题和博客,
AWS 没有解决方案吗?
自动化应该很快,事实证明这是一个巨大的障碍。
参考 -
CloudFormation 问题:无法删除堆栈
https://forum.serverless.com/t/very-long-delay-when-doing-sls-remove-of-lambda-in-a-vpc/2535