Demonstração: Usar o AWS CloudFormation Designer para criar um servidor web básico - AWS CloudFormation

Demonstração: Usar o AWS CloudFormation Designer para criar um servidor web básico

O AWS CloudFormation Designer representa graficamente seus modelos para ajudá-lo a ver os recursos no modelo e como eles estão conectados. O editor de JSON e YAML integrado facilita a modificação de modelos diretamente no console do AWS CloudFormation. Para demonstrar como usar ambos os componentes, usaremos o AWS CloudFormation Designer para criar um servidor da Web básico em uma VPC. Depois, salvaremos o modelo e o usaremos para criar uma pilha do CloudFormation.

Ao final da apresentação, você terá um modelo semelhante ao exemplo a seguir: https://console.aws.amazon.com/cloudformation/designer/home?templateUrl=https://s3.amazonaws.com/cloudformation-examples/sample-ec2-vpc.template&region=us-east-1.

Na demonstração, você concluirá as etapas a seguir:

  1. Adicione e conecte recursos.

    Ao abrir primeiro o AWS CloudFormation Designer, você começará com um modelo em branco. Usaremos o AWS CloudFormation Designer para começar a preencher o modelo arrastando recursos, como uma VPC e uma instância do EC2 para o seu modelo. Também criaremos links entre eles. Por exemplo, usaremos o AWS CloudFormation Designer para criar uma conexão entre o gateway da Internet e a VPC.

  2. Adicione parâmetros do modelo, mapeamentos e saídas.

    Usaremos o AWS CloudFormation Designer editor integrado para adicionar outros componentes do modelo para tornar o modelo mais útil. Por exemplo, adicionaremos parâmetros ao modelo, de modo que você possa especificar os valores de entrada ao criar uma pilha. Assim, você não precisará editar constantemente o modelo para valores de propriedade que você pode normalmente altera.

  3. Especifique as propriedades de recurso.

    Usaremos o editor integrado novamente para especificar as definições de configuração para nossos recursos.

  4. Provisionar recursos

    Nenhum dos seus recursos de modelo estarão prontos e em execução até que você crie uma pilha. Usaremos o modelo recém-criado para iniciar uma pilha, do CloudFormation que provisionará todos os recursos que são definidos no seu modelo.

    nota

    O CloudFormation é um serviço gratuito; no entanto, você será cobrado pelos recursos da AWS que incluir nas pilhas na taxa atual para cada um deles. Para obter mais informações sobre a definição de preço da AWS, consulte a página de detalhes de cada produto em http://aws.amazon.com.

Pré-requisitos

Esta demonstração pressupõe que você tenha um conhecimento prático da Amazon Virtual Private Cloud (Amazon VPC), Amazon Elastic Compute Cloud (Amazon EC2) e do CloudFormation. Para contexto, cada procedimento fornece algumas informações básicas sobre cada recurso.

Além disso, antes de começar, verifique se você tem um par de chaves do Amazon EC2 na região em que você está criando a pilha. Para obter mais informações, consulte Pares de chaves do Amazon EC2 no Guia do usuário do Amazon EC2 para instâncias do Linux.

Etapa 1: Adicionar e conectar recursos

Usaremos a interface de arrastar e soltar do AWS CloudFormation Designer para adicionar uma instância do Amazon EC2 e recursos de rede, como uma VPC, uma sub-rede, um gateway de Internet e uma tabela de rota. Após a adição de todos os recursos, criaremos conexões entre eles. Por exemplo, associaremos o gateway de Internet com uma VPC.

