J'essaye de construire une image dorée avec packer pour les ebs amazoniens. J'ai créé un utilisateur sur la console AWS AMI pour obtenir la clé d'accès et la clé secrète. Lorsque je mets ces valeurs dans le fichier application-server.json et que je lance la commande packer:

packer build -only = serveur-d'application amazon-ebs.json

Je reçois une erreur disant

Erreur lors de l'interrogation de l'AMI: AuthFailure: les informations d'identification doivent avoir exactement 5 éléments délimités par une barre oblique, par exemple keyid / date / region / service / term, obtenu ' my_key '

code d'état: 401, ID de demande: d8e8359a-dfa4-47da-bf05-81c957849a6c

J'ai remplacé la vraie clé par my_key ici.

Comment puis-je diviser la clé? Dois-je créer une instance manuellement avant de lancer la commande packer?

Mise à jour n ° 1: application-server.json

{
  "variables": {
      "PACKER_OS_FLAVOUR": "ubuntu",
      "PACKER_BOX_NAME": "ubuntu-14.04.4-server-amd64",
      "AWS_ACCESS_KEY_ID": "{{env `AWS_ACCESS_KEY_ID`}}",
      "AWS_SECRET_ACCESS_KEY": "{{env `AWS_SECRET_ACCESS_KEY`}}",
      "DIGITALOCEAN_API_TOKEN": "{{env `DIGITALOCEAN_API_TOKEN`}}"
    },
    "builders": [
      {
        "type": "virtualbox-iso",
        "boot_command": [
          "<esc><wait>",
          "<esc><wait>",
          "<enter><wait>",
          "/install/vmlinuz<wait>",
          " auto<wait>",
          " console-setup/ask_detect=false<wait>",
          " console-setup/layoutcode=us<wait>",
          " console-setup/modelcode=pc105<wait>",
          " debconf/frontend=noninteractive<wait>",
          " debian-installer=en_US<wait>",
          " fb=false<wait>",
          " initrd=/install/initrd.gz<wait>",
          " kbd-chooser/method=us<wait>",
          " keyboard-configuration/layout=USA<wait>",
          " keyboard-configuration/variant=USA<wait>",
          " locale=en_US<wait>",
          " netcfg/get_domain=vm<wait>",
          " netcfg/get_hostname=vagrant<wait>",
          " noapic<wait>",
          " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<wait>",
          " -- <wait>",
          "<enter><wait>"
        ],
        "boot_wait": "10s",
        "headless": false,
        "disk_size": 10140,
        "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
        "guest_os_type": "Ubuntu_64",
        "http_directory": "http",
        "iso_checksum": "07e4bb5569814eab41fafac882ba127893e3ff0bdb7ec931c9b2d040e3e94e7a",
        "iso_checksum_type": "sha256",
        "iso_url": "http://releases.ubuntu.com/trusty/{{ user `PACKER_BOX_NAME` }}.iso",
        "shutdown_command": "echo 'vagrant'|sudo -S shutdown -P now",
        "ssh_password": "vagrant",
        "ssh_port": 22,
        "ssh_username": "vagrant",
        "ssh_wait_timeout": "10000s",
        "type": "virtualbox-iso",
        "vm_name": "{{ user `PACKER_BOX_NAME` }}",
        "vboxmanage": [
          ["modifyvm", "{{.Name}}", "--memory", "1024"],
          ["modifyvm", "{{.Name}}", "--cpus", "2"]
        ],
        "virtualbox_version_file": ".vbox_version"
      },
      {
        "type": "amazon-ebs",
        "access_key": "AKIAJEXAMPEXAMPEXAMP ",
        "secret_key": "ExAMpleExAmpLEExAMPlEExAMPlEexAmpLEExaMPL",
        "region": "us-east-1",
        "source_ami": "ami-10b68a78",
        "instance_type": "t2.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-app-server {{timestamp}}"
      },
      {
        "type": "googlecompute",
        "account_file": "account.json",
        "project_id": "devops-intro-project",
        "source_image": "ubuntu-1404-trusty-v20150316",
        "zone": "us-central1-a",
        "image_name": "application-ubuntu-1404-{{timestamp}}",
        "machine_type": "n1-standard-1",
        "ssh_username": "ubuntu"
      },
      {
        "type": "digitalocean",
        "api_token": "{{ user `DIGITALOCEAN_API_TOKEN` }}",
        "image": "ubuntu-14-04-x64",
        "region": "tor1",
        "size": "512mb",
        "droplet_name": "udacity-devops",
        "private_networking": true
      }
  ],

  "provisioners": [
    {
      "type": "shell",
      "execute_command": "echo 'vagrant'|{{.Vars}} sudo -S -E bash '{{.Path}}'",
      "scripts": [
        "scripts/update.sh"
      ]
    },
    {
    "type": "shell",
    "only": ["virtualbox-iso"],
    "execute_command": "echo 'vagrant'|sudo -S -E bash '{{.Path}}'",
    "scripts": [
        "scripts/virtualbox.sh",
        "scripts/vagrant.sh"
      ]
    },
    {
      "type": "shell",
      "execute_command": "echo 'vagrant'|sudo -S -E bash '{{.Path}}'",
      "scripts": [
        "scripts/application.sh",
        "scripts/cleanup.sh"
      ]
    }
  ],
  "post-processors": [
    [
      {
        "type": "vagrant",
        "except": ["googlecompute", "digitalocean"],
        "compression_level": "9",
        "output": "{{.Provider}}/{{ user `PACKER_BOX_NAME` }}-appserver_{{.Provider}}.box"
      }
    ]
  ]
}

