{"id":22603,"date":"2025-11-07T00:56:18","date_gmt":"2025-11-07T00:56:18","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=22603"},"modified":"2025-11-07T00:56:18","modified_gmt":"2025-11-07T00:56:18","slug":"aws-provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abterraform-custom-provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f-%e9%9b%bb","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/22603\/","title":{"rendered":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0"},"content":{"rendered":"\n<\/p>\n<div>\n<h2 id=\"\u306f\u3058\u3081\u306b\">\u306f\u3058\u3081\u306b<\/h2>\n<p>\u3053\u3093\u306b\u3061\u306f\u3001\u30af\u30ed\u30b9<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A4%A5%CE%A5%D9%A1%BC%A5%B7%A5%E7%A5%F3\">\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3<\/a>\u672c\u90e8\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u30c6\u30af<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%CE%A5%ED\">\u30ce\u30ed<\/a><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B8%A1%BC\">\u30b8\u30fc<\/a>\u30bb\u30f3\u30bf\u30fc\u3001\u65b0\u53521\u5e74\u76ee\u306e\u5927\u5ca1\u53e1\u3067\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f\u3001Terraform\u3067Auto Scaling Group\u306e\u6319\u52d5\u306b\u60a9\u3093\u3060\u7d4c\u9a13\u3092\u304d\u3063\u304b\u3051\u306b\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider\u3092\u53c2\u8003\u306b\u3057\u306a\u304c\u3089Custom Provider\u3092\u5b9f\u88c5\u3057\u3066\u307f\u305f\u8a71\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002\u5b9f\u88c5\u3092\u901a\u3058\u3066\u3001Terraform Provider\u306e\u69cb\u9020\u3084\u62e1\u5f35\u306e\u4ed5\u7d44\u307f\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2 id=\"Terraform\u3068\u306f\">Terraform\u3068\u306f<\/h2>\n<p>\u79c1\u306fTerraform\u309210\u6708\u306b\u90e8\u7f72\u914d\u5c5e\u3055\u308c\u3066\u521d\u3081\u3066\u77e5\u3063\u305f\u306e\u3067\u3001\u77e5\u3089\u306a\u3044\u65b9\u306e\u305f\u3081\u306b\u307e\u305a\u306f\u7c21\u5358\u306bTerraform\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<br \/>Terraform\u3068\u306f\u3001HashiCorp\u793e\u304c\u63d0\u4f9b\u3059\u308b<strong>\u30de\u30eb\u30c1<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AF%A5%E9%A5%A6%A5%C9\">\u30af\u30e9\u30a6\u30c9<\/a>\u5bfe\u5fdc\u306eIaC\uff08Infrastructure as Code\uff09\u30c4\u30fc\u30eb<\/strong>\u3067\u3059\u3002<br \/><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a>\u3001Azure\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Google\">Google<\/a> Cloud\u306a\u3069\u69d8\u3005\u306a<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AF%A5%E9%A5%A6%A5%C9\">\u30af\u30e9\u30a6\u30c9<\/a>\u30ea\u30bd\u30fc\u30b9\u3092\u30b3\u30fc\u30c9\u3067\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<br \/>\u4f8b\u3048\u3070\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a>\u3067\u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\u306b<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/VPC\">VPC<\/a>\u3092\u4f5c\u308b\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\u3002<br \/><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/d\/dentsusoken\/20251103\/20251103213108.png\" alt=\"\"\/><\/p>\n<h2 id=\"Terraform-Provider\u3068\u306f\">Terraform Provider\u3068\u306f<\/h2>\n<p><a target=\"_blank\" href=\"https:\/\/developer.hashicorp.com\/terraform\/language\/providers\">Terraform\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u3067\u306f\u3001Provider\u306b\u3064\u3044\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8aac\u660e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"code\" data-lang=\"\" data-unlink=\"\">Terraform relies on plugins called providers to interact with cloud providers, SaaS providers, and other APIs.\n\nTerraform configurations must declare which providers they require so that Terraform can install and use them. Additionally, some providers require configuration (like endpoint URLs or cloud regions) before they can be used.\n\uff08Terraform\u516c\u5f0f\u30b5\u30a4\u30c8\u3088\u308a\u5f15\u7528\uff09<\/pre>\n<p>\u8981\u3059\u308b\u306b\u3001Terraform Provider\u3068\u306fTerraform\u3068\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3092\u3064\u306a\u3050\u305f\u3081\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3\">\u30d7\u30e9\u30b0\u30a4\u30f3<\/a>\u3067\u3059\u3002Terraform\u305d\u306e\u3082\u306e\u306f\u30ea\u30bd\u30fc\u30b9\u5b9a\u7fa9\u3084\u72b6\u614b\u7ba1\u7406\u3092\u884c\u3044\u3001\u5b9f\u969b\u306b<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AF%A5%E9%A5%A6%A5%C9\">\u30af\u30e9\u30a6\u30c9<\/a>\u3068\u901a\u4fe1\u3057\u3066\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u30fb\u5909\u66f4\u3059\u308b\u306e\u306fProvider\u306e\u5f79\u5272\u3067\u3059\u3002<br \/>\u4f8b\u3048\u3070\u3001Terraform\u304c<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a>\u4e0a\u306b\u30ea\u30bd\u30fc\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u5834\u5408\u306e\u5927\u307e\u304b\u306a\u6d41\u308c\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<ol>\n<li>\u30e6\u30fc\u30b6\u30fc\u304cTerraform\u30b3\u30fc\u30c9\uff08HCL\uff09\u3067\u30ea\u30bd\u30fc\u30b9\u3092\u5b9a\u7fa9<\/li>\n<li>Terraform\u304c\u5bfe\u5fdc\u3059\u308bProvider\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n<li>Provider\u304c<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/SDK\">SDK<\/a>\uff08Go\u8a00\u8a9e\u7528\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a>\u516c\u5f0f\u30e9\u30a4\u30d6\u30e9\u30ea\uff09\u3092\u4f7f\u3063\u3066\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u3092\u547c\u3073\u51fa\u3059<\/li>\n<li><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u52a0\u5de5\u3057\u3001Terraform\u306e\u30b9\u30c6\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\uff08<code>terraform.tfstate<\/code>\uff09\u306b\u53cd\u6620\u3059\u308b<\/li>\n<\/ol>\n<p>\u4e3b\u8981\u306a<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AF%A5%E9%A5%A6%A5%C9\">\u30af\u30e9\u30a6\u30c9<\/a>\u306eTerraform Provider\u306f\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/GitHub\">GitHub<\/a>\u3067<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9\">\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9<\/a>\u3068\u3057\u3066\u516c\u958b\u3055\u308c\u3066\u304a\u308a\u3001\u5b9f\u88c5\u306e\u8a73\u7d30\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001Provider\u306f\u81ea\u4f5c\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3042\u308a\u3001\u81ea\u4f5c\u3057\u305fProvider\u306e\u3053\u3068\u3092Custom Provider\u3068\u547c\u3073\u307e\u3059\u3002<\/p>\n<h2 id=\"Custom-Provider\u3092\u5b9f\u88c5\u3057\u305f\u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3\">Custom Provider\u3092\u5b9f\u88c5\u3057\u305f\u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3<\/h2>\n<p>Terraform\u3092\u4f7f\u3044\u59cb\u3081\u305f\u3070\u304b\u308a\u306e\u3042\u308b\u65e5\u3001Auto Scaling Group\uff08ASG\uff09\u306e\u69cb\u7bc9\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3057\u305f\u3002<br \/>\u307e\u305a\u306f\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067ASG\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"code lang-hcl\" data-lang=\"hcl\" data-unlink=\"\"><span class=\"synType\">resource<\/span> <span class=\"synConstant\">\"aws_launch_template\"<\/span> <span class=\"synConstant\">\"main\"<\/span> <span class=\"synSpecial\">{<\/span>\n\u00a0 <span class=\"synIdentifier\">name_prefix<\/span> = <span class=\"synConstant\">\"main\"<\/span>\n\u00a0 image_id \u00a0 \u00a0= <span class=\"synConstant\">\"ami-01205c30badb279ec\u201c<\/span>\n<span class=\"synConstant\">\u00a0 instance_type = \"<\/span>t2.micro<span class=\"synConstant\">\"<\/span>\n<span class=\"synConstant\">}<\/span>\n<span class=\"synConstant\">resource \"<\/span>aws_autoscaling_group<span class=\"synConstant\">\" \"<\/span>main<span class=\"synConstant\">\" {<\/span>\n<span class=\"synConstant\">\u00a0 name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0= \"<\/span>main<span class=\"synConstant\">\"<\/span>\n<span class=\"synConstant\">\u00a0 max_size \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0= 3<\/span>\n<span class=\"synConstant\">\u00a0 desired_capacity \u00a0 \u00a0= 2<\/span>\n<span class=\"synConstant\">\u00a0 min_size \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0= 1<\/span>\n<span class=\"synConstant\">\u00a0 health_check_type \u00a0 = \"<\/span>EC2<span class=\"synConstant\">\"<\/span>\n<span class=\"synConstant\">\u00a0 vpc_zone_identifier = [aws_subnet.main.id, aws_subnet.secondary.id]<\/span>\n<span class=\"synConstant\">\u00a0 launch_template {<\/span>\n<span class=\"synConstant\">\u00a0 \u00a0 id = aws_launch_template.main.id<\/span>\n<span class=\"synConstant\">\u00a0 }<\/span>\n<span class=\"synConstant\">}<\/span>\n<\/pre>\n<p>\u554f\u984c\u306f\u3053\u3053\u304b\u3089\u3067\u3059\u3002<br \/>\u8d77\u52d5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\uff08SG\uff09\u306e\u8a2d\u5b9a\u3092\u5165\u308c\u5fd8\u308c\u3066\u3044\u305f\u3053\u3068\u306b\u6c17\u3065\u304d\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"code lang-hcl\" data-lang=\"hcl\" data-unlink=\"\"><span class=\"synType\">resource<\/span> <span class=\"synConstant\">\"aws_launch_template\"<\/span> <span class=\"synConstant\">\"main\"<\/span> <span class=\"synSpecial\">{<\/span>\n\u00a0 name_prefix \u00a0 = <span class=\"synConstant\">\"main\"<\/span>\n\u00a0 image_id \u00a0 \u00a0 \u00a0= <span class=\"synConstant\">\"ami-01205c30badb279ec\"<\/span>\n\u00a0 <span class=\"synIdentifier\">instance_type<\/span> = <span class=\"synConstant\">\"t2.micro\"<\/span>\n\u00a0 <span class=\"synIdentifier\">vpc_security_group_ids<\/span> = <span class=\"synSpecial\">[<\/span>var.ec2_security_group_id<span class=\"synSpecial\">]<\/span> \n<span class=\"synSpecial\">}<\/span>\n<\/pre>\n<p>\u8d77\u52d5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a2d\u5b9a\u3092\u53cd\u6620\u3055\u305b\u308b\u305f\u3081\u306b\u518d\u5ea6<code>terraform apply<\/code>\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u3001\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067ASG\u7ba1\u7406\u4e0b\u306eEC2<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/a>\u3092\u3059\u3079\u3066\u524a\u9664\u3057\u3001ASG\u306b\u65b0\u3057\u3044<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/a>\u3092\u8d77\u52d5\u3055\u305b\u307e\u3057\u305f\u3002<br \/>\u3057\u304b\u3057\u3001\u8d77\u52d5\u3057\u305f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/a>\u3092\u78ba\u8a8d\u3059\u308b\u3068<strong><code>default<\/code>\u306eSG\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u304a\u308a\u3001\u8ffd\u52a0\u3057\u305fSG\u304c\u53cd\u6620\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/strong><\/p>\n<p>Terraform\u521d\u5fc3\u8005\u3060\u3063\u305f\u79c1\u306f\u3001\u5b66\u7fd2\u306e\u305f\u3081\u306b\u751f\u6210AI\u3092\u4f7f\u7528\u3057\u306a\u3044\u7e1b\u308a\u3092\u81ea\u5206\u306b\u8ab2\u3057\u3066\u3044\u305f\u3053\u3068\u3082\u3042\u308a\u3001\u539f\u56e0\u306e\u7279\u5b9a\u306b1\u6642\u9593\u307b\u3069\u304b\u304b\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\u6700\u7d42\u7684\u306b\u3001\u539f\u56e0\u306f\u4ee5\u4e0b\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider\u306e\u4ed5\u69d8\u3060\u3068\u3044\u3046\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3057\u305f\u3002<\/p>\n<ul>\n<li><code>aws_autoscaling_group<\/code>\u30ea\u30bd\u30fc\u30b9\u306e<code>launch_template<\/code> \u30d6\u30ed\u30c3\u30af\u3067<code>version<\/code> \u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u3001ASG\u306f\u5e38\u306b <code>Default<\/code>\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u53c2\u7167\u3059\u308b<\/li>\n<li><code>aws_launch_template<\/code>\u30ea\u30bd\u30fc\u30b9\u306b\u304a\u3044\u3066<code>default_version<\/code>\u3084<code>update_default_version<\/code>\u3068\u3044\u3063\u305f\u5f15\u6570\u3067<code>Default<\/code>\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8a2d\u5b9a\u3092\u3057\u306a\u3044\u9650\u308a\u3001\u6700\u521d\u306b\u4f5c\u6210\u3055\u308c\u305f\u30d0\u30fc\u30b8\u30e7\u30f31\u304c\u53c2\u7167\u3055\u308c\u7d9a\u3051\u308b<\/li>\n<\/ul>\n<p>\u3064\u307e\u308a\u3001ASG\u306b\u8d77\u52d5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u66f4\u65b0\u5185\u5bb9\u3092\u53cd\u6620\u3055\u305b\u308b\u306b\u306f\u3001<code>version = \"$Latest\"<\/code>\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f\u306e\u3067\u3059\u3002<\/p>\n<pre class=\"code lang-hcl\" data-lang=\"hcl\" data-unlink=\"\"><span class=\"synType\">resource<\/span> <span class=\"synConstant\">\"aws_autoscaling_group\"<\/span> <span class=\"synConstant\">\"main\"<\/span> <span class=\"synSpecial\">{<\/span>\n  <span class=\"synIdentifier\">name<\/span> = <span class=\"synConstant\">\"main\"<\/span>\n  ...\n  <span class=\"synType\">launch_template<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synIdentifier\">id<\/span>      = aws_launch_template.main.id\n    <span class=\"synIdentifier\">version<\/span> = <span class=\"synConstant\">\"$Latest\"<\/span> \n  <span class=\"synSpecial\">}<\/span>\n<span class=\"synSpecial\">}<\/span>\n<\/pre>\n<p>\u3053\u306e\u4ed5\u69d8\u3092\u7406\u89e3\u3057\u305f\u3068\u304d\u3001\u300c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067<code>Latest<\/code>\u3092\u4f7f\u3063\u3066\u304f\u308c\u305f\u3089\u3044\u3044\u306e\u306b\u2026\u2026\u300d\u3068\u76f4\u611f\u7684\u306b\u611f\u3058\u307e\u3057\u305f\u3002<br \/>\u4e00\u65b9\u3067\u3001Provider\u306e\u4ed5\u69d8\u3068\u3057\u3066\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7406\u7531\u304b\u3089\u59a5\u5f53\u3060\u3068\u3082\u601d\u3044\u307e\u3057\u305f\u3002<\/p>\n<ul>\n<li>\u904b\u7528\u4e0a\u3001\u610f\u56f3\u7684\u306b<code>Default<\/code>\u3067\u56fa\u5b9a\u3057\u305f\u3044\u30b1\u30fc\u30b9\u304c\u3042\u308b<\/li>\n<li><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a>\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u3082ASG\u4f5c\u6210\u6642\u306e\u521d\u671f\u5024\u306f<code>Default(1)<\/code>\u3068\u306a\u3063\u3066\u3044\u308b<\/li>\n<\/ul>\n<p>\u305d\u3057\u3066\u3001\u3061\u3087\u3046\u3069\u305d\u306e\u9803\u306bProvider\u3092\u81ea\u4f5c\u3067\u304d\u308b\u3053\u3068\u3092\u77e5\u3063\u305f\u3053\u3068\u3082\u3042\u308a\u3001\u300c<strong>version\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3067<code>$Latest<\/code>\u306b\u3057\u3066\u304f\u308c\u308bProvider\u3092\u81ea\u5206\u3067\u4f5c\u3063\u3066\u52c9\u5f37\u3057\u3066\u307f\u3088\u3046<\/strong>\u300d\u3068\u6c7a\u610f\u3057\u307e\u3057\u305f\u3002<br \/>\u3053\u308c\u304c\u3001\u4eca\u56de\u306eCustom Provider\u5b9f\u88c5\u306e\u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002<\/p>\n<h2 id=\"Custom-Provider\u306e\u5b9f\u88c5\">Custom Provider\u306e\u5b9f\u88c5<\/h2>\n<h3 id=\"\u76ee\u6a19\u3068\u65b9\u91dd\">\u76ee\u6a19\u3068\u65b9\u91dd<\/h3>\n<p>\u4eca\u56de\u4f5c\u3063\u305fCustom Provider\u306f\u300c<strong>awsmini<\/strong>\u300d\u3068\u3044\u3046\u540d\u524d\u3067\u3001\u6b21\u306e\u3088\u3046\u306a\u65b9\u91dd\u3067\u4f5c\u308a\u307e\u3057\u305f\u3002<\/p>\n<ul>\n<li><code>aws_autoscaling_group<\/code> \u3068 <code>aws_launch_template<\/code> \u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n<li><code>aws_autoscaling_group<\/code>\u306e<code>launch_template<\/code>\u30d6\u30ed\u30c3\u30af\u306e<code>version<\/code>\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092<code>$Latest<\/code>\u306b\u8a2d\u5b9a<\/li>\n<li>\u30ed\u30fc\u30ab\u30eb\u3067\u30d3\u30eb\u30c9\u3057\u3066\u3001Terraform\u306b\u76f4\u63a5\u8aad\u307f\u8fbc\u307e\u305b\u308b\u65b9\u5f0f\u3092\u63a1\u7528<\/li>\n<\/ul>\n<p>\u5b9f\u88c5\u306f<a target=\"_blank\" href=\"https:\/\/github.com\/hashicorp\/terraform-provider-aws\">\u516c\u5f0fAWS Provider\u306eGitHub\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u3092\u53c2\u8003\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d5\u30a1\u30a4\u30eb\u69cb\u6210\"><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\u30fb\u30d5\u30a1\u30a4\u30eb\u69cb\u6210<\/h3>\n<p><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\u30fb\u30d5\u30a1\u30a4\u30eb\u69cb\u6210\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\u3002<br \/>\u305d\u308c\u305e\u308c\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u88681\u306b\u793a\u3059\u3088\u3046\u306b\u516c\u5f0f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA\">\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u3092\u53c2\u8003\u306b\u3057\u3066\u5b9f\u88c5\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"code bash\" data-lang=\"bash\" data-unlink=\"\">awsmini\/\n\u251c\u2500\u2500 bin\/                        # \u30d3\u30eb\u30c9\u6210\u679c\u7269\n\u251c\u2500\u2500 internal\/\n\u2502   \u251c\u2500\u2500 provider\/provider.go    # Provider\u5b9a\u7fa9\n\u2502   \u251c\u2500\u2500 conns\/\n\u2502   \u2502   \u251c\u2500\u2500 awsclient.go        # AWS\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u751f\u6210\u30fb\u30ad\u30e3\u30c3\u30b7\u30e5\n\u2502   \u2502   \u2514\u2500\u2500 config.go           # AWS\u8a8d\u8a3c\u60c5\u5831\u8a2d\u5b9a\n\u2502   \u2514\u2500\u2500 service\/\n\u2502       \u251c\u2500\u2500 autoscaling\/group.go       # ASG\u30ea\u30bd\u30fc\u30b9\u5b9f\u88c5\n\u2502       \u2514\u2500\u2500 ec2\/launch_template.go     # Launch Template\u30ea\u30bd\u30fc\u30b9\u5b9f\u88c5\n\u2514\u2500\u2500 main.go                     # \u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8<\/pre>\n<p>\u88681. awsmini\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u516c\u5f0f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider\u306e\u5bfe\u5fdc\u95a2\u4fc2<\/p>\n<blockquote>\n<p>\u203b\u6ce8\u610f\uff1a\u4e0a\u8a18\u30ea\u30f3\u30af\u5148\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9\">\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/a>\u306f\u3001\u4eca\u5f8c\u306eProvider\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306b\u3088\u308a\u30b3\u30fc\u30c9\u69cb\u9020\u304c\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\u305d\u306e\u305f\u3081\u3001\u57f7\u7b46\u6642\u70b9\uff082025\u5e7411\u6708\uff09\u3067\u306e\u53c2\u8003\u60c5\u5831\u3068\u3057\u3066\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n<p>\u307e\u305f\u3001<code>group.go<\/code> \u5185\u3067<code>aws_autoscaling_group<\/code>\u306e<code>launch_template<\/code>\u30d6\u30ed\u30c3\u30af\u306e<code>version<\/code>\u5f15\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092<code>$Latest<\/code>\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"code lang-go\" data-lang=\"go\" data-unlink=\"\"><span class=\"synConstant\">\"launch_template\"<\/span>: {\n                Type:     schema.TypeList,\n                Optional: <span class=\"synStatement\">true<\/span>,\n                MaxItems: <span class=\"synConstant\">1<\/span>,\n                Elem: &amp;schema.Resource{\n                    Schema: <span class=\"synType\">map<\/span>[<span class=\"synType\">string<\/span>]*schema.Schema{\n                        <span class=\"synConstant\">\"id\"<\/span>: {\n                            Type:     schema.TypeString,\n                            Optional: <span class=\"synStatement\">true<\/span>,\n                            Computed: <span class=\"synStatement\">true<\/span>,\n                        },\n                        <span class=\"synConstant\">\"name\"<\/span>: {\n                            Type:     schema.TypeString,\n                            Optional: <span class=\"synStatement\">true<\/span>,\n                            Computed: <span class=\"synStatement\">true<\/span>,\n                        },\n                        <span class=\"synConstant\">\"version\"<\/span>: {\n                            Type:     schema.TypeString,\n                            Optional: <span class=\"synStatement\">true<\/span>,\n                            Default:  <span class=\"synConstant\">\"$Latest\"<\/span>,  \n                        },\n                    },\n                },\n            },\n<\/pre>\n<h3 id=\"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u5168\u4f53\"><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9\">\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/a>\u5168\u4f53<\/h3>\n<p><code>group.go<\/code>\u3068<code>launch_template.go<\/code>\u306e\u30b3\u30fc\u30c9\u306f\u5206\u91cf\u304c\u591a\u3044\u305f\u3081\u3001\u3053\u3053\u3067\u306f\u305d\u308c\u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u63b2\u8f09\u3057\u307e\u3059\u3002<br \/>\u524d\u63d0\u3068\u3057\u3066\u3001<code>awsmini<\/code><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3057\u305f\uff08\u30b3\u30de\u30f3\u30c9\u5185\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA\">\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u306f\u5b9f\u969b\u306b\u5b58\u5728\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff09\u3002<\/p>\n<pre class=\"code bash\" data-lang=\"bash\" data-unlink=\"\">go mod init github.com\/torut\/terraform-provider-awsmini<\/pre>\n<pre class=\"code lang-go\" data-lang=\"go\" data-unlink=\"\">\n\n\n<span class=\"synStatement\">package<\/span> main\n\n<span class=\"synStatement\">import<\/span> (\n    <span class=\"synConstant\">\"context\"<\/span>\n    <span class=\"synConstant\">\"flag\"<\/span>\n    <span class=\"synConstant\">\"log\"<\/span>\n\n    <span class=\"synConstant\">\"github.com\/hashicorp\/terraform-plugin-sdk\/v2\/helper\/schema\"<\/span>\n    <span class=\"synConstant\">\"github.com\/hashicorp\/terraform-plugin-sdk\/v2\/plugin\"<\/span>\n    <span class=\"synConstant\">\"github.com\/torut\/terraform-provider-awsmini\/internal\/provider\"<\/span>\n)\n\n<span class=\"synStatement\">func<\/span> main() {\n    <span class=\"synStatement\">var<\/span> debugMode <span class=\"synType\">bool<\/span>\n\n    flag.BoolVar(&amp;debugMode, <span class=\"synConstant\">\"debug\"<\/span>, <span class=\"synStatement\">false<\/span>, <span class=\"synConstant\">\"set to true to run the provider with support for debuggers like delve\"<\/span>)\n    flag.Parse()\n\n    opts := &amp;plugin.ServeOpts{\n        ProviderFunc: <span class=\"synType\">func<\/span>() *schema.Provider {\n            ctx := context.Background()\n            p, err := provider.New(ctx)\n            <span class=\"synStatement\">if<\/span> err != <span class=\"synStatement\">nil<\/span> {\n                log.Fatalf(<span class=\"synConstant\">\"failed to create provider: %v\"<\/span>, err)\n            }\n            <span class=\"synStatement\">return<\/span> p\n        },\n    }\n\n    <span class=\"synStatement\">if<\/span> debugMode {\n        ctx := context.Background()\n        err := plugin.Debug(ctx, <span class=\"synConstant\">\"local\/awsmini\"<\/span>, opts)\n        <span class=\"synStatement\">if<\/span> err != <span class=\"synStatement\">nil<\/span> {\n            log.Fatalf(<span class=\"synConstant\">\"failed to serve provider in debug mode: %v\"<\/span>, err)\n        }\n        <span class=\"synStatement\">return<\/span>\n    }\n\n    plugin.Serve(opts)\n}\n<\/pre>\n<ul>\n<li><code>awsmini\/internal\/provider\/provider.go<\/code><\/li>\n<\/ul>\n<pre class=\"code lang-go\" data-lang=\"go\" data-unlink=\"\">\n\n\n<span class=\"synStatement\">package<\/span> provider\n\n<span class=\"synStatement\">import<\/span> (\n    <span class=\"synConstant\">\"context\"<\/span>\n    <span class=\"synConstant\">\"fmt\"<\/span>\n\n    <span class=\"synConstant\">\"github.com\/hashicorp\/terraform-plugin-sdk\/v2\/diag\"<\/span>\n    <span class=\"synConstant\">\"github.com\/hashicorp\/terraform-plugin-sdk\/v2\/helper\/schema\"<\/span>\n    <span class=\"synConstant\">\"github.com\/torut\/terraform-provider-awsmini\/internal\/conns\"<\/span>\n    <span class=\"synConstant\">\"github.com\/torut\/terraform-provider-awsmini\/internal\/service\/autoscaling\"<\/span>\n    <span class=\"synConstant\">\"github.com\/torut\/terraform-provider-awsmini\/internal\/service\/ec2\"<\/span>\n)\n\n\n\n<span class=\"synStatement\">func<\/span> New(ctx context.Context) (*schema.Provider, <span class=\"synType\">error<\/span>) {\n    provider := &amp;schema.Provider{\n        Schema: <span class=\"synType\">map<\/span>[<span class=\"synType\">string<\/span>]*schema.Schema{\n            <span class=\"synConstant\">\"access_key\"<\/span>: {\n                Type:        schema.TypeString,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"The access key for API operations. You can retrieve this from the 'Security &amp; Credentials' section of the AWS console.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"profile\"<\/span>: {\n                Type:        schema.TypeString,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"The profile for API operations. If not set, the default profile created with `aws configure` will be used.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"region\"<\/span>: {\n                Type:        schema.TypeString,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"The region where AWS operations will take place. Examples are us-east-1, us-west-2, etc.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"secret_key\"<\/span>: {\n                Type:        schema.TypeString,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"The secret key for API operations. You can retrieve this from the 'Security &amp; Credentials' section of the AWS console.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"shared_config_files\"<\/span>: {\n                Type:        schema.TypeList,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"List of paths to shared config files. If not set, defaults to [~\/.aws\/config].\"<\/span>,\n                Elem:        &amp;schema.Schema{Type: schema.TypeString},\n            },\n            <span class=\"synConstant\">\"shared_credentials_files\"<\/span>: {\n                Type:        schema.TypeList,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"List of paths to shared credentials files. If not set, defaults to [~\/.aws\/credentials].\"<\/span>,\n                Elem:        &amp;schema.Schema{Type: schema.TypeString},\n            },\n            <span class=\"synConstant\">\"skip_credentials_validation\"<\/span>: {\n                Type:        schema.TypeBool,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available\/implemented.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"skip_region_validation\"<\/span>: {\n                Type:        schema.TypeBool,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"Skip static validation of region name. Used by users of alternative AWS-like APIs or users w\/ access to regions that are not public (yet).\"<\/span>,\n            },\n            <span class=\"synConstant\">\"skip_requesting_account_id\"<\/span>: {\n                Type:        schema.TypeBool,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"Skip requesting the account ID. Used for AWS API implementations that do not have IAM\/STS API and\/or metadata API.\"<\/span>,\n            },\n            <span class=\"synConstant\">\"token\"<\/span>: {\n                Type:        schema.TypeString,\n                Optional:    <span class=\"synStatement\">true<\/span>,\n                Description: <span class=\"synConstant\">\"Session token for temporary credentials.\"<\/span>,\n            },\n        },\n\n        \n        ResourcesMap: <span class=\"synType\">map<\/span>[<span class=\"synType\">string<\/span>]*schema.Resource{\n            <span class=\"synConstant\">\"awsmini_autoscaling_group\"<\/span>: autoscaling.ResourceGroup(),\n            <span class=\"synConstant\">\"awsmini_launch_template\"<\/span>:   ec2.ResourceLaunchTemplate(),\n        },\n\n        DataSourcesMap: <span class=\"synType\">map<\/span>[<span class=\"synType\">string<\/span>]*schema.Resource{},\n    }\n\n    provider.ConfigureContextFunc = <span class=\"synType\">func<\/span>(ctx context.Context, d *schema.ResourceData) (<span class=\"synStatement\">interface<\/span>{}, diag.Diagnostics) {\n        <span class=\"synStatement\">return<\/span> configure(ctx, d, provider.TerraformVersion)\n    }\n\n    <span class=\"synStatement\">return<\/span> provider, <span class=\"synStatement\">nil<\/span>\n}\n\n\n<span class=\"synStatement\">func<\/span> configure(ctx context.Context, d *schema.ResourceData, terraformVersion <span class=\"synType\">string<\/span>) (<span class=\"synStatement\">interface<\/span>{}, diag.Diagnostics) {\n    <span class=\"synStatement\">var<\/span> diags diag.Diagnostics\n\n    <span class=\"synStatement\">if<\/span> terraformVersion == <span class=\"synConstant\">\"\"<\/span> {\n        terraformVersion = <span class=\"synConstant\">\"0.11+compatible\"<\/span>\n    }\n\n    config := conns.Config{\n        AccessKey:               d.Get(<span class=\"synConstant\">\"access_key\"<\/span>).(<span class=\"synType\">string<\/span>),\n        Profile:                 d.Get(<span class=\"synConstant\">\"profile\"<\/span>).(<span class=\"synType\">string<\/span>),\n        Region:                  d.Get(<span class=\"synConstant\">\"region\"<\/span>).(<span class=\"synType\">string<\/span>),\n        SecretKey:               d.Get(<span class=\"synConstant\">\"secret_key\"<\/span>).(<span class=\"synType\">string<\/span>),\n        SkipCredsValidation:     d.Get(<span class=\"synConstant\">\"skip_credentials_validation\"<\/span>).(<span class=\"synType\">bool<\/span>),\n        SkipRegionValidation:    d.Get(<span class=\"synConstant\">\"skip_region_validation\"<\/span>).(<span class=\"synType\">bool<\/span>),\n        SkipRequestingAccountId: d.Get(<span class=\"synConstant\">\"skip_requesting_account_id\"<\/span>).(<span class=\"synType\">bool<\/span>),\n        TerraformVersion:        terraformVersion,\n        Token:                   d.Get(<span class=\"synConstant\">\"token\"<\/span>).(<span class=\"synType\">string<\/span>),\n    }\n\n    \n    <span class=\"synStatement\">if<\/span> v, ok := d.GetOk(<span class=\"synConstant\">\"shared_config_files\"<\/span>); ok &amp;&amp; <span class=\"synStatement\">len<\/span>(v.([]<span class=\"synStatement\">interface<\/span>{})) &gt; <span class=\"synConstant\">0<\/span> {\n        config.SharedConfigFiles = expandStringList(v.([]<span class=\"synStatement\">interface<\/span>{}))\n    }\n\n    \n    <span class=\"synStatement\">if<\/span> v, ok := d.GetOk(<span class=\"synConstant\">\"shared_credentials_files\"<\/span>); ok &amp;&amp; <span class=\"synStatement\">len<\/span>(v.([]<span class=\"synStatement\">interface<\/span>{})) &gt; <span class=\"synConstant\">0<\/span> {\n        config.SharedCredentialsFiles = expandStringList(v.([]<span class=\"synStatement\">interface<\/span>{}))\n    }\n\n    \n    client, err := config.ConfigureProvider(ctx)\n    <span class=\"synStatement\">if<\/span> err != <span class=\"synStatement\">nil<\/span> {\n        <span class=\"synStatement\">return<\/span> <span class=\"synStatement\">nil<\/span>, diag.FromErr(fmt.Errorf(<span class=\"synConstant\">\"error configuring AWS provider: %w\"<\/span>, err))\n    }\n\n    <span class=\"synStatement\">return<\/span> client, diags\n}\n\n\n<span class=\"synStatement\">func<\/span> expandStringList(configured []<span class=\"synStatement\">interface<\/span>{}) []<span class=\"synType\">string<\/span> {\n    vs := <span class=\"synStatement\">make<\/span>([]<span class=\"synType\">string<\/span>, <span class=\"synConstant\">0<\/span>, <span class=\"synStatement\">len<\/span>(configured))\n    <span class=\"synStatement\">for<\/span> _, v := <span class=\"synStatement\">range<\/span> configured {\n        val, ok := v.(<span class=\"synType\">string<\/span>)\n        <span class=\"synStatement\">if<\/span> ok &amp;&amp; val != <span class=\"synConstant\">\"\"<\/span> {\n            vs = <span class=\"synStatement\">append<\/span>(vs, val)\n        }\n    }\n    <span class=\"synStatement\">return<\/span> vs\n}\n<\/pre>\n<ul>\n<li><code>awsmini\/internal\/conns\/awsclient.go<\/code><\/li>\n<\/ul>\n<pre class=\"code lang-go\" data-lang=\"go\" data-unlink=\"\">\n\n\n<span class=\"synStatement\">package<\/span> conns\n\n<span class=\"synStatement\">import<\/span> (\n    <span class=\"synConstant\">\"context\"<\/span>\n    <span class=\"synConstant\">\"sync\"<\/span>\n\n    <span class=\"synConstant\">\"github.com\/aws\/aws-sdk-go-v2\/aws\"<\/span>\n    <span class=\"synConstant\">\"github.com\/aws\/aws-sdk-go-v2\/service\/autoscaling\"<\/span>\n    <span class=\"synConstant\">\"github.com\/aws\/aws-sdk-go-v2\/service\/ec2\"<\/span>\n)\n\n\n<span class=\"synStatement\">type<\/span> AWSClient <span class=\"synStatement\">struct<\/span> {\n    awsConfig *aws.Config\n    region    <span class=\"synType\">string<\/span>\n    lock      sync.Mutex\n\n    \n    autoscalingClient *autoscaling.Client\n    ec2Client         *ec2.Client\n}\n\n\n<span class=\"synStatement\">func<\/span> (c *AWSClient) AwsConfig(context.Context) aws.Config {\n    <span class=\"synStatement\">return<\/span> c.awsConfig.Copy()\n}\n\n\n<span class=\"synStatement\">func<\/span> (c *AWSClient) Region(context.Context) <span class=\"synType\">string<\/span> {\n    <span class=\"synStatement\">return<\/span> c.region\n}\n\n\n<span class=\"synStatement\">func<\/span> (c *AWSClient) AutoScalingClient(ctx context.Context) *autoscaling.Client {\n    c.lock.Lock()\n    <span class=\"synStatement\">defer<\/span> c.lock.Unlock()\n\n    <span class=\"synStatement\">if<\/span> c.autoscalingClient == <span class=\"synStatement\">nil<\/span> {\n        c.autoscalingClient = autoscaling.NewFromConfig(*c.awsConfig)\n    }\n\n    <span class=\"synStatement\">return<\/span> c.autoscalingClient\n}\n\n\n<span class=\"synStatement\">func<\/span> (c *AWSClient) EC2Client(ctx context.Context) *ec2.Client {\n    c.lock.Lock()\n    <span class=\"synStatement\">defer<\/span> c.lock.Unlock()\n\n    <span class=\"synStatement\">if<\/span> c.ec2Client == <span class=\"synStatement\">nil<\/span> {\n        c.ec2Client = ec2.NewFromConfig(*c.awsConfig)\n    }\n\n    <span class=\"synStatement\">return<\/span> c.ec2Client\n}\n<\/pre>\n<ul>\n<li><code>awsmini\/internal\/conns\/config.go<\/code><\/li>\n<\/ul>\n<pre class=\"code lang-go\" data-lang=\"go\" data-unlink=\"\">\n\n\n<span class=\"synStatement\">package<\/span> conns\n\n<span class=\"synStatement\">import<\/span> (\n    <span class=\"synConstant\">\"context\"<\/span>\n    <span class=\"synConstant\">\"fmt\"<\/span>\n    <span class=\"synConstant\">\"time\"<\/span>\n\n    awsbase <span class=\"synConstant\">\"github.com\/hashicorp\/aws-sdk-go-base\/v2\"<\/span>\n    basediag <span class=\"synConstant\">\"github.com\/hashicorp\/aws-sdk-go-base\/v2\/diag\"<\/span>\n    <span class=\"synConstant\">\"github.com\/hashicorp\/aws-sdk-go-base\/v2\/logging\"<\/span>\n)\n\n\n<span class=\"synStatement\">type<\/span> Config <span class=\"synStatement\">struct<\/span> {\n    AccessKey               <span class=\"synType\">string<\/span>\n    Profile                 <span class=\"synType\">string<\/span>\n    Region                  <span class=\"synType\">string<\/span>\n    SecretKey               <span class=\"synType\">string<\/span>\n    SharedConfigFiles       []<span class=\"synType\">string<\/span>\n    SharedCredentialsFiles  []<span class=\"synType\">string<\/span>\n    SkipCredsValidation     <span class=\"synType\">bool<\/span>\n    SkipRegionValidation    <span class=\"synType\">bool<\/span>\n    SkipRequestingAccountId <span class=\"synType\">bool<\/span>\n    TerraformVersion        <span class=\"synType\">string<\/span>\n    Token                   <span class=\"synType\">string<\/span>\n}\n\n\n<span class=\"synStatement\">func<\/span> (c *Config) ConfigureProvider(ctx context.Context) (*AWSClient, <span class=\"synType\">error<\/span>) {\n    ctx, logger := logging.NewTfLogger(ctx)\n\n    <span class=\"synStatement\">const<\/span> maxBackoff = <span class=\"synConstant\">300<\/span> * time.Second\n\n    awsbaseConfig := awsbase.Config{\n        AccessKey: c.AccessKey,\n        APNInfo: &amp;awsbase.APNInfo{\n            PartnerName: <span class=\"synConstant\">\"HashiCorp\"<\/span>,\n            Products: []awsbase.UserAgentProduct{\n                {Name: <span class=\"synConstant\">\"Terraform\"<\/span>, Version: c.TerraformVersion, Comment: <span class=\"synConstant\">\"+https:\/\/www.terraform.io\"<\/span>},\n                {Name: <span class=\"synConstant\">\"terraform-provider-awsmini\"<\/span>, Version: <span class=\"synConstant\">\"0.0.1\"<\/span>, Comment: <span class=\"synConstant\">\"+https:\/\/github.com\/torut\/terraform-provider-awsmini\"<\/span>},\n            },\n        },\n        CallerDocumentationURL:  <span class=\"synConstant\">\"https:\/\/github.com\/torut\/terraform-provider-awsmini\"<\/span>,\n        CallerName:              <span class=\"synConstant\">\"Terraform AWS Mini Provider\"<\/span>,\n        Logger:                  logger,\n        MaxBackoff:              maxBackoff,\n        MaxRetries:              <span class=\"synConstant\">25<\/span>,\n        Profile:                 c.Profile,\n        Region:                  c.Region,\n        SecretKey:               c.SecretKey,\n        SkipCredsValidation:     c.SkipCredsValidation,\n        SkipRequestingAccountId: c.SkipRequestingAccountId,\n        Token:                   c.Token,\n    }\n\n    <span class=\"synStatement\">if<\/span> <span class=\"synStatement\">len<\/span>(c.SharedConfigFiles) != <span class=\"synConstant\">0<\/span> {\n        awsbaseConfig.SharedConfigFiles = c.SharedConfigFiles\n    }\n\n    <span class=\"synStatement\">if<\/span> <span class=\"synStatement\">len<\/span>(c.SharedCredentialsFiles) != <span class=\"synConstant\">0<\/span> {\n        awsbaseConfig.SharedCredentialsFiles = c.SharedCredentialsFiles\n    }\n\n    \n    ctx, cfg, awsDiags := awsbase.GetAwsConfig(ctx, &amp;awsbaseConfig)\n\n    <span class=\"synStatement\">if<\/span> awsDiags.HasError() {\n        <span class=\"synStatement\">return<\/span> <span class=\"synStatement\">nil<\/span>, fmt.Errorf(<span class=\"synConstant\">\"error configuring AWS: %s\"<\/span>, diagsToString(awsDiags))\n    }\n\n    \n    client := &amp;AWSClient{\n        awsConfig: &amp;cfg,\n        region:    c.Region,\n    }\n\n    <span class=\"synStatement\">return<\/span> client, <span class=\"synStatement\">nil<\/span>\n}\n\n\n<span class=\"synStatement\">func<\/span> diagsToString(diags basediag.Diagnostics) <span class=\"synType\">string<\/span> {\n    <span class=\"synStatement\">var<\/span> result <span class=\"synType\">string<\/span>\n    <span class=\"synStatement\">for<\/span> _, d := <span class=\"synStatement\">range<\/span> diags {\n        <span class=\"synStatement\">if<\/span> result != <span class=\"synConstant\">\"\"<\/span> {\n            result += <span class=\"synConstant\">\"; \"<\/span>\n        }\n        result += fmt.Sprintf(<span class=\"synConstant\">\"%s: %s\"<\/span>, d.Summary(), d.Detail())\n    }\n    <span class=\"synStatement\">return<\/span> result\n}\n<\/pre>\n<h3 id=\"\u30d3\u30eb\u30c9\u3068\u8a2d\u5b9a\">\u30d3\u30eb\u30c9\u3068\u8a2d\u5b9a<\/h3>\n<p><code>awsmini<\/code><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code bash\" data-lang=\"bash\" data-unlink=\"\">go build -o .\\bin\\terraform-provider-awsmini_v0.0.1.exe .<\/pre>\n<p>\u9069\u5207\u306a\u5834\u6240\uff08<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Windows\">Windows<\/a>\u306a\u3089\u30e6\u30fc\u30b6\u30fc\u306e<code>%APPDATA%<\/code><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Mac\">Mac<\/a>\u306a\u3089\u30e6\u30fc\u30b6\u30fc\u306e\u30db\u30fc\u30e0<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8\">\u30c7\u30a3\u30ec\u30af\u30c8<\/a>\u30ea\uff09\u306b<code>terraform.rc<\/code>\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code\" data-lang=\"\" data-unlink=\"\">provider_installation {\n  dev_overrides {\n    \"local\/awsmini\" = \"C:\\\\Users\\\\torut\\\\Desktop\\\\awsmini\\\\bin\"\n  }\n}<\/pre>\n<p>\u3053\u308c\u306b\u3088\u308a\u3001Terraform\u304c<code>local\/awsmini<\/code>\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6307\u5b9a\u3055\u308c\u305f\u30ed\u30fc\u30ab\u30eb\u30d1\u30b9\u304b\u3089\u8aad\u307f\u8fbc\u3080\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\uff08\u53c2\u8003\uff1a<a target=\"_blank\" href=\"https:\/\/developer.hashicorp.com\/terraform\/cli\/config\/config-file\">Create a Terraform CLI configuration file<\/a>\uff09<\/p>\n<blockquote>\n<p>dev_overrides\u3060\u3068<code>terraform init<\/code>\u304c\u4f7f\u7528\u3067\u304d\u306a\u3044\u305f\u3081\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>filesystem_mirror\u3092\u6307\u5b9a\u3059\u308c\u3070\u3001<code>terraform init<\/code>\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30fc\u30ab\u30eb\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u53c2\u7167\u3067\u304d\u307e\u3059\u3002<br \/>\u8a73\u3057\u304f\u306f<a target=\"_blank\" href=\"https:\/\/developer.hashicorp.com\/terraform\/cli\/config\/config-file\">Terraform\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n<h2 id=\"Custom-Provider\u3067\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u3063\u305f\u7d50\u679c\">Custom Provider\u3067\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u3063\u305f\u7d50\u679c<\/h2>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066ASG\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"code lang-hcl\" data-lang=\"hcl\" data-unlink=\"\"><span class=\"synType\">terraform<\/span> <span class=\"synSpecial\">{<\/span>\n  <span class=\"synIdentifier\">required_version<\/span> = <span class=\"synConstant\">\"&gt;= 1.6.0\"<\/span>\n  <span class=\"synType\">required_providers<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synIdentifier\">awsmini<\/span> = <span class=\"synSpecial\">{<\/span>\n      <span class=\"synIdentifier\">source<\/span>  = <span class=\"synConstant\">\"local\/awsmini\"<\/span>\n      <span class=\"synIdentifier\">version<\/span> = <span class=\"synConstant\">\"0.0.1\"<\/span>\n    <span class=\"synSpecial\">}<\/span>\n  <span class=\"synSpecial\">}<\/span>\n<span class=\"synSpecial\">}<\/span>\n<span class=\"synType\">provider<\/span> <span class=\"synConstant\">\"awsmini\"<\/span> <span class=\"synSpecial\">{<\/span>\n  <span class=\"synIdentifier\">region<\/span> = <span class=\"synConstant\">\"ap-northeast-1\"<\/span>\n<span class=\"synSpecial\">}<\/span>\n\n<span class=\"synType\">resource<\/span> <span class=\"synConstant\">\"awsmini_launch_template\"<\/span> <span class=\"synConstant\">\"example\"<\/span> <span class=\"synSpecial\">{<\/span>\n  <span class=\"synIdentifier\">name_prefix<\/span>   = <span class=\"synConstant\">\"awsmini-lt-\"<\/span>\n  <span class=\"synIdentifier\">image_id<\/span>      = <span class=\"synConstant\">\"ami-0d52744d6551d851e\"<\/span>\n  <span class=\"synIdentifier\">instance_type<\/span> = <span class=\"synConstant\">\"t3.micro\"<\/span>\n <span class=\"synSpecial\">}<\/span>\n\n<span class=\"synType\">resource<\/span> <span class=\"synConstant\">\"awsmini_autoscaling_group\"<\/span> <span class=\"synConstant\">\"example\"<\/span> <span class=\"synSpecial\">{<\/span>\n  <span class=\"synIdentifier\">name<\/span>                = <span class=\"synConstant\">\"awsmini-asg-example\"<\/span>\n  <span class=\"synIdentifier\">max_size<\/span>            = <span class=\"synConstant\">3<\/span>\n  <span class=\"synIdentifier\">desired_capacity<\/span>    = <span class=\"synConstant\">2<\/span>\n  <span class=\"synIdentifier\">min_size<\/span>            = <span class=\"synConstant\">1<\/span>\n  <span class=\"synIdentifier\">health_check_type<\/span>   = <span class=\"synConstant\">\"EC2\"<\/span>\n  <span class=\"synIdentifier\">vpc_zone_identifier<\/span> = <span class=\"synSpecial\">[<\/span><span class=\"synConstant\">\"subnet-0fcd0acfe38968bb2\"<\/span>, <span class=\"synConstant\">\"subnet-017fa0e9eb9e46c84\"<\/span><span class=\"synSpecial\">]<\/span>\n  <span class=\"synType\">launch_template<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synIdentifier\">id<\/span>      = awsmini_launch_template.example.id\n    \n  <span class=\"synSpecial\">}<\/span>\n<span class=\"synSpecial\">}<\/span>\n<\/pre>\n<p>\u5b9f\u884c\u3057\u305f\u7d50\u679c\u3001version\u672a\u6307\u5b9a\u3067ASG\u306e\u8d77\u52d5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c<code>$Latest<\/code>\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002<\/p>\n<ul>\n<li><code>terraform plan<\/code>\u306e\u51fa\u529b\uff08\u4e00\u90e8\uff09<\/li>\n<\/ul>\n<pre class=\"code\" data-lang=\"\" data-unlink=\"\">Terraform will perform the following actions:\n\n  # awsmini_autoscaling_group.example will be created\n  + resource \"awsmini_autoscaling_group\" \"example\" {\n      + arn                       = (known after apply)\n      + default_cooldown          = (known after apply)\n      + desired_capacity          = 2\n      + health_check_grace_period = 300\n      + health_check_type         = \"EC2\"\n      + id                        = (known after apply)\n      + max_size                  = 3\n      + min_size                  = 1\n      + name                      = \"awsmini-asg-example\"\n      + vpc_zone_identifier       = [\n          + \"subnet-017fa0e9eb9e46c84\",\n          + \"subnet-0fcd0acfe38968bb2\",\n        ]\n\n      + launch_template {\n          + id      = (known after apply)\n          + name    = (known after apply)\n          + version = \"$Latest\"  \n        }\n    }<\/pre>\n<ul>\n<li>\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb<br \/><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/d\/dentsusoken\/20251103\/20251103213115.png\" alt=\"\"\/><\/li>\n<\/ul>\n<h2 id=\"\u307e\u3068\u3081\">\u307e\u3068\u3081<\/h2>\n<p>\u4eca\u56de\u306f\u3001\u516c\u5f0f\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider\u3092\u53c2\u8003\u306bCustom Provider\u3092\u5b9f\u88c5\u3057\u3001<code>aws_autoscaling_group<\/code>\u306e<code>launch_template<\/code>\u30d6\u30ed\u30c3\u30af\u306e<code>version<\/code>\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u3067<code>$Latest<\/code>\u306b\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<br \/>\u5b9f\u88c5\u3092\u901a\u3057\u3066\u3001Terraform Provider\u306e\u5185\u90e8\u69cb\u9020\u3084\u4ed5\u7d44\u307f\u3092\u7406\u89e3\u3057\u3001\u516c\u5f0f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA\">\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u3092\u8aad\u307f\u89e3\u304d\u306a\u304c\u3089\u62e1\u5f35\u3059\u308b\u7d4c\u9a13\u3092\u5f97\u3089\u308c\u307e\u3057\u305f\u3002<br \/>\u4eca\u5f8c\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider \u306b\u8ab2\u984c\u3092\u611f\u3058\u305f\u969b\u306f\u3001\u4eca\u56de\u306e\u7d4c\u9a13\u3092\u6d3b\u304b\u3057\u3066 Custom Provider \u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u8ab2\u984c\u3092\u89e3\u6c7a\u3057\u305f\u308a\u3001\u3055\u3089\u306b\u7406\u89e3\u304c\u6df1\u307e\u308c\u3070 <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/AWS\">AWS<\/a> Provider \u3078\u306e\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\u306b\u3082\u6311\u6226\u3057\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\u3053\u306e\u8a18\u4e8b\u304c\u3001Custom Provider \u5b9f\u88c5\u306b\u53d6\u308a\u7d44\u3080\u65b9\u306e\u4e00\u52a9\u306b\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n<p>\u3053\u3053\u307e\u3067\u304a\u8aad\u307f\u3044\u305f\u3060\u304d\u3001\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>\u57f7\u7b46\uff1a<a target=\"_blank\" href=\"https:\/\/shodo.ink\/@ooka.toru\/\">@ooka.toru<\/a><br \/>\u30ec\u30d3\u30e5\u30fc\uff1a<a target=\"_blank\" href=\"https:\/\/shodo.ink\/@miyazawa.hibiki\/\">@miyazawa.hibiki<\/a><br \/>\uff08<em><a target=\"_blank\" href=\"https:\/\/shodo.ink\">Shodo<\/a>\u3067\u57f7\u7b46\u3055\u308c\u307e\u3057\u305f<\/em>\uff09<\/p>\n<\/div>\n<p><script>(function(d, s, id) {\n  var js, fjs = d.getElementsByTagName(s)[0];\n  if (d.getElementById(id)) return;\n  js = d.createElement(s); js.id = id;\n  js.src = \"\/\/connect.facebook.net\/ja_JP\/sdk.js#xfbml=1&appId=719729204785177&version=v17.0\";\n  fjs.parentNode.insertBefore(js, fjs);\n}(document, 'script', 'facebook-jssdk'));<\/script><br \/>\n<br \/>\n<br \/><a href=\"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E5%8F%82%E8%80%83%E3%81%ABTerraform_Custom_Provider%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b \u3053\u3093\u306b\u3061\u306f\u3001\u30af\u30ed\u30b9\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3\u672c\u90e8\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u30bb\u30f3\u30bf\u30fc\u3001\u65b0\u53521\u5e74\u76ee\u306e\u5927\u5ca1\u53e1\u3067\u3059\u3002 \u4eca\u56de\u306f\u3001Terraform\u3067Auto Scaling Group\u306e\u6319\u52d5\u306b\u60a9\u3093\u3060\u7d4c\u9a13\u3092\u304d\u3063\u304b\u3051\u306b\u3001AWS Pro [&hellip;]","protected":false},"author":1,"featured_media":5554,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-22603","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform_Custom_Provider\u3092\u4f5c\u3063\u3066\u307f\u305f\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b \u3053\u3093\u306b\u3061\u306f\u3001\u30af\u30ed\u30b9\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3\u672c\u90e8\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u30bb\u30f3\u30bf\u30fc\u3001\u65b0\u53521\u5e74\u76ee\u306e\u5927\u5ca1\u53e1\u3067\u3059\u3002 \u4eca\u56de\u306f\u3001Terraform\u3067Auto Scaling Group\u306e\u6319\u52d5\u306b\u60a9\u3093\u3060\u7d4c\u9a13\u3092\u304d\u3063\u304b\u3051\u306b\u3001AWS Pro [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform_Custom_Provider\u3092\u4f5c\u3063\u3066\u307f\u305f\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-07T00:56:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"691\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22603\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0\",\"datePublished\":\"2025-11-07T00:56:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22603\\\/\"},\"wordCount\":143,\"image\":{\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22603\\\/\",\"url\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f\",\"name\":\"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png\",\"datePublished\":\"2025-11-07T00:56:18+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png\",\"width\":1300,\"height\":691},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tech.dentsusoken.com\\\/entry\\\/2025\\\/11\\\/07\\\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform_Custom_Provider\u3092\u4f5c\u3063\u3066\u307f\u305f","og_locale":"ja_JP","og_type":"article","og_title":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b \u3053\u3093\u306b\u3061\u306f\u3001\u30af\u30ed\u30b9\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3\u672c\u90e8\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u30bb\u30f3\u30bf\u30fc\u3001\u65b0\u53521\u5e74\u76ee\u306e\u5927\u5ca1\u53e1\u3067\u3059\u3002 \u4eca\u56de\u306f\u3001Terraform\u3067Auto Scaling Group\u306e\u6319\u52d5\u306b\u60a9\u3093\u3060\u7d4c\u9a13\u3092\u304d\u3063\u304b\u3051\u306b\u3001AWS Pro [&hellip;]","og_url":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform_Custom_Provider\u3092\u4f5c\u3063\u3066\u307f\u305f","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-07T00:56:18+00:00","og_image":[{"width":1300,"height":691,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"8\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/22603\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0","datePublished":"2025-11-07T00:56:18+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/22603\/"},"wordCount":143,"image":{"@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/22603\/","url":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f","name":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f - \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage"},"image":{"@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png","datePublished":"2025-11-07T00:56:18+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn.user_.blog_.st-hatena.com2Fdefault_entry_og_image2F1585296562F1704872217353595.png","width":1300,"height":691},{"@type":"BreadcrumbList","@id":"https:\/\/tech.dentsusoken.com\/entry\/2025\/11\/07\/AWS_Provider%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%82%92%e5%8f%82%e8%80%83%e3%81%abTerraform_Custom_Provider%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"AWS Provider\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u53c2\u8003\u306bTerraform Custom Provider\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; \u96fb\u901a\u7dcf\u7814 \u30c6\u30c3\u30af\u30d6\u30ed\u30b0"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=22603"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22603\/revisions"}],"predecessor-version":[{"id":22604,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22603\/revisions\/22604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/5554"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=22603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=22603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=22603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}