Para adicionar recursos a um modelo

  1. Abra o AWS CloudFormation Designer em https://console.aws.amazon.com/cloudformation/designer.

  2. No editor integrado, na parte inferior da página, escolha Edit (Editar) ( ).

  3. Altere o nome do modelo para BasicWebServerInVPC e, em seguida, pressione Enter.

    No momento, temos um modelo em branco que não é válido. Nas próximas etapas, adicionaremos recursos para torná-lo válido.

  4. No painel Tipos de recursos, na categoria EC2, arraste um tipo de recurso de VPC para o painel Tela.

    Os recursos são organizados por categorias de recursos. Todos os recursos que estamos adicionando estão na categoria EC2.

    O AWS CloudFormation Designer modifica imediatamente seu modelo para incluir um recurso da VPC, com os resultados semelhantes ao seguinte snippet JSON.

    "Resources": { "VPC431KO": { "Type": "AWS::EC2::VPC", "Properties": {}, "Metadata": { "AWS::CloudFormation::Designer": { "id": "445730ea-0d11-45ba-b6ac-12345EXAMPLE" } } } }

    O snippet YAML é semelhante ao seguinte.

    Resources: VPC431KO: Type: 'AWS::EC2::VPC' Properties: {} Metadata: 'AWS::CloudFormation::Designer': id: 9430b008-7a03-41ed-b63e-12345EXAMPLE

    Observe que ainda precisamos especificar as propriedades da VPC, como o bloco CIDR da VPC. Faremos isso posteriormente. Isto é verdadeiro para todos os recursos que adicionaremos.

  5. Renomeie a VPC.

    nota

    Quando você renomear um recurso, renomeie o ID lógico dele, que é o nome mencionado no modelo (não o nome atribuído quando o CloudFormation cria o recurso). Para obter mais informações, consulte Recursos.

    1. Escolha o recurso da VPC.

    2. No editor integrado, escolha o ícone Edit (Editar) ( ).

    3. Altere o nome para VPC e, em seguida, escolha Enter.

    Em seguida, adicionaremos recursos à VPC.

  6. Arraste um canto do recurso da VPC para expandi-lo para que seja grande o suficiente para caber mais recursos.

    É necessário adicionar uma sub-rede, pois você não pode adicionar uma instância do EC2, que hospeda o site, diretamente às instâncias da VPC; que devem estar localizadas em uma sub-rede.

  7. Adicione um tipo de recurso de Sub-rede dentro da VPC e renomeie-o como PublicSubnet.

    Usaremos a sub-rede para alocar um intervalo de endereços IP da VPC que você pode associar a outros recursos da AWS, como uma instância do Amazon EC2.

    Quando você adiciona a sub-rede dentro da VPC, o AWS CloudFormation Designer automaticamente associa a sub-rede à VPC. Essa associação é um modelo de contêiner, no qual os recursos dentro do contêiner são automaticamente associados ao recurso de contêiner.

  8. Adicione um tipo de recurso de Instância dentro do recurso PublicSubnet e renomeie-o como WebServerInstance.

    A instância é um ambiente de computação virtual no qual você hospedará um site básico. Da mesma maneira que ocorreu com a sub-rede e a VPC, a adição da instância na sub-rede associa automaticamente a instância à sub-rede.

  9. Adicione um tipo de recurso de SecurityGroup dentro da VPC e renomeie-o como WebServerSecurityGroup.

    O security group é um firewall virtual que controla o tráfego de entrada e saída da instância de servidor da Web. Também é necessário para instâncias em uma VPC. Precisaremos associar a instância de servidor da Web com esse security group, que faremos mais tarde ao especificar as propriedades da instância.

  10. Adicione um tipo de recurso de InternetGateway em qualquer lugar fora da VPC e renomeie-o como InternetGateway.

    O gateway de Internet permite a comunicação entre a instância que está dentro da VPC e a Internet. Sem o gateway de Internet, ninguém pode acessar seu site.

    Embora você possa arrastar o gateway de Internet para dentro da VPC, isso não criará uma associação com a VPC. O gateway de Internet não segue o modelo de contêiner; em vez disso, você deve arrastar uma conexão do gateway de Internet para a VPC, como descrito na próxima etapa.

  11. Crie uma conexão entre o recurso InternetGateway e o recurso VPC.

    1. No recurso InternetGateway, passe o mouse sobre o anexo do gateway de Internet (AWS::EC2::VPCGatewayAttachment).

    2. Arraste uma conexão para a VPC.

      A borda dos recursos de destino válidos muda de cor. Neste caso, a VPC é o único recurso de destino válido. Esta conexão cria um recurso de anexo que associa o gateway de Internet à VPC.

  12. Em seguida, precisamos adicionar uma tabela de rota e rotear para especificar como direcionar o tráfego de rede de dentro de uma sub-rede. Adicione um RouteTable dentro da VPC e renomeie-o como PublicRouteTable.

    Isso associa uma nova tabela de rota à VPC.

  13. Para adicionar uma regra de roteamento à tabela de rotas, adicione um tipo de recurso de Rota dentro do recurso PublicRouteTable e renomeie-o como PublicRoute.

    Usaremos a rota para especificar para onde direcionar o tráfego.

  14. Para a rota pública, queremos que o gateway de Internet seja o objetivo de destino. Use GatewayId para criar uma conexão do recurso PublicRoute com o gateway de Internet, semelhante à forma como você criou uma conexão entre o gateway de Internet e a VPC.

    O CloudFormation não pode associar uma rota com um gateway da Internet até que você associe o gateway de Internet com a VPC. Isso significa que é necessário criar uma dependência explícita no anexo do gateway de Internet-VPC conforme descrito na próxima etapa. Para obter mais informações, consulte Atributo DependsOn.

  15. Crie uma dependência explícita entre o recurso PublicRoute e o anexo de gateway de Internet-VPC.

    1. No recurso PublicRoute, passe o mouse sobre o ponto DependsOn.

    2. Arraste uma conexão para o anexo de gateway de Internet-VPC (AWS::EC2::VPCGatewayAttachment).

      Com as conexões DependsOn, o AWS CloudFormation Designer cria uma dependência (um atributo DependsOn) na qual o recurso de origem depende do recurso de destino. Neste caso, o AWS CloudFormation Designer adiciona um atributo DependsOn para o recurso PublicRoute e especifica o anexo de gateway-VPC como uma dependência.

  16. Crie outra dependência do recurso WebServerInstance para o recurso PublicRoute.

    O recurso WebServerInstance depende da rota pública para rotear o tráfego para a Internet. Sem a rota pública, a instância não pode enviar um sinal (usando o script de ajuda cfn-signal) para notificar o CloudFormation quando a configuração da instância e as implementações de aplicativo estiverem concluídas.

  17. Arraste uma conexão do recurso PublicRouteTable para o recurso PublicSubnet para associar a tabela de rota e a sub-rede.

    Agora, a sub-rede pública usará a tabela de rota pública para direcionar o tráfego.

  18. Na barra de ferramentas do AWS CloudFormation Designer, salve o modelo localmente usando o menu Arquivo (o ícone de arquivo).

    O AWS CloudFormation Designer salva seu modelo no disco rígido. Você pode usar o modelo mais tarde para criar uma pilha. Recomendamos que você salve o modelo regularmente para evitar a perda de alterações.

