Ich möchte meine FreeTier Git Repos von CodeCommit klonen, wenn Sie Packer verwenden, um ein AMI zu erstellen. Dies ist unglaublich schwierig und schlecht dokumentiert.Wie kann Packer während des AMI-Builds auf CodeCommit zugreifen?
Antwort
Das ist, was endlich für mich funktioniert hat. Das ist Ubuntu 16.04 hvm: ebs als Basisbild, da es einen modernen und funktionierenden Git und Awscli installieren wird. 14.04 hatte viele Probleme, die sich am Ende nicht lohnten.
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"name": "aws",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"iam_instance_profile": "packer",
"region": "us-east-1",
"source_ami": "ami-840910ee",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "myproject {{timestamp}}"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get update",
"sudo apt-get upgrade -y",
"sudo apt-get install -y git awscli python-virtualenv",
"sudo install -o ubuntu -g ubuntu -m 755 -d /opt/scratch",
"virtualenv /opt/scratch/venv",
"git config --global credential.helper '!aws codecommit credential-helper [email protected]'",
"git config --global credential.UseHttpPath true",
"git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/myproject /opt/scratch/venv/src/myproject",
"/opt/scratch/venv/bin/pip install -r /opt/scratch/venv/src/myproject/requirements.txt"
]
}]
}
In der IAM-Konsole, dass der Benutzer Packer werden Bedürfnisse der iam:PassRole
Politik verwenden, um die iam_instance_profile
Richtlinie verwenden können.
Auch in der IAM-Konsole müssen Sie eine Rolle für EC2 erstellen und ihr die Richtlinie AWSCodeCommitReadOnly
geben.
Beachten Sie, dass --profile default
in credential.helper fehlt, dies ist beabsichtigt. Unter Verwendung der Rolle gibt es keine Datei, die das Standardprofil enthält. Stattdessen wird aws-cli
die der Instanz zugewiesene Rolle verwenden, die es ermöglicht, aus CodeCommit