标签: amazon-cloudformation

如何重用 CloudFormation 中的现有资源?

我的 CloudFormation 模板中有一个 S3 存储桶作为资源,DeletionPolicy设置为Retain. 这按预期工作:删除堆栈时,它确实保留了存储桶。但是,当我尝试再次创建堆栈时,尝试再次创建同一个存储桶时创建失败,并显示一条错误消息,抱怨它已存在。

我需要向我的 CloudFormation 模板添加什么才能使其不尝试重新创建已存在的资源?

我的模板相关片段如下:

      "Resources": {
        "SomeS3Bucket" : {
          "Type" : "AWS::S3::Bucket",
          "DeletionPolicy" : "Retain",
          "Properties": {
              "BucketName": "SomeS3Bucket"
              }
          }
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services amazon-cloudformation

32
推荐指数
2
解决办法
2万
查看次数

将 CloudFormation 与现有 S3 存储桶结合使用

使用 CloudFormation,我想在现有存储上设置AWS::S3::Bucket 中的一些属性。换句话说,我不想创建存储桶,我只想强制执行一些设置。这是我的 CloudFormation JSON 示例:

    "websitePreviewBucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "AccessControl": "PublicRead",
        "VersioningConfiguration": {
          "Status": "Suspended"
        },
        "BucketName": "preview.website.com",
        "WebsiteConfiguration": {
          "IndexDocument": "index.html",
          "ErrorDocument": "error.html"
        }
      }
    },
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,这在 CloudFormation 控制台中失败了:

The following resource(s) failed to create: [websitePreviewBucket].
preview.website.com already exists
Run Code Online (Sandbox Code Playgroud)

我已经创建了存储桶preview.website.com。我的意思是,这个帐户拥有那个存储桶。如何设置之类的东西AccessControl,并WebsiteConfiguration与CloudFormation现有的桶?

我看到另一个问题提出了类似的问题,但没有合适的答案。

amazon-s3 amazon-cloudformation

32
推荐指数
1
解决办法
3万
查看次数

AWS CloudFormation - 模板中的自定义变量

有没有办法为从 CloudFormation 模板参数派生的常用值定义快捷方式?

例如-我有一个创建了ELB名字多AZ项目组的脚本project和ELB后面两个实例叫project-1project-2。我只将ELBHostName参数传递给模板,然后使用它来构造:

"Fn::Join": [
    ".", [
        { "Fn::Join": [ "", [ { "Ref": "ELBHostName" }, "-1" ] ] },
        { "Ref": "EnvironmentVersioned" },
        { "Ref": "HostedZone" }
    ]
]
Run Code Online (Sandbox Code Playgroud)

这种结构或非常相似的结构在整个模板中重复多次 - 以创建 EC2 主机名、Route53 记录等。

而不是一遍又一遍地重复,我想将它的输出分配Fn::Join给某种变量并且只引用它,就像我可以用"Ref":语句一样。

理想情况下是这样的:

Var::HostNameFull = "Fn::Join": [ ... ]
...
{ "Name": { "Ref": "Var::HostNameFull" } }
Run Code Online (Sandbox Code Playgroud)

或类似简单的东西。

使用 Amazon CloudFormation 可以吗?

amazon-web-services amazon-cloudformation

26
推荐指数
3
解决办法
3万
查看次数

CloudFormation 中的 Aws vpc 默认路由表

我是否遗漏了什么,但是否无法通过 CloudFormation 将路由添加到随 VPC 预配的默认路由表?

routing amazon-web-services amazon-route53 amazon-cloudformation

21
推荐指数
1
解决办法
9171
查看次数

AWS CloudFormation:VPC 默认安全组

我有一个 cfn 堆栈(除其他外),它创建了一个 VPC、几个安全组和一些 EC2 实例。将在堆栈中创建的安全组分配给同样由堆栈创建的实例是很简单的。但是,我对默认的 VPC SG 感兴趣。

创建 VPC 后(无论是通过 GUI 手动、通过 cloudformation 还是任何其他方式),AWS 都会为该组中的任何实例创建一个带有“全部允许”规则的默认安全组。

我想要做的是将这个默认安全组和其他几个 SG 分配给堆栈创建的实例。事实证明,这比我预期的要困难得多。以下是一些片段,显示了我正在发生的事情:

"AllowSSHSecGroup":{
      "Type":"AWS::EC2::SecurityGroup",
      "Properties":{
        "GroupDescription":"Allow SSH from anywhere",
        "VpcId":{
          "Ref":"DevVPC"
        },
        "SecurityGroupIngress":[
          {
            "IpProtocol":"tcp",
            "FromPort":"22",
            "ToPort":"22",
            "CidrIp":"0.0.0.0/0"
          }
        ]
      }
},
"Instance001" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-7eab224e",
        "InstanceType" : "m1.large",
        "AvailabilityZone" : "us-west-2a",
        "PrivateIpAddress" : "10.22.0.110",
        "SecurityGroupIds" : [ {"Ref" : "AllowSSHSecGroup"} ],
        "SubnetId" : { "Ref" : "PublicSubnet" },
        "KeyName" : "erik-key",
        "DisableApiTermination" : …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services amazon-cloudformation

20
推荐指数
2
解决办法
2万
查看次数