Mise à jour n ° 2: Le dernier problème était l'espace vide dans la clé d'accès. Incroyable.

Maintenant je reçois

amazon-ebs: Erreur lors du nettoyage de la paire de clés. Veuillez supprimer la clé manuellement: Erreur de construction de 'amazon-ebs': Erreur lors de la création de la paire de clés temporaire: Opération non autorisée: Vous n'êtes pas autorisé à effectuer cette opération. code d'état: 403, ID de demande: ee8cd02a-bdd8-4987-a798-00dc1f94e8e7

0
Alessandro Carrese 17 janv. 2017 à 15:39

2 réponses

Meilleure réponse

Après avoir changé la clé d'accès et supprimé le dernier espace de la chaîne; Pour résoudre l'erreur concernant la paire de clés:

J'ai ajouté l'utilisateur à un groupe dans Amazon AWS IAM et ajouté la stratégie trouvée dans la documentation Packer:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Action" : [
        "ec2:AttachVolume",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CopyImage",
        "ec2:CreateImage",
        "ec2:CreateKeypair",
        "ec2:CreateSecurityGroup",
        "ec2:CreateSnapshot",
        "ec2:CreateTags",
        "ec2:CreateVolume",
        "ec2:DeleteKeypair",
        "ec2:DeleteSecurityGroup",
        "ec2:DeleteSnapshot",
        "ec2:DeleteVolume",
        "ec2:DeregisterImage",
        "ec2:DescribeImageAttribute",
        "ec2:DescribeImages",
        "ec2:DescribeInstances",
        "ec2:DescribeRegions",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSnapshots",
        "ec2:DescribeSubnets",
        "ec2:DescribeTags",
        "ec2:DescribeVolumes",
        "ec2:DetachVolume",
        "ec2:GetPasswordData",
        "ec2:ModifyImageAttribute",
        "ec2:ModifyInstanceAttribute",
        "ec2:ModifySnapshotAttribute",
        "ec2:RegisterImage",
        "ec2:RunInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances"
      ],
      "Resource" : "*"
  }]
}

Ça a marché.

0
Alessandro Carrese 18 janv. 2017 à 15:32

Vous pouvez spécifier votre ID de clé d'accès et votre clé secrète dans le modèle, par exemple:

{
   "access_key": "AKIAIOSFODNN7EXAMPLE", 
   "secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
} 

Consultez AWS docs - Access keys et < a href = "https://www.packer.io/docs/builders/amazon.html" rel = "nofollow noreferrer" title = "Packer docs - Amazon Builders"> Packer docs - Amazon Builders .

Si vous partagez votre modèle, je peux vous indiquer ce qui ne va pas.

1
Rickard von Essen 17 janv. 2017 à 14:38