Nesta etapa, adicionamos sete recursos ao seu modelo e renomeamos seus IDs lógicos com nomes acessíveis. Além disso, estabelecemos conexões visuais com a maioria dos recursos para criar associações e uma dependência. No entanto, antes de criar uma pilha com este modelo, é necessário criar mais algumas conexões (por exemplo, associando a instância com o security group) e especificar as propriedades de cada recurso. Na próxima etapa, apresentaremos a modificação de outros componentes do seu modelo, como parâmetros de entrada, usando o AWS CloudFormation Designer editor integrado.

Etapa 2: Adicionar parâmetros, mapeamentos e saídas

Antes de especificar as propriedades de recurso, precisamos adicionar outros componentes do modelo para tornar o modelo reutilizável em vários ambientes com mais facilidade. Nesta etapa, usaremos o AWS CloudFormation Designer editor integrado para adicionar parâmetros, mapeamentos e saídas. Em seguida, você pode consultar esses parâmetros e mapeamentos ao especificar as propriedades de recurso. A apresentação fornece JSON e YAML de amostra que você pode usar para copiar e colar no editor integrado.

Para adicionar parâmetros

Os parâmetros são os valores de entrada que você especifica ao criar uma pilha. Eles são úteis para transmitir valores para que você não tenha valores codificados em modelos. Por exemplo, você não precisa codificar o tipo de instância de servidor Web em seu modelo; em vez disso, você pode usar um parâmetro para especificar o tipo de instância ao criar uma pilha. Assim, você pode usar o mesmo modelo para criar vários servidores da Web com diferentes tipos de instância. Para obter mais informações, consulte Parâmetros.

  1. Clique em uma área aberta na tela do AWS CloudFormation Designer.

    Dependendo do que você selecionou, o editor integrado mostra os componentes de nível de modelo ou de recurso que você pode editar. No nível de modelo, você pode editar todas as outras seções de um modelo, como parâmetros de modelo, mapeamentos e saídas, exceto para a seção Recursos. No nível de recurso, você pode editar as propriedades e os atributos de recursos.

    Clicar em uma área aberta na tela permite que você edite componentes de nível de modelo. Para editar componentes no nível de recurso, selecione um recurso.

  2. No painel do editor integrado, escolha a guia Parameters (Parâmetros) na exibição Components (Componentes).

  3. Copie os parâmetros no seguinte snippet e cole-os no editor integrado.

    O seguinte snippet JSON adiciona parâmetros para a especificação do tipo de instância servidor da Web, um nome do par de chaves do Amazon EC2 para acesso ao servidor da Web e o intervalo de endereço IP que podem ser usados para acessar o servidor da Web usando o SSH.

    { "Parameters": { "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge" ], "ConstraintDescription" : "must be a valid EC2 instance type." }, "KeyName": { "Description": "Name of an EC2 KeyPair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription": "must be the name of an existing EC2 KeyPair." }, "SSHLocation": { "Description": " The IP address range that can be used to access the web server using SSH.", "Type": "String", "MinLength": "9", "MaxLength": "18", "Default": "0.0.0.0/0", "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." } } }

    Este é o mesmo snippet em YAML.

    Parameters: InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.small AllowedValues: - t1.micro - t2.nano - t2.micro - t2.small - t2.medium - t2.large - m1.small - m1.medium - m1.large - m1.xlarge - m2.xlarge - m2.2xlarge - m2.4xlarge - m3.medium - m3.large - m3.xlarge - m3.2xlarge - m4.large - m4.xlarge - m4.2xlarge - m4.4xlarge - m4.10xlarge - c1.medium - c1.xlarge - c3.large - c3.xlarge - c3.2xlarge - c3.4xlarge - c3.8xlarge - c4.large - c4.xlarge - c4.2xlarge - c4.4xlarge - c4.8xlarge - g2.2xlarge - g2.8xlarge - r3.large - r3.xlarge - r3.2xlarge - r3.4xlarge - r3.8xlarge - i2.xlarge - i2.2xlarge - i2.4xlarge - i2.8xlarge - d2.xlarge - d2.2xlarge - d2.4xlarge - d2.8xlarge - hi1.4xlarge - hs1.8xlarge - cr1.8xlarge - cc2.8xlarge - cg1.4xlarge ConstraintDescription: must be a valid EC2 instance type. KeyName: Description: Name of an EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' ConstraintDescription: must be the name of an existing EC2 KeyPair. SSHLocation: Description: ' The IP address range that can be used to access the web server using SSH.' Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

