ファイルの置き場に S3 が使えないので Nginx などの設定ファイルをヒアドキュメントで配置してゴールデンイメージを作ることになったんだけど色々なファイルを配置していたらエラーになった。コンポーネントのコンテンツは 16,000 文字の制限があるらしい。てっきり無限に書けるのかと思ってた。
さてさて困ったのでどうしようかと思ったけど gzip で圧縮して base64 にしたらいけるのでは?と思ってやってみたらできた。
元の nginx.conf はこんな感じ。
/etc/nginx/nginx.conf
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; worker_rlimit_nofile 4096; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; multi_accept on; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format ltsv "time:$time_local" "\thost:$remote_addr" "\tforwardedfor:$http_x_forwarded_for" "\treq:$request" "\tstatus:$status" "\tsize:$body_bytes_sent" "\treferer:$http_referer" "\tua:$http_user_agent" "\treqtime:$request_time" "\tcache:$upstream_http_x_cache" "\truntime:$upstream_http_x_runtime" "\tvhost:$host"; access_log /var/log/nginx/access.log ltsv; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server_tokens off; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN always; add_header X-XSS-Protection "1; mode=block"; server { listen 80; listen [::]:80; server_name _; root /Laravel/public; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; } }
不要なところを適当に削って圧縮、Base64 化。
cat nginx.conf | grep -E -v -e '^#' -e '^( +)?$' -e '^ +#' | gzip | openssl enc -base64
2,266 文字が 987 文字になった。
H4sIANXlpGEAA31VW2vbMBR+z68QJhAYOE7XC5tNH8ZuFLZ1LH0odEUo8kktakua Lmmz0f++I1u5NBfrobX0net3pC/egiHyQcjnYvCkzCMYqo3iYC1YwrxT62NTi0Y4 KtVc1EDOJu8vigEYowyt1QPJFsxk+JG1sbIWGOO+GGhRksx42SFj3BYDIXntSyCZ tyazFTMQ/RpV+hps9mbMlZxjggVIZ8m/AcEVC0FEAndCSUtOJm/PihZsfO0EZZyD dkTJYvAyqJzT0RUroXNlGubQkglJyGhooFEOKCtLQ1Ky2vpAyN3QiQawMc7qe5Ig 9seDdQkZtdH212hoHXPekuFMlUs6Wzqw1GLt6BzKoAbmYMD0RIiGIT9lD+iarHyf Q+lPzJRQhq9kVOz1VDu7ICQJVedbtSdHkiW/XaWsy7c56LFdp8eP/HBNx52Ru3xN 4HGzjr888thnKP5ijzs09+Zvmc9fz+G4vWf53iR6u+tIjx3SsOux54xXaO21RVfW 0Ehme9yXxssuza5jBHpcF92kw9+kuzjhkVjbPtvdd9tB4xYKd6pzQIbL9tVvrfDE wn/HNWqC9rY6hpVQs+Ue9gigWS0W0DKmPF5icnEe/ZYa51oxW9GGPdMw8Sg4AV2J x/bKwPGVhGC4cRuhMy9hzlAbaDhamTOta8FZ0JBMcQcu7Vh9nWAraFCjcbmWpY4U s8AL4tQjoBCpeTzGp0QrYCWqyNQZwV16Y5i0WhmXToF7I9ySJNhWilfr8vTk/PRi MpkUq6RTP/ukgkLZgmgDtWJlQlj9xJZ2L/5t+lFJh/czvcHe0mvdaaJUVooD5dym XwxrNnbTD98/X/+6+nr143iC2+k0/WlQIlq9JclJQVCi4XKG8vKYbBMRhTasWlis Km7eTYrDwF2e3+fbaCRUYo2E0M25UcptBv2NGbaAOtN+hiPcWB0YWpz8ztxe8Jfh P1merV/2BgAA
展開するときは openssl enc -d -base64
で gzip 形式に戻して gzip -d
に渡す。
/etc/php-fpm.d/www.conf
とかそのままコピペすると結構な文字数になるのでコメントアウト外したり空行削除して圧縮、base64 化すればそこそこ小さくなる。
複数行書式で Base64 にエンコードした文字列を貼り付ける。あとはコードパイプラインがよしなにやってくれる。
phases: - name: build steps: - name: InstallConfig action: ExecuteBash inputs: commands: - | set -- /etc/nginx/nginx.conf openssl enc -d -base64 <<'EOT' | gzip -d >${1} H4sIANXlpGEAA31VW2vbMBR+z68QJhAYOE7XC5tNH8ZuFLZ1LH0odEUo8kktakua Lmmz0f++I1u5NBfrobX0net3pC/egiHyQcjnYvCkzCMYqo3iYC1YwrxT62NTi0Y4 KtVc1EDOJu8vigEYowyt1QPJFsxk+JG1sbIWGOO+GGhRksx42SFj3BYDIXntSyCZ tyazFTMQ/RpV+hps9mbMlZxjggVIZ8m/AcEVC0FEAndCSUtOJm/PihZsfO0EZZyD dkTJYvAyqJzT0RUroXNlGubQkglJyGhooFEOKCtLQ1Ky2vpAyN3QiQawMc7qe5Ig 9seDdQkZtdH212hoHXPekuFMlUs6Wzqw1GLt6BzKoAbmYMD0RIiGIT9lD+iarHyf Q+lPzJRQhq9kVOz1VDu7ICQJVedbtSdHkiW/XaWsy7c56LFdp8eP/HBNx52Ru3xN 4HGzjr888thnKP5ijzs09+Zvmc9fz+G4vWf53iR6u+tIjx3SsOux54xXaO21RVfW 0Ehme9yXxssuza5jBHpcF92kw9+kuzjhkVjbPtvdd9tB4xYKd6pzQIbL9tVvrfDE wn/HNWqC9rY6hpVQs+Ue9gigWS0W0DKmPF5icnEe/ZYa51oxW9GGPdMw8Sg4AV2J x/bKwPGVhGC4cRuhMy9hzlAbaDhamTOta8FZ0JBMcQcu7Vh9nWAraFCjcbmWpY4U s8AL4tQjoBCpeTzGp0QrYCWqyNQZwV16Y5i0WhmXToF7I9ySJNhWilfr8vTk/PRi MpkUq6RTP/ukgkLZgmgDtWJlQlj9xJZ2L/5t+lFJh/czvcHe0mvdaaJUVooD5dym XwxrNnbTD98/X/+6+nr143iC2+k0/WlQIlq9JclJQVCi4XKG8vKYbBMRhTasWlis Km7eTYrDwF2e3+fbaCRUYo2E0M25UcptBv2NGbaAOtN+hiPcWB0YWpz8ztxe8Jfh P1merV/2BgAA EOT - | set -- /etc/nginx/default.d/php.conf openssl enc -d -base64 <<'EOT' | gzip -d >${1} H4sIALPlpGEAA52RX2vDIBTF3/Mp7oPQdKPp+8IY3WhpYevCmoc9jIlE0wiJytXQ lv357DNtmiyjT/NBvF5/R89RKi72IJs5MoVpV4Wryn4ZB6XOmJNawRQ+AvDD4YHm shQWSI0Spp0AkZYy3FrSTHHwFVjhoNksnDMWRqM4kDmEpClpVuqa56iVo7nGHUMu ODWonYZbOALj9r6hilaNcq+z/w/eefqGtyj0T/80BcNxOI2uxnekBXNmXbaV1JpS OmqYK6hUuYb3MLr21N1Nx51AEg8wqZzATBhHBaLG09XDA038ff6nrlRZWXMB7Tgf NgxZZYcCxz2AzcPLKknpYvU4X8+e5gCE66yuhE8WtXak85Gh9K9RrBIXdZJZuqSr 9eIZSN9pTV8ElmmabH5lK3OqtLdbGXf4C1jrS29ykptq2CskF7QQjAuE10midwIF n9wfznH4FBUrm1/7AWUI0VuwAgAA EOT
何書いてあるかわからなくてもデコードすれば見れるし、EC2 インスタンスの中ではデコードされてるので AMI からインスタンス作って中入って確認すればいいんじゃないかな。