是否可以在 amazon cloudformation 中强制重新创建 EC2::Instance 或 RDS::DBInstance?

是否可以使用 cloudformation 堆栈强制重新创建 EC2 或 RDS 实例?

我的堆栈卡在一个点上,简单地销毁和创建资源就可以修复它,而不是我必须删除整个堆栈才能继续工作。

编辑:

这个问题打了我两次。首先,我创建了一个具有一些默认值的 AWS::RDS::Instance,然后尝试将其降级为 "EngineVersion" : "5.5"。更改它应该会发生一些中断,但是 mysql 实例无法从 5.6 降级到 5.5,因此堆栈处于 UPDATE_FAILED 状态,我无法在没有讨厌的技巧的情况下重新创建 RDS。

另一种情况是,我有几个“AWS::EC2::Instance”,它们显然从“UserData”下载并执行脚本,如果 Y 更改下载的脚本,我必须重新构建实例,而没有办法这样做。我再一次使用相同的讨厌的技巧来重新创建机器。

讨厌的伎俩:

我没有使用一台机器的自动缩放组,而是解决了更改属性中的可用区的两个问题......但让我感觉很糟糕

amazon-ec2 amazon-rds amazon-cloudformation

18
推荐指数
1
解决办法
1万
查看次数

在 cloudformation 中是否可以创建可重用的字符串?

我有一个字符串,它由许多变量组成,我将这些变量用于许多不同的事物,例如标签和主机名。

有没有办法创建一个可重用的字符串,我可以通过模板引用它?

对此的任何想法将不胜感激。编辑:一个例子是传入 2 个参数,例如 ProjectName 和 Environment 加入它们

"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]
Run Code Online (Sandbox Code Playgroud)

并在许多地方使用结果

amazon-web-services amazon-cloudformation

15
推荐指数
1
解决办法
1万
查看次数

为什么 aws 云编队不安装我指定的软件包?

我对 AWS 服务很陌生。我正在尝试使用 AWS 云格式并创建了一个模板。该模板没有错误,我可以使用它创建机器。

但是我在模板中添加了一些配置,以便在启动期间安装 tomcat、git 和其他东西。但这不会发生在我身上。

这是我用于安装 tomcat 的部分代码:

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },
Run Code Online (Sandbox Code Playgroud)

但是当我登录机器时既tomcat没有git也没有安装!

提前致谢。

ubuntu tomcat amazon-web-services amazon-cloudformation

14
推荐指数
2
解决办法
2万
查看次数

尝试创建 AWS::Route53::RecordSet 时,AWS CloudFormation 返回“无效请求”

我对这个不知所措。

99% 的时间 CloudFormation 都非常擅长为您提供某种您可以使用的调试消息,但是“无效请求”让我感到困惑,尤其是当资源开始非常简单时。

据说这是给我带来问题的资源(由 Ansible 生成的模板,因此 {{ ... }} 符号),

"DatabaseDNSRecord": {
    "Type": "AWS::Route53::RecordSet",
    "Properties": {
        "HostedZoneId": "HOSTED_ZONE_ID",
        "Name": "db.{{ item.env_name|lower }}v2.<DOMAIN>.com.",
        "ResourceRecords": [
            {
                "Fn::GetAtt": [ "Database", "Endpoint.Address" ]
            }
        ],
        "Type": "CNAME"
    },
    "DependsOn": "Database"
}
Run Code Online (Sandbox Code Playgroud)

从我从文档中可以看出,所需的一切都存在,正确且格式正确。

我唯一能想到的是我将此资源添加到我之前创建的现有CloudFormation 堆栈中,该堆栈已经创建了该Database资源,作为记录,它是一个AWS::RDS::DBInstance(如果需要,也很乐意为此发布资源模板,没什么特别的) .

任何想法为什么我收到“无效请求”?

谢谢。

编辑:我在有和没有TTL相同错误的情况下都尝试过。

amazon-web-services amazon-route53 amazon-cloudformation

13
推荐指数
1
解决办法
4523
查看次数

如何将 Route 53 设置为指向 Api Gateway

我正在编写一个 Cloudformation 配置文件来一次性创建一个网站。这包括创建 lambda 函数、创建 API 网关、设置 S3 存储桶、创建 Route 53 区域和记录。

迄今为止:

  • 创建 Lambda 函数及其角色(有效)
  • 创建 API Gateway 它的部署和它的角色(工作)
  • 创建 S3 存储桶及其策略(有效)
  • 为站点创建 Route 53 区域和 DNS 记录(有效)
  • 为 API Gateway 创建域(不知道我在做什么)

因此,domain.com可以毫无问题地提供 S3 存储桶中的文件。将 AWS URI 用于 API Gateway 可以https://trydsoonjc.execute-api.us-west-2.amazonaws.com/app/path/here毫无问题地工作。

我想要设置的是api.domain.com指向 API 网关以访问服务器的 API。

如何将 Route 53 连接到 API Gateway?

我现在的 Cloudformation 是这样的:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description" : "Website",

  "Parameters": {
    "DomainName": {
      "Type" : "String",
      "Description" : "The DNS name of …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cloudformation amazon-api-gateway

13
推荐指数
1
解决办法
7768
查看次数