Amazon web services 是否可以执行命令,然后在CloudFormation模板中更新安全组?

Amazon web services 是否可以执行命令,然后在CloudFormation模板中更新安全组?,amazon-web-services,amazon-ec2,amazon-cloudformation,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,我希望通过CloudFormation执行以下操作 启动一个EC2实例 授予it使用安全组A访问整个internet的权限 下载特定版本的Java和Python 通过删除安全组A并添加安全组B来删除其internet权限 我注意到有一个属性用于指定创建资源的顺序,但我找不到一个功能,该功能允许我在创建堆栈的过程中两次更新同一EC2实例上的安全组 这在CloudFormation中是可能的吗?在CloudFormation中不是本机的,但是您可以启动EC2实例,并根据需要下载Java/Python

我希望通过CloudFormation执行以下操作

  • 启动一个EC2实例
  • 授予it使用安全组A访问整个internet的权限
  • 下载特定版本的Java和Python
  • 通过删除安全组A并添加安全组B来删除其internet权限
  • 我注意到有一个属性用于指定创建资源的顺序,但我找不到一个功能,该功能允许我在创建堆栈的过程中两次更新同一EC2实例上的安全组


    这在CloudFormation中是可能的吗?

    在CloudFormation中不是本机的,但是您可以启动EC2实例,并根据需要下载Java/Python和,然后使用awscli切换当前EC2实例的安全组


    但是,如果您只需要预加载Java和Python,那么为什么不简单地创建一个安装了Java和Python并从该AMI启动的应用程序呢?

    最好的方法是在这里使用Cloudformation。您可以创建一个lambda函数,它完全满足您的需要。然后可以在云形成模板中将此lambda函数作为自定义资源函数调用

    EC2InstanceProfile:
        Type: AWS::IAM::InstanceProfile
        Properties:
          Path: /
          Roles: [!Ref 'EC2Role']
      MarkInstanceProfileComplete:
        Type: 'Custom::EC2InstanceProfileDone'
        Version: '1.0'
        DependsOn: EC2InstanceProfile
        Properties: 
          ServiceToken: !Ref CustomResourceArn
          HostURL: !Ref Host
          LoginType: !Ref LoginType
          SecretId: !Ref SecretId
          WorkspaceId: !Ref WorkspaceId
          Event: 2
          Total: 3
    
    您可以将新的安全组ID和实例ID传递给lambda函数,并对lambda函数进行编码以使用AWS SDK并进行所需的修改

    我已经利用它向我的web服务器发布了一个关于云形成模板进度的更新。下面是模板的示例代码

    EC2InstanceProfile:
        Type: AWS::IAM::InstanceProfile
        Properties:
          Path: /
          Roles: [!Ref 'EC2Role']
      MarkInstanceProfileComplete:
        Type: 'Custom::EC2InstanceProfileDone'
        Version: '1.0'
        DependsOn: EC2InstanceProfile
        Properties: 
          ServiceToken: !Ref CustomResourceArn
          HostURL: !Ref Host
          LoginType: !Ref LoginType
          SecretId: !Ref SecretId
          WorkspaceId: !Ref WorkspaceId
          Event: 2
          Total: 3
    

    此处,资源标记InstanceProfileComplete是一个调用Lambda函数的自定义资源。它将事件计数和总计数作为输入,并对它们进行处理以计算进度百分比。基于此,它向我的web服务器发送请求。我们关心的是,这个Lambda函数可以做任何您希望它做的事情

    您可以尝试使用Lambda支持的自定义资源进行设置。此Lambda函数将创建一个EC2实例,并将安全组A连接到EC2实例。您可以从Lambda函数或通过CloudFormation模板创建安全组。步骤3和4可以通过EC2实例中的用户数据完成。