Para adicionar mapeamentos

Os mapeamentos são um conjunto de chaves que são associados a um conjunto de pares de nome-valor. Eles são úteis para especificar valores com base em um valor de parâmetro de entrada. Para esta descrição, usaremos um mapeamento para especificar um ID de AMI para uma instância do EC2 com base no tipo de instância e na região na qual você criará a pilha. Para obter mais informações, consulte Mapeamentos.

  1. No painel do editor integrado, escolha a guia Mappings (Mapeamentos).

  2. Copie os seguintes mapeamentos JSON e cole-os no editor integrado.

    { "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "HVM64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" }, "t2.small" : { "Arch" : "HVM64" }, "t2.medium" : { "Arch" : "HVM64" }, "t2.large" : { "Arch" : "HVM64" }, "m1.small" : { "Arch" : "HVM64" }, "m1.medium" : { "Arch" : "HVM64" }, "m1.large" : { "Arch" : "HVM64" }, "m1.xlarge" : { "Arch" : "HVM64" }, "m2.xlarge" : { "Arch" : "HVM64" }, "m2.2xlarge" : { "Arch" : "HVM64" }, "m2.4xlarge" : { "Arch" : "HVM64" }, "m3.medium" : { "Arch" : "HVM64" }, "m3.large" : { "Arch" : "HVM64" }, "m3.xlarge" : { "Arch" : "HVM64" }, "m3.2xlarge" : { "Arch" : "HVM64" }, "m4.large" : { "Arch" : "HVM64" }, "m4.xlarge" : { "Arch" : "HVM64" }, "m4.2xlarge" : { "Arch" : "HVM64" }, "m4.4xlarge" : { "Arch" : "HVM64" }, "m4.10xlarge" : { "Arch" : "HVM64" }, "c1.medium" : { "Arch" : "HVM64" }, "c1.xlarge" : { "Arch" : "HVM64" }, "c3.large" : { "Arch" : "HVM64" }, "c3.xlarge" : { "Arch" : "HVM64" }, "c3.2xlarge" : { "Arch" : "HVM64" }, "c3.4xlarge" : { "Arch" : "HVM64" }, "c3.8xlarge" : { "Arch" : "HVM64" }, "c4.large" : { "Arch" : "HVM64" }, "c4.xlarge" : { "Arch" : "HVM64" }, "c4.2xlarge" : { "Arch" : "HVM64" }, "c4.4xlarge" : { "Arch" : "HVM64" }, "c4.8xlarge" : { "Arch" : "HVM64" }, "g2.2xlarge" : { "Arch" : "HVMG2" }, "g2.8xlarge" : { "Arch" : "HVMG2" }, "r3.large" : { "Arch" : "HVM64" }, "r3.xlarge" : { "Arch" : "HVM64" }, "r3.2xlarge" : { "Arch" : "HVM64" }, "r3.4xlarge" : { "Arch" : "HVM64" }, "r3.8xlarge" : { "Arch" : "HVM64" }, "i2.xlarge" : { "Arch" : "HVM64" }, "i2.2xlarge" : { "Arch" : "HVM64" }, "i2.4xlarge" : { "Arch" : "HVM64" }, "i2.8xlarge" : { "Arch" : "HVM64" }, "d2.xlarge" : { "Arch" : "HVM64" }, "d2.2xlarge" : { "Arch" : "HVM64" }, "d2.4xlarge" : { "Arch" : "HVM64" }, "d2.8xlarge" : { "Arch" : "HVM64" }, "hi1.4xlarge" : { "Arch" : "HVM64" }, "hs1.8xlarge" : { "Arch" : "HVM64" }, "cr1.8xlarge" : { "Arch" : "HVM64" }, "cc2.8xlarge" : { "Arch" : "HVM64" } }, "AWSRegionArch2AMI" : { "us-east-1" : {"HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c"}, "us-west-2" : {"HVM64" : "ami-a0cfeed8", "HVMG2" : "ami-0e09505bc235aa82d"}, "us-west-1" : {"HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435"}, "eu-west-2" : {"HVM64" : "ami-f976839e", "HVMG2" : "NOT_SUPPORTED"}, "eu-west-3" : {"HVM64" : "ami-0ebc281c20e89ba4b", "HVMG2" : "NOT_SUPPORTED"}, "eu-central-1" : {"HVM64" : "ami-0233214e13e500f77", "HVMG2" : "ami-06223d46a6d0661c7"}, "ap-northeast-1" : {"HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d"}, "ap-northeast-2" : {"HVM64" : "ami-0a10b2721688ce9d2", "HVMG2" : "NOT_SUPPORTED"}, "ap-northeast-3" : {"HVM64" : "ami-0d98120a9fb693f07", "HVMG2" : "NOT_SUPPORTED"}, "ap-southeast-1" : {"HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309"}, "ap-southeast-2" : {"HVM64" : "ami-09b42976632b27e9b", "HVMG2" : "ami-0a9ce9fecc3d1daf8"}, "ap-south-1" : {"HVM64" : "ami-0912f71e06545ad88", "HVMG2" : "ami-097b15e89dbdcfcf4"}, "us-east-2" : {"HVM64" : "ami-0b59bfac6be064b78", "HVMG2" : "NOT_SUPPORTED"}, "ca-central-1" : {"HVM64" : "ami-0b18956f", "HVMG2" : "NOT_SUPPORTED"}, "sa-east-1" : {"HVM64" : "ami-07b14488da8ea02a0", "HVMG2" : "NOT_SUPPORTED"}, "cn-north-1" : {"HVM64" : "ami-0a4eaf6c4454eda75", "HVMG2" : "NOT_SUPPORTED"}, "cn-northwest-1" : {"HVM64" : "ami-6b6a7d09", "HVMG2" : "NOT_SUPPORTED"} } } }

    Estes são os mesmos mapeamentos em YAML.

    Mappings: AWSInstanceType2Arch: t1.micro: Arch: HVM64 t2.nano: Arch: HVM64 t2.micro: Arch: HVM64 t2.small: Arch: HVM64 t2.medium: Arch: HVM64 t2.large: Arch: HVM64 m1.small: Arch: HVM64 m1.medium: Arch: HVM64 m1.large: Arch: HVM64 m1.xlarge: Arch: HVM64 m2.xlarge: Arch: HVM64 m2.2xlarge: Arch: HVM64 m2.4xlarge: Arch: HVM64 m3.medium: Arch: HVM64 m3.large: Arch: HVM64 m3.xlarge: Arch: HVM64 m3.2xlarge: Arch: HVM64 m4.large: Arch: HVM64 m4.xlarge: Arch: HVM64 m4.2xlarge: Arch: HVM64 m4.4xlarge: Arch: HVM64 m4.10xlarge: Arch: HVM64 c1.medium: Arch: HVM64 c1.xlarge: Arch: HVM64 c3.large: Arch: HVM64 c3.xlarge: Arch: HVM64 c3.2xlarge: Arch: HVM64 c3.4xlarge: Arch: HVM64 c3.8xlarge: Arch: HVM64 c4.large: Arch: HVM64 c4.xlarge: Arch: HVM64 c4.2xlarge: Arch: HVM64 c4.4xlarge: Arch: HVM64 c4.8xlarge: Arch: HVM64 g2.2xlarge: Arch: HVMG2 g2.8xlarge: Arch: HVMG2 r3.large: Arch: HVM64 r3.xlarge: Arch: HVM64 r3.2xlarge: Arch: HVM64 r3.4xlarge: Arch: HVM64 r3.8xlarge: Arch: HVM64 i2.xlarge: Arch: HVM64 i2.2xlarge: Arch: HVM64 i2.4xlarge: Arch: HVM64 i2.8xlarge: Arch: HVM64 d2.xlarge: Arch: HVM64 d2.2xlarge: Arch: HVM64 d2.4xlarge: Arch: HVM64 d2.8xlarge: Arch: HVM64 hi1.4xlarge: Arch: HVM64 hs1.8xlarge: Arch: HVM64 cr1.8xlarge: Arch: HVM64 cc2.8xlarge: Arch: HVM64 AWSRegionArch2AMI: us-east-1: HVM64: ami-0ff8a91507f77f867 HVMG2: ami-0a584ac55a7631c0c us-west-2: HVM64: ami-a0cfeed8 HVMG2: ami-0e09505bc235aa82d us-west-1: HVM64: ami-0bdb828fd58c52235 HVMG2: ami-066ee5fd4a9ef77f1 eu-west-1: HVM64: ami-047bb4163c506cd98 HVMG2: ami-0a7c483d527806435 eu-west-2: HVM64: ami-f976839e HVMG2: NOT_SUPPORTED eu-west-3: HVM64: ami-0ebc281c20e89ba4b HVMG2: NOT_SUPPORTED eu-central-1: HVM64: ami-0233214e13e500f77 HVMG2: ami-06223d46a6d0661c7 ap-northeast-1: HVM64: ami-06cd52961ce9f0d85 HVMG2: ami-053cdd503598e4a9d ap-northeast-2: HVM64: ami-0a10b2721688ce9d2 HVMG2: NOT_SUPPORTED ap-northeast-3: HVM64: ami-0d98120a9fb693f07 HVMG2: NOT_SUPPORTED ap-southeast-1: HVM64: ami-08569b978cc4dfa10 HVMG2: ami-0be9df32ae9f92309 ap-southeast-2: HVM64: ami-09b42976632b27e9b HVMG2: ami-0a9ce9fecc3d1daf8 ap-south-1: HVM64: ami-0912f71e06545ad88 HVMG2: ami-097b15e89dbdcfcf4 us-east-2: HVM64: ami-0b59bfac6be064b78 HVMG2: NOT_SUPPORTED ca-central-1: HVM64: ami-0b18956f HVMG2: NOT_SUPPORTED sa-east-1: HVM64: ami-07b14488da8ea02a0 HVMG2: NOT_SUPPORTED cn-north-1: HVM64: ami-0a4eaf6c4454eda75 HVMG2: NOT_SUPPORTED cn-northwest-1: HVM64: ami-6b6a7d09 HVMG2: NOT_SUPPORTED

Para adicionar saídas

As saídas declaram os valores que você deseja disponibilizar para uma chamada de API de describe stacks ou por meio da guia Outputs da pilha do console do CloudFormation. Para esta apresentação, mostraremos a URL do site para que você possa visualizar facilmente o site depois que criá-lo. Para obter mais informações, consulte Outputs.

  1. No painel do editor integrado, selecione a guia Outputs (Saídas).

  2. Copie a seguinte saída JSON e cole no editor integrado.

    A saída usa uma função intrínseca Fn::GetAtt para obter o IP público da instância de servidor da Web.

    { "Outputs": { "URL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "WebServerInstance", "PublicIp" ] } ] ] }, "Description": "Newly created application URL" } } }

    Esta é a mesma saída em YAML.

    Outputs: URL: Value: !Join - '' - - 'http://' - !GetAtt - WebServerInstance - PublicIp Description: Newly created application URL
  3. Salve seu modelo novamente para que você não perca as alterações. Você pode seguramente salvar as alterações no mesmo arquivo criado na seção anterior.

Agora que os parâmetros do modelo, mapeamentos e saídas estão implementados, é possível especificar as propriedades do recurso.

Etapa 3: Especificar propriedades do recurso

Muitos recursos têm propriedades necessárias que definem suas configurações ou definições, como o tipo de instância usada para o servidor da Web. Semelhante ao que fizemos na etapa anterior, usaremos o AWS CloudFormation Designer editor integrado para especificar as propriedades do recurso. Fornecemos YAML e JSON de amostra que você pode copiar e colar no editor integrado.

Para especificar as propriedades de recurso

  1. Na tela do AWS CloudFormation Designer, escolha o recurso VPC.

    O editor integrado mostra os componentes de nível de recurso que você pode editar, como as propriedades e atributos do recurso.

  2. No painel do editor integrado, escolha a guia Properties (Propriedades).

  3. Copie o seguinte trecho de JSON e cole-o no editor integrado entre as chaves ({}) de Properties (Propriedades).

    Esse snippet especifica as definições de DNS e o bloco CIDR da VPC.

    "EnableDnsSupport": "true", "EnableDnsHostnames": "true", "CidrBlock": "10.0.0.0/16"

    Para YAML, digite uma nova linha após Properties: e cole o seguinte snippet.

    EnableDnsSupport: 'true' EnableDnsHostnames: 'true' CidrBlock: 10.0.0.0/16
    nota

    Para eficiência, fornecemos snippets de JSON e YAML que você pode copiar e colar. Observe, no entanto, que o editor tem um recurso de preenchimento automático que você pode usar para especificar manualmente cada propriedade. Para obter mais informações, consulte Editor de JSON e YAML integrado.

  4. Repita este processo para os recursos a seguir:

    PublicSubnet

    Adicione o seguinte propriedade de bloco do CIDR depois da propriedade do ID da VPC. O AWS CloudFormation Designer adicionou automaticamente a propriedade de ID da VPC quando você arrastou a sub-rede dentro da VPC.

    nota

    Você verá algumas outras associações que o AWS CloudFormation Designer criou automaticamente para você. Adicione apenas as novas propriedades que estão em negrito.

    JSON

    "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24"

    YAML

    VpcId: !Ref VPC CidrBlock: 10.0.0.0/24
    PublicRoute

    Adicione propriedade de bloco CIDR de destino a seguir, que direciona todo o tráfego para o gateway de Internet:

    JSON

    "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" }

    YAML

    DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway
    WebServerSecurityGroup

    Adicione as seguintes regras de entrada que determinam qual tráfego acessar a instância de servidor da Web. As regras permitem todos os tráfegos HTTP e determinados SSH que você especifica como um valor de parâmetro ao criar uma pilha.

    JSON

    "VpcId": { "Ref": "VPC" }, "GroupDescription" : "Allow access from HTTP and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ]

    YAML

    VpcId: !Ref VPC GroupDescription: Allow access from HTTP and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation
    WebServerInstance

    Você precisa especificar um número de propriedades de instância de servidor da Web, então, vamos destacar apenas alguns para fins de demonstração. As propriedades InstanceType e ImageId usam os valores de mapeamento e parâmetro especificados na seção anterior. Quando você cria uma pilha, você especifica o tipo de instância como um valor de parâmetro. O valor ImageId é um mapeamento que é baseado na sua região da pilha e no tipo de instância que você especificou.

    A propriedade NetworkInterfaces especifica as configurações de rede para a instância de servidor da Web. Essa propriedade nos permite associar o security group e a sub-rede com a instância. Embora o AWS CloudFormation Designer tenha usado a propriedade SubnetId para associar a instância com a sub-rede, é necessário usar a propriedade NetworkInterfaces, pois essa é a única forma para dar um IP público para o servidor da Web. Além disso, quando você especifica a propriedade NetworkInterfaces, é necessário especificar a sub-rede e o security group dentro da propriedade.

    Na propriedade UserData, especificamos os scripts de configuração que são executados depois que a instância está pronta e em execução. Todas as informações de configuração são definidas nos metadados da instância, que adicionaremos na próxima etapa.

    Substitua todas as propriedades com o snippet a seguir:

    Importante

    Não anexe esse snippet às propriedades existentes.

    JSON

    "InstanceType": { "Ref": "InstanceType" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "NetworkInterfaces": [ { "GroupSet": [ { "Ref": "WebServerSecurityGroup" } ], "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "DeleteOnTermination": "true", "SubnetId": { "Ref": "PublicSubnet" } } ], "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets All ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }

    YAML

    InstanceType: !Ref InstanceType ImageId: !FindInMap - AWSRegionArch2AMI - !Ref 'AWS::Region' - !FindInMap - AWSInstanceType2Arch - !Ref InstanceType - Arch KeyName: !Ref KeyName NetworkInterfaces: - GroupSet: - !Ref WebServerSecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !Ref PublicSubnet UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - | yum install -y aws-cfn-bootstrap - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets All ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --region ' - !Ref 'AWS::Region' - |+
  5. Adicione os metadados da configuração do servidor da Web para o recurso WebServerInstance.

    1. Escolha o recurso WebServerInstance e depois a guia Metadata (Metadados) no painel editor integrado.

    2. Se você estiver criando seu modelo em JSON: dentro das chaves Metadata ({}) e depois da chave de fechamento AWS::CloudFormation::Designer, adicione uma vírgula (,).

    3. Depois da propriedade AWS::CloudFormation::Designer, adicione o seguinte snippet, que instrui o script de ajuda do cfn-init para iniciar do servidor da Web e cria uma página da Web básica.

      JSON

      "AWS::CloudFormation::Init" : { "configSets" : { "All" : [ "ConfigureSampleApp" ] }, "ConfigureSampleApp" : { "packages" : { "yum" : { "httpd" : [] } }, "files" : { "/var/www/html/index.html" : { "content" : { "Fn::Join" : ["\n", [ "<h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1>" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } }

      YAML

      'AWS::CloudFormation::Init': configSets: All: - ConfigureSampleApp ConfigureSampleApp: packages: yum: httpd: [] files: /var/www/html/index.html: content: !Join - |+ - - >- <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> mode: '000644' owner: root group: root services: sysvinit: httpd: enabled: 'true' ensureRunning: 'true'
  6. Na barra de ferramentas do AWS CloudFormation Designer, escolha Validate template (Validar modelo) ( ) para verificar erros de sintaxe no seu modelo.

    Visualize e corrija os erros no painel Mensagens e, em seguida, valide o modelo novamente. Se você não visualizar erros, seu modelo é sintaticamente válido.

  7. Salve o modelo concluído para manter todas as alterações feitas.

Agora você tem um modelo de CloudFormation completo que pode ser usado para criar um servidor Web básico em uma VPC. Para criar o modelo, primeiro adicionamos e conectamos os recursos de modelo usando o painel da tela do AWS CloudFormation Designer. Em seguida, usamos o editor integrado para adicionar outros componentes de modelo e para especificar as propriedades de recurso. Na próxima etapa, usaremos este modelo para criar uma pilha.

Etapa 4: Provisionar recursos

Para criar uma pilha, você pode iniciar o Assistente de criação de pilha do CloudFormation no AWS CloudFormation Designer. Usaremos o modelo que criamos nas etapas anteriores para criar uma pilha do CloudFormation. Depois que o CloudFormation provisionar todos os seus recursos, você terá um site básico em funcionamento.

Para criar a stack

  1. Na barra de ferramentas do AWS CloudFormation Designer, escolha Create Stack (Criar pilha) (o ícone de nuvem).

    O AWS CloudFormation Designer salva o modelo aberto em um bucket do S3 e, em seguida, inicia o Assistente de criação de pilha do CloudFormation. O CloudFormation usa o mesmo bucket do S3 criado sempre que você faz upload de modelos.

  2. O CloudFormation preenche automaticamente o URL do modelo; escolha Next.

  3. Na seção Especificar detalhes, insira o nome de uma pilha no campo Nome da pilha. Neste exemplo, use BasicWebServerStack.

  4. Na seção Parâmetros, para o campo KeyName, insira o nome de um par de chaves válido do Amazon EC2 na mesma região em que você está criando a pilha.

  5. Mantenha os outros valores de parâmetros padrão e escolha Próximo.

  6. Para esta demonstração, você não precisa adicionar tags ou especificar configurações avançadas, portanto escolha Próximo.

  7. Certifique-se de que o nome da pilha e o nome do par de chaves do Amazon EC2 estejam corretos e, em seguida, escolha Create (Criar).

Pode levar vários minutos para o AWS CloudFormation criar sua pilha. Para monitorar o progresso, exiba os eventos da pilha. Para obter mais informações sobre a exibição de eventos de pilha, consulte Visualizar dados e recursos da pilha do AWS CloudFormation no AWS Management Console. Após a criação da pilha, visualize as saídas doa pilha e vá para a URL do site de amostra para verificar se o site está em execução. Para obter mais informações, consulte Visualizar dados e recursos da pilha do AWS CloudFormation no AWS Management Console.

Agora que você criou com êxito um modelo e iniciou uma pilha usando o AWS CloudFormation Designer, é possível usar a pilha nas apresentações a seguir: Demonstração: use o AWS CloudFormation Designer para modificar o modelo de uma pilha, que modifica o modelo para criar um servidor da Web escalável.