デフォルトVPCがない環境でPackerを実行したらエラった話

デフォルトVPCがない環境でPackerを実行したらエラった話:


はじめに

AWS環境でPackerを使ってゴールデンAMIを作ろうとしたら、エラったので書きます!


構成について

Packerは、事前に導入していることを前提とします。

また、今回作成するAMIは、Amazon Linux 2の最新を使います。

  • Cloud: AWS
  • Region: ap-northeast-1
  • OS: Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0a2de1c3b415889d2
  • Packer: 1.3.3


Packerテンプレートの作成

以下のテンプレートを作成します。

  • build.json
  • variable.json
サンプルのため、yum updateのみの単純なbuild.jsonを作成します。

AMIの指定をamzn2-ami-hvm-*-x86_64-gp2にすることでAMIの最新を取得することができます。
クラスメソッドさんの記事を参考にさせていただきました。ありがとうございます!

build.json
{ 
  "builders": [{ 
  "type": "amazon-ebs", 
  "region": "{{user `region`}}", 
  "source_ami_filter": { 
    "filters": { 
      "name": "amzn2-ami-hvm-*-x86_64-gp2" 
    }, 
    "owners": "137112412989", 
    "most_recent": true 
  },      
  "instance_type": "{{user `instance_type`}}", 
  "ssh_username": "{{user `ssh_username`}}", 
  "ssh_timeout": "5m", 
  "ami_name": "packer-base-{{timestamp}}", 
  "tags": { 
    "Base_AMI_ID": "{{ .SourceAMI }}", 
    "Base_AMI_NAME": "{{ .SourceAMIName }}" 
    } 
  }], 
  "provisioners": [{ 
    "type": "shell", 
    "inline": [ 
      "sudo yum -y update" 
    ] 
   } 
 ] 
} 
次に変数用のファイルを作成します。

variable.json
{ 
  "ssh_username": "ec2-user", 
  "region": "ap-northeast-1", 
  "instance_type": "t3.micro", 
} 


Packerを実行

Packerを実行します。

$ packer build -var-file=variable.json build.json 
amazon-ebs output will be in this color. 
 
==> amazon-ebs: Prevalidating AMI Name: amazon-linux-2-1547348873 
    amazon-ebs: Found Image ID: ami-0bab560bf1ee352f5 
==> amazon-ebs: Creating temporary keypair: packer_5c3aab89-2cad-f38c-0897-5c584e3becc3 
==> amazon-ebs: Creating temporary security group for this instance: packer_5c3aab8a-5624-8b3d-e0d5-fff48d8f95d7 
==> amazon-ebs: VPCIdNotSpecified: No default VPC for this user 
==> amazon-ebs:     status code: 400, request id: 1ca719b6-0dac-46ea-87e6-9e820aa8c9e8 
==> amazon-ebs: Deleting temporary keypair... 
Build 'amazon-ebs' errored: VPCIdNotSpecified: No default VPC for this user 
    status code: 400, request id: 1ca719b6-0dac-46ea-87e6-9e820aa8c9e8 
 
==> Some builds didn't complete successfully and had errors: 
--> amazon-ebs: VPCIdNotSpecified: No default VPC for this user 
    status code: 400, request id: 1ca719b6-0dac-46ea-87e6-9e820aa8c9e8 
 
==> Builds finished but no artifacts were created. 
デフォルトVPCがないよ!って怒られます。

そこで気付きました。

僕が構築しようとしているAWS環境にはデフォルトVPCがないことに。。Orz


デフォルトVPCを作成

てことで、デフォルトVPCを作ります!

まずはAWS CLIでデフォルトVPCがないかを念のため確認します。

デフォルトVPCは、"IsDefault": trueとなっています。
"IsDefault": falseのVPCしかない場合は、デフォルトVPCがない環境です。

$ aws ec2 --region ap-northeast-1 describe-vpcs 
デフォルトVPCを作成します。

$ aws ec2 --region ap-northeast-1 create-default-vpc 
{ 
    "Vpc": { 
        "VpcId": "vpc-0b114178f9b840174", 
        "InstanceTenancy": "default", 
        "Tags": [], 
        "CidrBlockAssociationSet": [ 
            { 
                "AssociationId": "vpc-cidr-assoc-094b6605782c9f792", 
                "CidrBlock": "172.31.0.0/16", 
                "CidrBlockState": { 
                    "State": "associated" 
                } 
            } 
        ], 
        "Ipv6CidrBlockAssociationSet": [], 
        "State": "pending", 
        "DhcpOptionsId": "dopt-4ab7cf2d", 
        "CidrBlock": "172.31.0.0/16", 
        "IsDefault": true 
    } 
} 
これでデフォルトVPCが作成できました。


仕切り直してPackerを実行

先ほどと同様にPackerを実行します。

$ packer build -var-file=variable.json build.json 
amazon-ebs output will be in this color. 
 
==> amazon-ebs: Prevalidating AMI Name: packer-base-1547352953 
    amazon-ebs: Found Image ID: ami-0bab560bf1ee352f5 
==> amazon-ebs: Creating temporary keypair: packer_5c3abb79-df65-ec32-be99-a6e76d702c18 
==> amazon-ebs: Creating temporary security group for this instance: packer_5c3abb7a-d5fa-19d3-f909-c4900131028a 
==> amazon-ebs: Authorizing access to port 22 from 0.0.0.0/0 in the temporary security group... 
==> amazon-ebs: Launching a source AWS instance... 
==> amazon-ebs: Adding tags to source instance 
    amazon-ebs: Adding tag: "Name": "Packer Builder" 
    amazon-ebs: Instance ID: i-01ecec9982f2afc55 
==> amazon-ebs: Waiting for instance (i-01ecec9982f2afc55) to become ready... 
==> amazon-ebs: Using ssh communicator to connect: 3.112.38.162 
==> amazon-ebs: Waiting for SSH to become available... 
==> amazon-ebs: Connected to SSH! 
==> amazon-ebs: Provisioning with shell script: /tmp/packer-shell353154586 
    amazon-ebs: Loaded plugins: extras_suggestions, langpacks, priorities, update-motd 
    amazon-ebs: Resolving Dependencies 
    amazon-ebs: --> Running transaction check 
    amazon-ebs: ---> Package amazon-ssm-agent.x86_64 0:2.3.274.0-1.amzn2 will be updated 
    amazon-ebs: ---> Package amazon-ssm-agent.x86_64 0:2.3.372.0-1.amzn2 will be an update 
    amazon-ebs: --> Finished Dependency Resolution 
    amazon-ebs: 
    amazon-ebs: Dependencies Resolved 
    amazon-ebs: 
    amazon-ebs: ================================================================================ 
    amazon-ebs:  Package               Arch        Version                Repository       Size 
    amazon-ebs: ================================================================================ 
    amazon-ebs: Updating: 
    amazon-ebs:  amazon-ssm-agent      x86_64      2.3.372.0-1.amzn2      amzn2-core       15 M 
    amazon-ebs: 
    amazon-ebs: Transaction Summary 
    amazon-ebs: ================================================================================ 
    amazon-ebs: Upgrade  1 Package 
    amazon-ebs: 
    amazon-ebs: Total download size: 15 M 
    amazon-ebs: Downloading packages: 
    amazon-ebs: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. 
    amazon-ebs: Running transaction check 
    amazon-ebs: Running transaction test 
    amazon-ebs: Transaction test succeeded 
    amazon-ebs: Running transaction 
    amazon-ebs:   Updating   : amazon-ssm-agent-2.3.372.0-1.amzn2.x86_64                    1/2 
    amazon-ebs:   Cleanup    : amazon-ssm-agent-2.3.274.0-1.amzn2.x86_64                    2/2 
    amazon-ebs:   Verifying  : amazon-ssm-agent-2.3.372.0-1.amzn2.x86_64                    1/2 
    amazon-ebs:   Verifying  : amazon-ssm-agent-2.3.274.0-1.amzn2.x86_64                    2/2 
    amazon-ebs: 
    amazon-ebs: Updated: 
    amazon-ebs:   amazon-ssm-agent.x86_64 0:2.3.372.0-1.amzn2 
    amazon-ebs: 
    amazon-ebs: Complete! 
==> amazon-ebs: Stopping the source instance... 
    amazon-ebs: Stopping instance, attempt 1 
==> amazon-ebs: Waiting for the instance to stop... 
==> amazon-ebs: Creating unencrypted AMI packer-base-1547352953 from instance i-01ecec9982f2afc55 
    amazon-ebs: AMI: ami-067336a1eb42391d0 
==> amazon-ebs: Waiting for AMI to become ready... 
==> amazon-ebs: Adding tags to AMI (ami-067336a1eb42391d0)... 
==> amazon-ebs: Tagging snapshot: snap-0789dacf1298d6a75 
==> amazon-ebs: Creating AMI tags 
    amazon-ebs: Adding tag: "Base_AMI_NAME": "amzn2-ami-hvm-2.0.20190110-x86_64-gp2" 
    amazon-ebs: Adding tag: "Base_AMI_ID": "ami-0bab560bf1ee352f5" 
==> amazon-ebs: Creating snapshot tags 
==> amazon-ebs: Terminating the source AWS instance... 
==> amazon-ebs: Cleaning up any extra volumes... 
==> amazon-ebs: No volumes to clean up, skipping 
==> amazon-ebs: Deleting temporary security group... 
==> amazon-ebs: Deleting temporary keypair... 
Build 'amazon-ebs' finished. 
 
==> Builds finished. The artifacts of successful builds are: 
--> amazon-ebs: AMIs were created: 
ap-northeast-1: ami-067336a1eb42391d0 
無事にPackerを実行できましたね!

これでゴールデンAMIが作れますねヽ(*゚д゚)ノ


まとめ

デフォルトVPCが必要であることを再認識しました。


参考サイト

https://stackoverflow.com/questions/47702265/eb-custom-platform-without-default-vpc-fails
https://dev.classmethod.jp/cloud/aws/packer-build-using-latest-ami/

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)