GastHUBアクションを使用してHashicorpパッカーを使用してAWS AMIをビルドする
22758 ワード
セキュリティベストプラクティスは、クラウド上でVMを回転させる最新のベースイメージ(例えばAWS AMI)を推奨します.最新のソフトウェアパッチは、どんなセキュリティ違反の危険性を減らします.これは、最新のソフトウェアバージョンでイメージ作成プロセスを自動化するためにイメージファクトリをセットアップする強いニーズを強調します.
また、すべての組織は、与えられたイメージのためにインストールされるソフトウェアの標準的なリストを持っています.唯一の重要なソフトウェアは、セキュリティ面から爆発面を減らすためのリストの一部である必要があります.ソフトウェアのこのリストは、VMが作成されるか、または、VMが創造の過程にあるならば、インストールされることができます.しかし、両方のこれらのテクニックは、時間がかかり、したがって、推奨されません.
ベースイメージ自体でこのソフトウェアリストを焼くのが好ましいでしょう.HashiCorp Packer 単一のソース構成から複数のプラットホームのために自動化されたマシンイメージを構築することを専門とするオープンソース・ツールです.
ハシコップを参照documentation あなたのハードウェアOSに基づくパッカーインストールのために.
このデモのために、我々はこのワークフローを自動化して、結局、AWSで焼かれたイメージ(AMI)を押すために、CI/CDパイプラインをつくるために、Githubアクションを使用します.これは、ソフトウェア開発ライフサイクル内のタスクを自動化するプラットフォームです.それは
アクションはYAMLファイルで定義されます.これは、プルリクエストの作成、コードコミット、およびはるかに多くのGithubイベントを使用してパイプラインワークフローをトリガーすることができます.
プログラムアクセスによるAWSユーザ アクセスキー 秘密アクセスキー AWS IAM特権EC 2インスタンスを作成する(EC 2インスタンスを作成、変更、削除).参照documentation iam権限の完全なリストについては、Amazon EBSビルダーを実行する必要があります. この投稿では、私たちのUbuntuベースイメージで開いたJDK(Java 8)を焼いて、AWSにプッシュします.パッカーの設定は、HCL(. pkr . hclファイル拡張子)とjson(. pkr . json)形式で記述できます.我々は、このデモのHCL言語を使用します.
リファレンスgithubリポジトリpkr-aws-ubuntu-java
Packerの設定を書き始めましょう.私は
プロジェクトフォルダ
ソースブロックは、特定の
次のコードをコピーします
The
名前は阿弥をつくる
また、SSHコミュニケータを使用します
The
上記のプロビジョナーは、シェルプロビジョナーを定義し、ベースイメージにオープンJDK 8をインストールします.
最終ファイル
新しいファイルを作成します.ワークフローディレクトリ
私たちは、このワークフローをwee時間で実行するようにスケジュールします.
最初のステップは、ランナー環境でソースコードをチェックアウトすることです.
また、すべての組織は、与えられたイメージのためにインストールされるソフトウェアの標準的なリストを持っています.唯一の重要なソフトウェアは、セキュリティ面から爆発面を減らすためのリストの一部である必要があります.ソフトウェアのこのリストは、VMが作成されるか、または、VMが創造の過程にあるならば、インストールされることができます.しかし、両方のこれらのテクニックは、時間がかかり、したがって、推奨されません.
ベースイメージ自体でこのソフトウェアリストを焼くのが好ましいでしょう.HashiCorp Packer 単一のソース構成から複数のプラットホームのために自動化されたマシンイメージを構築することを専門とするオープンソース・ツールです.
Hashicorpパッカーインストール
ハシコップを参照documentation あなたのハードウェアOSに基づくパッカーインストールのために.
ギタブアクション
このデモのために、我々はこのワークフローを自動化して、結局、AWSで焼かれたイメージ(AMI)を押すために、CI/CDパイプラインをつくるために、Githubアクションを使用します.これは、ソフトウェア開発ライフサイクル内のタスクを自動化するプラットフォームです.それは
event-driven
フレームワークは、与えられたイベントのための一連のコマンドを運ぶことができることを意味するか、1回または繰り返しのタスクのためにスケジュールすることができます.(例えば、プルリクエスト作成にテストスイートを実行し、問題にラベルを追加したり、lint checkなど)アクションはYAMLファイルで定義されます.これは、プルリクエストの作成、コードコミット、およびはるかに多くのGithubイベントを使用してパイプラインワークフローをトリガーすることができます.
必要条件
リファレンスgithubリポジトリpkr-aws-ubuntu-java
コードタイム
Packerの設定を書き始めましょう.私は
Linux
このデモ用マシンパッカーの設定
プロジェクトフォルダ
pkr-aws-ubuntu-java
mkdir pkr-aws-ubuntu-java && cd $_
ファイル名aws-demo.pkr.hcl
touch aws-demo.pkr.hcl
お気に入りのIDEを開きます.以下のコードをコピーしてくださいaws-demo.pkr.hcl
ファイル.packer {
required_plugins {
amazon = {
version = ">= 0.0.2"
source = "github.com/hashicorp/amazon"
}
}
}
The packer {}
ブロックには、必要なパッカーのバージョンを含むパッカー設定が含まれます.The required_plugins
Packerブロックのブロックで、テンプレートを使用してイメージを構築するために必要なプラグインを指定します.プラグインブロックにはversion
and source
属性.ソースブロック
ソースブロックは、特定の
builder
次に、build
ブロック.ソースブロックは、ビルダーとコミュニケータを使用して、仮想化タイプ、イメージの打ち上げタイプなどを定義します.次のコードをコピーします
aws-demo.pkr.hcl
ファイル.variable "ami_prefix" {
type = string
default = "packer-aws-ubuntu-java"
}
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}
source "amazon-ebs" "ubuntu_java" {
ami_name = "${var.ami_prefix}-${local.timestamp}"
instance_type = "t2.micro"
region = "us-east-1"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
変数ami_prefix
はami画像を定義するために使われる.ローカル変数timestamp
アミの名前に一意性を確保するのに役立ちます.The
amazon-ebs
BuilderはソースAMIを起動し、このインスタンス内でプロビジョナーを実行し、EBSにバックアップされたamiにパッケージ化します.このビルダーの設定はt2.micro
を使用してUS - East - 1領域のAMIubuntu:xenial
ベースイメージとしてのアミ名前は阿弥をつくる
packer-aws-ubuntu-java+timestamp
. ami名は一意でなければなりません.また、SSHコミュニケータを使用します
ssh_username
属性.パッカーは、あなたのインスタンスを提供するために一時的なキーペアとセキュリティグループを使用してEC 2インスタンスにsshすることができます.ビルドブロック
The
build
ブロックは、起動後にEC 2インスタンスでどのようにパッカーが行うかを定義します.build {
name = "packer-ubuntu"
sources = [
"source.amazon-ebs.ubuntu_java"
]
provisioner "shell" {
inline = [
"echo Install Open JDK 8 - START",
"sleep 10",
"sudo apt-get update",
"sudo apt-get install -y openjdk-8-jdk",
"echo Install Open JDK 8 - SUCCESS",
]
}
}
provisioner
ブロックは、ベースイメージに変更を自動化することができます.これは、シェルスクリプト、ファイルのアップロード、および現代的な構成管理ツールと統合可能な、シェフなどなどを活用します.上記のプロビジョナーは、シェルプロビジョナーを定義し、ベースイメージにオープンJDK 8をインストールします.
最終ファイル
aws-demo.pkr.hcl
以下のようになります.packer {
required_plugins {
amazon = {
version = ">= 0.0.2"
source = "github.com/hashicorp/amazon"
}
}
}
variable "ami_prefix" {
type = string
default = "packer-aws-ubuntu-java"
}
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}
source "amazon-ebs" "ubuntu_java" {
ami_name = "${var.ami_prefix}-${local.timestamp}"
instance_type = "t2.micro"
region = "us-east-1"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
build {
name = "packer-ubuntu"
sources = [
"source.amazon-ebs.ubuntu_java"
]
provisioner "shell" {
inline = [
"echo Install Open JDK 8 - START",
"sleep 10",
"sudo apt-get update",
"sudo apt-get install -y openjdk-8-jdk",
"echo Install Open JDK 8 - SUCCESS",
]
}
}
ギタブアクション
新しいファイルを作成します.ワークフローディレクトリ
github-actions-packer.yml
私たちは、このワークフローをwee時間で実行するようにスケジュールします.
name
- ワークフローの名前です.githubはリポジトリのアクションページにワークフローの名前を表示しますname: AWS AMI using Packer Config
on -(必須)ワークフローをトリガーするGitHubイベントの名前.我々は、スケジュールのワークフローをトリガするように構成している.on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '0 4 * * *'
jobs
- ワークフローは1つ以上のジョブで構成されます.これらのジョブは並列または順次実行することができます.それぞれのジョブはrun onで指定されたランナー環境で実行されます.job name
- Githubに表示されるジョブの名前です.runs-on
- (必須)ジョブを実行するマシンの種類を決定します.マシンのいずれかgithubホストランナーまたは自己ホストランナーです.利用可能なgithubホストランナータイプは以下の通りです.jobs:
packer:
runs-on: ubuntu-latest
name: packer
steps
- ジョブ内のステップと呼ばれるタスクのシーケンス.彼らは、コマンドを実行することができますタスクを設定したり、リポジトリ、パブリックリポジトリで動作を実行したり、アクションをDockerレジストリで公開.最初のステップは、ランナー環境でソースコードをチェックアウトすることです.
Checkout V2
- このアクションはあなたの倉庫を$ GithubMountワークスペースの下でチェックします. steps:
- name: Checkout Repository
uses: actions/checkout@v2
AWSクラウド環境へのアクセスを確保するには、設定する必要がありますAWS_ACCESS_KEY_ID
and AWS_SECRET_ACCESS_KEY
ランナー環境で.これらの変数の値は、以下のセクションのGithub秘密として設定されます.Configure AWS Credentials
- このアクションは、他のGithubアクションで使用するAWS資格と領域環境変数を設定します. - name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }}
# if you have/need it
aws-region: us-east-1
Init
Github actionワークフローで使用されるパッカー設定を初期化します. # Initialize Packer templates
- name: Initialize Packer Template
uses: hashicorp/packer-github-actions@master
with:
command: init
Validate
設定が正しく書き込まれているかどうかを調べます.それ以外の場合はエラーをスローします. # validate templates
- name: Validate Template
uses: hashicorp/packer-github-actions@master
with:
command: validate
arguments: -syntax-only
target: aws-demo.pkr.hcl
Build
パッカーの設定を実行します. # build artifact
- name: Build Artifact
uses: hashicorp/packer-github-actions@master
with:
command: build
arguments: "-color=false -on-error=abort"
target: aws-demo.pkr.hcl
env:
PACKER_LOG: 1
完全なファイルgithubアクションパッカー.以下のようになります.name: AWS AMI using Packer Config
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '0 4 * * *'
jobs:
packer:
runs-on: ubuntu-latest
name: packer
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }}
# if you have/need it
aws-region: us-east-1
# Initialize Packer templates
- name: Initialize Packer Template
uses: hashicorp/packer-github-actions@master
with:
command: init
# validate templates
- name: Validate Template
uses: hashicorp/packer-github-actions@master
with:
command: validate
arguments: -syntax-only
target: aws-demo.pkr.hcl
# build artifact
- name: Build Artifact
uses: hashicorp/packer-github-actions@master
with:
command: build
arguments: "-color=false -on-error=abort"
target: aws-demo.pkr.hcl
env:
PACKER_LOG: 1
ソースコードは準備ができて、githubリポジトリにプッシュすることができます.構成通り、ワークフローは午前4時00分に起動されます.Reference
この問題について(GastHUBアクションを使用してHashicorpパッカーを使用してAWS AMIをビルドする), 我々は、より多くの情報をここで見つけました https://dev.to/g33kzone/build-aws-ami-with-hashicorp-packer-using-github-actions-5f86テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol