Amazon Cloud Formation: arquivo de importação do bucket do S3

1

Estou com dificuldades para obter arquivos do meu bucket do S3 para minha instância do EC2 usando a formação de nuvens. Eu tenho os seguintes arquivos:

"files" : {
  "/var/www/text.txt": {
      "source": "https://s3.amazonaws.com/bucket/test.txt",
      "mode": "000644",
      "owner" : "root",
      "group" : "root"
  },
  "/var/temp/http.conf": {
    "source" : "https://s3.amazonaws.com/bucket/httpd.conf",
    "mode": "000644",
    "owner" : "root",
    "group" : "root"
  },
  "/var/temp/mime-types.conf": {
    "source" : "https://s3.amazonaws.com/bucket/mime-types.conf",
    "mode": "000644",
    "owner" : "root",
    "group" : "root"
  }
}

Onde test.txt é um arquivo com o texto "text" e os outros dois são arquivos de configuração.

Atualizei minhas permissões no arquivo test.txt para que qualquer um possa visualizar ou fazer o download, tentei fazer o http por https e tentei remover os outros dois arquivos.

Até agora, /var/www/ será criado com quatro diretórios, mas não com /var/temp/ . /var/www/error também conterá arquivos.

Estoucomaimpressãodequeissodevefuncionar,masessenãoéocaso.Estoufazendoalgoerrado?Estouseguindoa documentação do aws .

EDITAR Eu olhei no log de erros. Aqui está a saída. Aparentemente não pode encontrar o arquivo:

2015-06-04 14:28:50,381 [ERROR] HTTP Error 404 : <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 159, in _retry
    return f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 283, in get_role_creds
    resp.raise_for_status()
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/packages/requests/models.py", line 834, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
HTTPError: 404 Client Error: Not Found
2015-06-04 14:28:51,208 [ERROR] HTTP Error 404 : <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 159, in _retry
    return f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 283, in get_role_creds
"cfn-init.log" [readonly] 1216L, 58277C
    
por Stanley Cup Phil 03.06.2015 / 18:48

2 respostas

3

Eu não acho que você esteja recebendo arquivos copiados. Pode ser necessário adicionar o S3 acesso role do IAM à sua instância - por exemplo, AmazonS3FullAccess . Eu faço algo semelhante, mas eu configurei minhas instâncias com essa função e copiei arquivos para ele do S3 com aws s3 cp ... ou diretórios inteiros com aws s3 sync ... . Eu coloquei esses comandos no campo de dados do usuário para que eu possa "configurar a instância e esquecê-la"

    
por 04.06.2015 / 19:02
3

Para obter a cópia do arquivo S3 funcionando com o acesso do S3 Readonly, você precisa:

  1. Para atribuir sua instância a um perfil de instância - anexado a uma função de instância, com acesso somente leitura ao bloco - [ "s3:Get*", "s3:List*" ]
  2. Defina AWS::CloudFormation::Authentication ao lado da seção AWS::CloudFormation::Init e configure o papel como abaixo.
  3. Assegure-se de que a seção "source" se pareça abaixo.

    "AWS::CloudFormation::Authentication" : {
      "default" : {
        "type" : "S3",
        "buckets" : [ { "Ref" : "ConfigBucket" } ],
        "roleName" : { "Ref" : "MyNodeRole" }
        }
    },
    
    "AWS::CloudFormation::Init" : {
      "config" : {
        "files" : {
          "/etc/myapp/config/filename": {
            "source" : { "Fn::Join": [ "", [ "http://", { "Ref" : "ConfigBucket" }, ".s3-us-west-1.amazonaws.com/config/filename" ]]},
            "mode": "000444",
            "owner": "root",
            "group": "root",
            "authentication": "default"
            }
        }
      }
    }
    

O link source precisa ser uma chave. Documentação da AWS de um bucket S3 afirma:

Objects stored in the buckets have a unique key value and are retrieved using a HTTP URL address. For example, if an object with a key value /photos/mygarden.jpg is stored in the myawsbucket bucket, then it is addressable using the URL http://myawsbucket.s3.amazonaws.com/photos/mygarden.jpg.

    
por 09.02.2017 / 06:52