[re:Invent 2019] EC2 Image Builder のパイプラインを AWS CLI で実行してみた #reinvent

こんにちは、コンサル部の望月です。

AWS CLI でも EC2 Image Builder やってみたいよね。わかります。

そこで EC2 Image Builder のパイプラインを AWS CLI で実行してみました。新サービスのため、最新の AWS CLI が必要となるため、最新の AWS CLI のインストールから紹介します。

やってみた

最新の AWS CLI をインストール

AWS CLI で Image Builder を利用できるのが、バージョン 1.16.293 からのため、最新の AWS CLI をインストールします。

ここでは Amazon Linux 2 を利用して、最新の AWS CLI をインストールしています。 以下、試してみた Amazon Linux 2 の AMI になります。

  • Amazon Linux 2
    • AMI ID: amzn2-ami-hvm-2.0.20191116.0-x86_64-gp2 (ami-068a6cefc24c301d2)

パッケージでインストールされている AWS CLI が古いため、パッケージを削除します。

$ aws --version
aws-cli/1.16.102 Python/2.7.16 Linux/4.14.152-127.182.amzn2.x86_64 botocore/1.12.92

$ rpm -qi awscli
Name        : awscli
Version     : 1.16.102
Release     : 1.amzn2.0.1
Architecture: noarch
Install Date: Mon 18 Nov 2019 10:59:12 PM UTC
Group       : Unspecified
Size        : 4321651
License     : ASL 2.0 and MIT
Signature   : RSA/SHA256, Sat 16 Feb 2019 12:02:18 AM UTC, Key ID 11cf1f95c87f5b1a
Source RPM  : awscli-1.16.102-1.amzn2.0.1.src.rpm
Build Date  : Thu 14 Feb 2019 06:13:11 PM UTC
Build Host  : build.amazon.com
Relocations : (not relocatable)
Packager    : Amazon Linux
Vendor      : Amazon Linux
URL         : http://aws.amazon.com/cli
Summary     : Universal Command Line Environment for AWS
Description :
This package provides a unified
command line interface to Amazon Web Services.

$ sudo yum remove awscli

pip で最新の AWS CLI をインストールします。

$ sudo yum install python-pip
$ source ~/.bash_profile
$ aws --version
aws-cli/1.16.294 Python/2.7.16 Linux/4.14.152-127.182.amzn2.x86_64 botocore/1.13.30

EC2 Image Builder が使えることを確認します。

$ aws imagebuilder help

IAMロールの作成

EC2 Image Builder を実行できるように EC2 IAM ロールを作成し ImageBuilderFullAccess を割り当てます。

IAMポリシーを以下ポリシーで作成し、このポリシーを割り当てた IAM ロールを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "imagebuilder:*"
            ],
            "Resource": "*"
        }
    ]
}

AWS CLI を最新にした EC2 インスタンスに作成した IAM ロールを割り当てます。

<img src="https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/12/ec2-image-builder-awscli-start-001.png" alt="" width="1016" height="213" class="alignnone size-full wp-image-502004" />

コマンド実行

コマンドの実行にはイメージパイプラインの ARN が必要となります。作成したイメージパイプラインの ARN は EC2 Image Builder サービスページの Image pipelines ページで確認できます。

<img src="https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/12/ec2-image-builder-awscli-start-002.png" alt="" width="1024" height="473" class="alignnone size-full wp-image-502005" />

下記コマンドで、パイプラインを実行します。

$ aws --region ap-northeast-1 imagebuilder start-image-pipeline-execution --image-pipeline-arn '<ARN>'
{
    "imageBuildVersionArn": "<ARN>/1.0.0/2",
    "requestId": "xxxx-xxxx-xxxx-xxxx-xxxx",
    "clientToken": "xxxx-xxxx-xxxx-xxxx-xxxx"
}

Image pipelines ページの実行したパイプラインをクリックし、詳細ページの Output images から先程実行したバージョン "1.0.0/2" が実行されたことが確認できます。

まとめ

AWS CLI を利用して、EC2 Image Builder のパイプラインを実行してみました。

これは次にやってみたいことの前準備という感じで、次のブログはこれをやってみるんだろうなというのがバレバレかと思いますが、次回は S3 にデプロイするファイルを Put したら、CodePipe を利用して、自動的に EC2 Image Builder のパイプラインが実行されるように CI/CD への組み込みを試してみたいと思います。

また、新サービスがどんどん発表され、AWS CLI ががんがんバージョンアップされているので、AWS CLI で試したい人は pip で AWS CLI をインストールしていきましょう。

私が書いた EC2 Image Builder 一覧

[re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent

[re:Invent 2019] EC2 Image Builder で S3 からコンテンツをデプロイしてみた #reinvent

[re:Invent 2019] EC2 Image Builder で複数コンポーネントを実行してみた #reinvent