2017-12-07 3 views
2

Ich baue eine benutzerdefinierte Plattform, um unsere Anwendung auszuführen. Wir haben Standard-VPC gelöscht, so dass ich gemäß der Dokumentation fast überall die VPC- und Subnetz-ID angeben muss. So ist der Befehl, den ich für EBP laufen sieht wie folgt aus:EB Custom Platform ohne Standard-VPC schlägt fehl

ebp create -v --vpc.id vpc-xxxxxxx --vpc.subnets subnet-xxxxxx --vpc.publicip{code} 

Die oben dreht das pcakcer Umgebung ohne Problem jedoch, wenn der Packer starten eine Instanz bauen Ich erhalte die folgende Fehlermeldung:

2017-12-07 18:07:05 UTC+0100 ERROR [Instance: i-00f376be9fc2fea34] Command failed on instance. Return code: 1 Output: 'packer build' failed, the build log has been saved to '/var/log/packer-builder/XXX1.0.19-builder.log'. Hook /opt/elasticbeanstalk/hooks/packerbuild/build.rb failed. For more detail, check /var/log/eb-activity.log using console or EB CLI. 
2017-12-07 18:06:55 UTC+0100 ERROR 'packer build' failed, the build log has been saved to '/var/log/packer-builder/XXX:1.0.19-builder.log' 
2017-12-07 18:06:55 UTC+0100 ERROR Packer failed with error: '--> HVM AMI builder: VPCIdNotSpecified: No default VPC for this user status code: 400, request id: 28d94e8c-e24d-440f-9c64-88826e042e9d'{code} 

Sowohl die Vorlage als auch die platform.yaml geben vpc_id und die Subnetz-ID an, dies wird jedoch vom Packer nicht berücksichtigt. platform.yaml:

version: "1.0" 

provisioner: 
    type: packer 
    template: tomcat_platform.json 
    flavor: ubuntu1604 

metadata: 
    maintainer: <Enter your contact details here> 
    description: Ubuntu running Tomcat 
    operating_system_name: Ubuntu Server 
    operating_system_version: 16.04 LTS 
    programming_language_name: Java 
    programming_language_version: 8 
    framework_name: Tomcat 
    framework_version: 7 
    app_server_name: "none" 
    app_server_version: "none" 

option_definitions: 
    - namespace: "aws:elasticbeanstalk:container:custom:application" 
    option_name: "TOMCAT_START" 
    description: "Default application startup command" 
    default_value: "" 

option_settings: 
    - namespace: "aws:ec2:vpc" 
    option_name: "VPCId" 
    value: "vpc-xxxxxxx" 
    - namespace: "aws:ec2:vpc" 
    option_name: "Subnets" 
    value: "subnet-xxxxxxx" 
    - namespace: "aws:elb:listener:80" 
    option_name: "InstancePort" 
    value: "8080" 
    - namespace: "aws:elasticbeanstalk:application" 
    option_name: "Application Healthcheck URL" 
    value: "TCP:8080" 

tomcat_platform.json:

{ 
    "variables": { 
    "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", 
    "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", 
    "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" 

    }, 
    "builders": [ 
    { 
     "type": "amazon-ebs", 
     "region": "eu-west-1", 
     "source_ami": "ami-8fd760f6", 
     "instance_type": "t2.micro", 
     "ami_virtualization_type": "hvm", 
     "ssh_username": "admin", 
     "ami_name": "Tomcat running on Ubuntu Server 16.04 LTS (built on {{isotime \"20060102150405\"}})", 
     "ami_description": "Tomcat running on Ubuntu Server 16.04 LTS (built on {{isotime \"20060102150405\"}})", 
     "vpc_id": "vpc-xxxxxx", 
     "subnet_id": "subnet-xxxxxx", 
     "associate_public_ip_address": "true", 
     "tags": { 
     "eb_platform_name": "{{user `platform_name`}}", 
     "eb_platform_version": "{{user `platform_version`}}", 
     "eb_platform_arn": "{{user `platform_arn`}}" 
     } 
    } 
    ], 
    "provisioners": [ 
    { 
     "type": "file", 
     "source": "builder", 
     "destination": "/tmp/" 
    }, 
    { 
     "type": "shell", 
     "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path  }}", 
     "scripts": [ 
     "builder/builder.sh" 
     ] 
    } 
    ] 
} 

eine Idee schätzen, wie diese Arbeit zu machen, wie erwartet. Ich habe einige Probleme mit dem Packer gefunden, scheint aber auf seiner Seite gelöst zu sein, so dass in der Dokumentation nur angegeben wird, dass die Vorlage Ziel-VPC und Subnet angeben muss.

Antwort

0

Die AWS-Dokumentation ist in diesem Fall ein wenig irreführend. Sie benötigen eine Standard-VPC, um eine benutzerdefinierte Plattform zu erstellen. Das, was ich gesehen habe, liegt daran, dass die VPC-Flags, die Sie an den Befehl ebp create übergeben, nicht an den Packer-Prozess weitergegeben werden, der die Plattform tatsächlich erstellt.

Um den Fehler zu umgehen, können Sie einfach eine neue Standard-VPC erstellen, die Sie nur für die benutzerdefinierte Plattformerstellung verwenden.