{"id":48514,"date":"2023-08-23T21:21:17","date_gmt":"2023-07-27T13:48:10","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/"},"modified":"2024-04-30T19:48:49","modified_gmt":"2024-04-30T11:48:49","slug":"%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/","title":{"rendered":"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack"},"content":{"rendered":"<h1>\u5b89\u88c5\u672c\u5730\u5806\u6808<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8569913a08637a6b91bd\/1-2.png\" alt=\"image.png\" \/><\/div>\n<p>\u5b89\u88c5awscli\u3001pip\u3001awslocal\u548clocalstack\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo apt install awscli\r\naws --version\r\nsudo apt install pip\r\npip --version\r\nsudo pip install awscli-local\r\nawslocal --version\r\npip install localstack\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8569913a08637a6b91bd\/4-0.png\" alt=\"image.png\" \/><\/div>\n<pre class=\"post-pre\"><code>awslocal ec2 describe-vpcs\r\n{\r\n    \"Vpcs\": [\r\n        {\r\n            \"CidrBlock\": \"172.31.0.0\/16\",\r\n            \"DhcpOptionsId\": \"dopt-7a8b9c2d\",\r\n            \"State\": \"available\",\r\n            \"VpcId\": \"vpc-53ac5cd0\",\r\n            \"OwnerId\": \"000000000000\",\r\n            \"InstanceTenancy\": \"default\",\r\n            \"Ipv6CidrBlockAssociationSet\": [],\r\n            \"CidrBlockAssociationSet\": [\r\n                {\r\n                    \"AssociationId\": \"vpc-cidr-assoc-19582a07\",\r\n                    \"CidrBlock\": \"172.31.0.0\/16\",\r\n                    \"CidrBlockState\": {\r\n                        \"State\": \"associated\"\r\n                    }\r\n                }\r\n            ],\r\n            \"IsDefault\": true,\r\n            \"Tags\": []\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u663e\u793a\u53ef\u521b\u5efa\u7684\u8d44\u6e90\u5217\u8868<\/p>\n<pre class=\"post-pre\"><code>curl -s \"http:\/\/127.0.0.1:4566\/health\" | jq .\r\n{\r\n  \"services\": {\r\n    \"acm\": \"available\",\r\n    \"apigateway\": \"available\",\r\n    \"cloudformation\": \"available\",\r\n    \"cloudwatch\": \"available\",\r\n    \"config\": \"available\",\r\n    \"dynamodb\": \"available\",\r\n    \"dynamodbstreams\": \"available\",\r\n    \"ec2\": \"running\",\r\n    \"es\": \"available\",\r\n    \"events\": \"available\",\r\n    \"firehose\": \"available\",\r\n    \"iam\": \"available\",\r\n    \"kinesis\": \"available\",\r\n    \"kms\": \"available\",\r\n    \"lambda\": \"available\",\r\n    \"logs\": \"available\",\r\n    \"opensearch\": \"available\",\r\n    \"redshift\": \"available\",\r\n    \"resource-groups\": \"available\",\r\n    \"resourcegroupstaggingapi\": \"available\",\r\n    \"route53\": \"available\",\r\n    \"route53resolver\": \"available\",\r\n    \"s3\": \"running\",\r\n    \"s3control\": \"available\",\r\n    \"scheduler\": \"available\",\r\n    \"secretsmanager\": \"available\",\r\n    \"ses\": \"available\",\r\n    \"sns\": \"available\",\r\n    \"sqs\": \"available\",\r\n    \"ssm\": \"available\",\r\n    \"stepfunctions\": \"available\",\r\n    \"sts\": \"available\",\r\n    \"support\": \"available\",\r\n    \"swf\": \"available\",\r\n    \"transcribe\": \"available\"\r\n  },\r\n  \"version\": \"2.2.1.dev\"\r\n}\r\n<\/code><\/pre>\n<h1>\u57fa\u5efa<\/h1>\n<p>\u8bf7\u5728\u4e3b.tf\u4e2d\u8ffd\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a<br \/>\n\u5982\u679c\u4e0d\u5c06resource-groups\u66f4\u6539\u4e3aresourcegroups\uff0c\u5219\u4f1a\u51fa\u73b0\u4e0d\u652f\u6301\u7684\u53c2\u6570\u9519\u8bef\u3002<br \/>\n\u4ee5\u4e0b\u662fendpoints\u5217\u8868\uff1a<br \/>\nhttps:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/guides\/custom-service-endpoints<\/p>\n<pre class=\"post-pre\"><code># backend\r\nterraform {\r\n  backend \"local\" {}\r\n}\r\n\r\n# provider\r\nprovider \"aws\" {\r\n  access_key                  = \"mock_access_key\"\r\n  region                      = \"us-east-1\"\r\n  s3_use_path_style           = true\r\n  secret_key                  = \"mock_secret_key\"\r\n  skip_credentials_validation = true\r\n  skip_metadata_api_check     = true\r\n  skip_requesting_account_id  = true\r\n\r\n  endpoints {\r\n    acm                      = \"http:\/\/localhost:4566\"\r\n    apigateway               = \"http:\/\/localhost:4566\"\r\n    cloudformation           = \"http:\/\/localhost:4566\"\r\n    cloudwatch               = \"http:\/\/localhost:4566\"\r\n    config                   = \"http:\/\/localhost:4566\"\r\n    dynamodb                 = \"http:\/\/localhost:4566\"\r\n    dynamodbstreams          = \"http:\/\/localhost:4566\"\r\n    ec2                      = \"http:\/\/localhost:4566\"\r\n    es                       = \"http:\/\/localhost:4566\"\r\n    events                   = \"http:\/\/localhost:4566\"\r\n    firehose                 = \"http:\/\/localhost:4566\"\r\n    iam                      = \"http:\/\/localhost:4566\"\r\n    kinesis                  = \"http:\/\/localhost:4566\"\r\n    kms                      = \"http:\/\/localhost:4566\"\r\n    lambda                   = \"http:\/\/localhost:4566\"\r\n    logs                     = \"http:\/\/localhost:4566\"\r\n    opensearch               = \"http:\/\/localhost:4566\"\r\n    redshift                 = \"http:\/\/localhost:4566\"\r\n    resourcegroups           = \"http:\/\/localhost:4566\"\r\n    resourcegroupstaggingapi = \"http:\/\/localhost:4566\"\r\n    route53                  = \"http:\/\/localhost:4566\"\r\n    route53resolver          = \"http:\/\/localhost:4566\"\r\n    s3                       = \"http:\/\/localhost:4566\"\r\n    s3control                = \"http:\/\/localhost:4566\"\r\n    scheduler                = \"http:\/\/localhost:4566\"\r\n    secretsmanager           = \"http:\/\/localhost:4566\"\r\n    ses                      = \"http:\/\/localhost:4566\"\r\n    sns                      = \"http:\/\/localhost:4566\"\r\n    sqs                      = \"http:\/\/localhost:4566\"\r\n    ssm                      = \"http:\/\/localhost:4566\"\r\n    stepfunctions            = \"http:\/\/localhost:4566\"\r\n    sts                      = \"http:\/\/localhost:4566\"\r\n    support                  = \"http:\/\/localhost:4566\"\r\n    swf                      = \"http:\/\/localhost:4566\"\r\n    transcribe               = \"http:\/\/localhost:4566\"\r\n  }\r\n}\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5c06\u4ee5\u4e0b\u8bbe\u7f6e\u4e3atrue\uff0cTerraform\u5c06\u6307\u5411localstack\u3002<\/p>\n<pre class=\"post-pre\"><code>  s3_use_path_style           = true\r\n  skip_credentials_validation = true\r\n  skip_metadata_api_check     = true\r\n  skip_requesting_account_id  = true\r\n<\/code><\/pre>\n<p>\u521d\u59cb\u5316Terraform<\/p>\n<pre class=\"post-pre\"><code>terraform init\r\n\r\nInitializing the backend...\r\n\r\nSuccessfully configured the backend \"local\"! Terraform will automatically\r\nuse this backend unless the backend configuration changes.\r\n\r\nInitializing provider plugins...\r\n- Reusing previous version of hashicorp\/aws from the dependency lock file\r\n- Installing hashicorp\/aws v4.65.0...\r\n- Installed hashicorp\/aws v4.65.0 (signed by HashiCorp)\r\n\r\nTerraform has been successfully initialized!\r\n\r\nYou may now begin working with Terraform. Try running \"terraform plan\" to see\r\nany changes that are required for your infrastructure. All Terraform commands\r\nshould now work.\r\n\r\nIf you ever set or change modules or backend configuration for Terraform,\r\nrerun this command to reinitialize your working directory. If you forget, other\r\ncommands will detect it and remind you to do so if necessary.\r\n<\/code><\/pre>\n<p>\u96a8\u610f\u5275\u5efa\u4e00\u500b s3 \u7684 tf<\/p>\n<pre class=\"post-pre\"><code>resource \"aws_s3_bucket\" \"test-bucket\" {\r\n  bucket = \"test-bucket\"\r\n}\r\n<\/code><\/pre>\n<p>terraform \u8ba1\u5212<\/p>\n<pre class=\"post-pre\"><code>terraform plan\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # aws_s3_bucket.test-bucket will be created\r\n  + resource \"aws_s3_bucket\" \"test-bucket\" {\r\n      + acceleration_status         = (known after apply)\r\n      + acl                         = (known after apply)\r\n      + arn                         = (known after apply)\r\n      + bucket                      = \"test-bucket\"\r\n      + bucket_domain_name          = (known after apply)\r\n      + bucket_prefix               = (known after apply)\r\n      + bucket_regional_domain_name = (known after apply)\r\n      + force_destroy               = false\r\n      + hosted_zone_id              = (known after apply)\r\n      + id                          = (known after apply)\r\n      + object_lock_enabled         = (known after apply)\r\n      + policy                      = (known after apply)\r\n      + region                      = (known after apply)\r\n      + request_payer               = (known after apply)\r\n      + tags_all                    = (known after apply)\r\n      + website_domain              = (known after apply)\r\n      + website_endpoint            = (known after apply)\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run \"terraform apply\" now.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNote: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if\r\nyou run \"terraform apply\" now.\r\n<\/code><\/pre>\n<p>\u8bd5\u8bd5\u7533\u8bf7<\/p>\n<pre class=\"post-pre\"><code>terraform apply\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # aws_s3_bucket.test-bucket will be created\r\n  + resource \"aws_s3_bucket\" \"test-bucket\" {\r\n      + acceleration_status         = (known after apply)\r\n      + acl                         = (known after apply)\r\n      + arn                         = (known after apply)\r\n      + bucket                      = \"test-bucket\"\r\n      + bucket_domain_name          = (known after apply)\r\n      + bucket_prefix               = (known after apply)\r\n      + bucket_regional_domain_name = (known after apply)\r\n      + force_destroy               = false\r\n      + hosted_zone_id              = (known after apply)\r\n      + id                          = (known after apply)\r\n      + object_lock_enabled         = (known after apply)\r\n      + policy                      = (known after apply)\r\n      + region                      = (known after apply)\r\n      + request_payer               = (known after apply)\r\n      + tags_all                    = (known after apply)\r\n      + website_domain              = (known after apply)\r\n      + website_endpoint            = (known after apply)\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\naws_s3_bucket.test-bucket: Creating...\r\naws_s3_bucket.test-bucket: Creation complete after 2s [id=test-bucket]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/code><\/pre>\n<p>\u8bd5\u8bd5\u4f7f\u7528s3 ls\u8fdb\u884c\u67e5\u627e\u3002<\/p>\n<pre class=\"post-pre\"><code>awslocal s3 ls\r\n2023-08-23 19:43:00 test-bucket\r\n<\/code><\/pre>\n<p>\u6211\u4e5f\u8bd5\u7740\u5efa\u7acb\u4e00\u4e2aVPC\u3002<\/p>\n<pre class=\"post-pre\"><code>resource \"aws_vpc\" \"main\" {\r\n  cidr_block = \"10.0.0.0\/16\"\r\n}\r\n<\/code><\/pre>\n<p>\u6267\u884cterraform apply<\/p>\n<pre class=\"post-pre\"><code>terraform apply\r\naws_s3_bucket.test-bucket: Refreshing state... [id=test-bucket]\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # aws_vpc.main will be created\r\n  + resource \"aws_vpc\" \"main\" {\r\n      + arn                                  = (known after apply)\r\n      + cidr_block                           = \"10.0.0.0\/16\"\r\n      + default_network_acl_id               = (known after apply)\r\n      + default_route_table_id               = (known after apply)\r\n      + default_security_group_id            = (known after apply)\r\n      + dhcp_options_id                      = (known after apply)\r\n      + enable_classiclink                   = (known after apply)\r\n      + enable_classiclink_dns_support       = (known after apply)\r\n      + enable_dns_hostnames                 = (known after apply)\r\n      + enable_dns_support                   = true\r\n      + enable_network_address_usage_metrics = (known after apply)\r\n      + id                                   = (known after apply)\r\n      + instance_tenancy                     = \"default\"\r\n      + ipv6_association_id                  = (known after apply)\r\n      + ipv6_cidr_block                      = (known after apply)\r\n      + ipv6_cidr_block_network_border_group = (known after apply)\r\n      + main_route_table_id                  = (known after apply)\r\n      + owner_id                             = (known after apply)\r\n      + tags_all                             = (known after apply)\r\n    }\r\n\r\nPlan: 1 to add, 0 to change, 0 to destroy.\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only 'yes' will be accepted to approve.\r\n\r\n  Enter a value: yes\r\n\r\naws_vpc.main: Creating...\r\naws_vpc.main: Creation complete after 0s [id=vpc-05f65a3e]\r\n\r\nApply complete! Resources: 1 added, 0 changed, 0 destroyed.\r\n<\/code><\/pre>\n<p>\u4e0d\u5728\u5217\u8868\u4e2d&#8230;<\/p>\n<pre class=\"post-pre\"><code>awslocal ec2 describe-vpcs\r\n{\r\n    \"Vpcs\": [\r\n        {\r\n            \"CidrBlock\": \"172.31.0.0\/16\",\r\n            \"DhcpOptionsId\": \"dopt-7a8b9c2d\",\r\n            \"State\": \"available\",\r\n            \"VpcId\": \"vpc-53ac5cd0\",\r\n            \"OwnerId\": \"000000000000\",\r\n            \"InstanceTenancy\": \"default\",\r\n            \"Ipv6CidrBlockAssociationSet\": [],\r\n            \"CidrBlockAssociationSet\": [\r\n                {\r\n                    \"AssociationId\": \"vpc-cidr-assoc-19582a07\",\r\n                    \"CidrBlock\": \"172.31.0.0\/16\",\r\n                    \"CidrBlockState\": {\r\n                        \"State\": \"associated\"\r\n                    }\r\n                }\r\n            ],\r\n            \"IsDefault\": true,\r\n            \"Tags\": []\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>\u5f53\u6211\u4f7f\u7528\u7279\u5b9a\u7684\u533a\u57df\u6307\u5b9a\u8fd0\u884c&#8221;describe&#8221;\u547d\u4ee4\u65f6\uff0c\u6211\u80fd\u591f\u770b\u5230\u76f8\u5173\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>awslocal ec2 describe-vpcs --region us-east-1\r\n{\r\n    \"Vpcs\": [\r\n        {\r\n            \"CidrBlock\": \"172.31.0.0\/16\",\r\n            \"DhcpOptionsId\": \"dopt-7a8b9c2d\",\r\n            \"State\": \"available\",\r\n            \"VpcId\": \"vpc-979681a9\",\r\n            \"OwnerId\": \"000000000000\",\r\n            \"InstanceTenancy\": \"default\",\r\n            \"Ipv6CidrBlockAssociationSet\": [],\r\n            \"CidrBlockAssociationSet\": [\r\n                {\r\n                    \"AssociationId\": \"vpc-cidr-assoc-18d5b19e\",\r\n                    \"CidrBlock\": \"172.31.0.0\/16\",\r\n                    \"CidrBlockState\": {\r\n                        \"State\": \"associated\"\r\n                    }\r\n                }\r\n            ],\r\n            \"IsDefault\": true,\r\n            \"Tags\": []\r\n        },\r\n        {\r\n            \"CidrBlock\": \"10.0.0.0\/16\",\r\n            \"DhcpOptionsId\": \"dopt-7a8b9c2d\",\r\n            \"State\": \"available\",\r\n            \"VpcId\": \"vpc-d024653d\",\r\n            \"OwnerId\": \"000000000000\",\r\n            \"InstanceTenancy\": \"default\",\r\n            \"Ipv6CidrBlockAssociationSet\": [],\r\n            \"CidrBlockAssociationSet\": [\r\n                {\r\n                    \"AssociationId\": \"vpc-cidr-assoc-83f9a15d\",\r\n                    \"CidrBlock\": \"10.0.0.0\/16\",\r\n                    \"CidrBlockState\": {\r\n                        \"State\": \"associated\"\r\n                    }\r\n                }\r\n            ],\r\n            \"IsDefault\": false,\r\n            \"Tags\": []\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>\u6bc1\u706d\u62d3\u8352\u5730<\/p>\n<pre class=\"post-pre\"><code>terraform destroy\r\naws_vpc.main: Refreshing state... [id=vpc-91c2af85]\r\naws_s3_bucket.test-bucket: Refreshing state... [id=test-bucket]\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  - destroy\r\n\r\nTerraform will perform the following actions:\r\n\r\n  # aws_s3_bucket.test-bucket will be destroyed\r\n  - resource \"aws_s3_bucket\" \"test-bucket\" {\r\n      - arn                         = \"arn:aws:s3:::test-bucket\" -&gt; null\r\n      - bucket                      = \"test-bucket\" -&gt; null\r\n      - bucket_domain_name          = \"test-bucket.s3.amazonaws.com\" -&gt; null\r\n      - bucket_regional_domain_name = \"test-bucket.s3.amazonaws.com\" -&gt; null\r\n      - force_destroy               = false -&gt; null\r\n      - hosted_zone_id              = \"Z3AQBSTGFYJSTF\" -&gt; null\r\n      - id                          = \"test-bucket\" -&gt; null\r\n      - object_lock_enabled         = false -&gt; null\r\n      - region                      = \"us-east-1\" -&gt; null\r\n      - request_payer               = \"BucketOwner\" -&gt; null\r\n      - tags                        = {} -&gt; null\r\n      - tags_all                    = {} -&gt; null\r\n\r\n      - grant {\r\n          - id          = \"75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a\" -&gt; null\r\n          - permissions = [\r\n              - \"FULL_CONTROL\",\r\n            ] -&gt; null\r\n          - type        = \"CanonicalUser\" -&gt; null\r\n        }\r\n\r\n      - versioning {\r\n          - enabled    = false -&gt; null\r\n          - mfa_delete = false -&gt; null\r\n        }\r\n    }\r\n\r\n  # aws_vpc.main will be destroyed\r\n  - resource \"aws_vpc\" \"main\" {\r\n      - arn                                  = \"arn:aws:ec2:us-east-1:000000000000:vpc\/vpc-91c2af85\" -&gt; null\r\n      - assign_generated_ipv6_cidr_block     = false -&gt; null\r\n      - cidr_block                           = \"10.0.0.0\/16\" -&gt; null\r\n      - default_network_acl_id               = \"acl-66d5558b\" -&gt; null\r\n      - default_route_table_id               = \"rtb-9432c04d\" -&gt; null\r\n      - default_security_group_id            = \"sg-5ee10ba16ba387283\" -&gt; null\r\n      - dhcp_options_id                      = \"dopt-7a8b9c2d\" -&gt; null\r\n      - enable_classiclink                   = false -&gt; null\r\n      - enable_classiclink_dns_support       = false -&gt; null\r\n      - enable_dns_hostnames                 = false -&gt; null\r\n      - enable_dns_support                   = true -&gt; null\r\n      - enable_network_address_usage_metrics = false -&gt; null\r\n      - id                                   = \"vpc-91c2af85\" -&gt; null\r\n      - instance_tenancy                     = \"default\" -&gt; null\r\n      - ipv6_netmask_length                  = 0 -&gt; null\r\n      - main_route_table_id                  = \"rtb-9432c04d\" -&gt; null\r\n      - owner_id                             = \"000000000000\" -&gt; null\r\n      - tags                                 = {} -&gt; null\r\n      - tags_all                             = {} -&gt; null\r\n    }\r\n\r\nPlan: 0 to add, 0 to change, 2 to destroy.\r\n\r\nDo you really want to destroy all resources?\r\n  Terraform will destroy all your managed infrastructure, as shown above.\r\n  There is no undo. Only 'yes' will be accepted to confirm.\r\n\r\n  Enter a value: yes\r\n\r\naws_vpc.main: Destroying... [id=vpc-91c2af85]\r\naws_s3_bucket.test-bucket: Destroying... [id=test-bucket]\r\naws_s3_bucket.test-bucket: Destruction complete after 0s\r\naws_vpc.main: Destruction complete after 0s\r\n\r\nDestroy complete! Resources: 2 destroyed.\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5b89\u88c5\u672c\u5730\u5806\u6808 \u5b89\u88c5awscli\u3001pip\u3001awslocal\u548clocalstack\u3002 sudo apt insta [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48514","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack - Blog - Silicon Cloud<\/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:\/\/www.silicloud.com\/zh\/blog\/\u5728\u672c\u5730\u4f7f\u7528terraform\u7684localstack\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack\" \/>\n<meta property=\"og:description\" content=\"\u5b89\u88c5\u672c\u5730\u5806\u6808 \u5b89\u88c5awscli\u3001pip\u3001awslocal\u548clocalstack\u3002 sudo apt insta [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u672c\u5730\u4f7f\u7528terraform\u7684localstack\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-27T13:48:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T11:48:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8569913a08637a6b91bd\/1-2.png\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/\",\"name\":\"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-27T13:48:10+00:00\",\"dateModified\":\"2024-04-30T11:48:49+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack - Blog - Silicon Cloud","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:\/\/www.silicloud.com\/zh\/blog\/\u5728\u672c\u5730\u4f7f\u7528terraform\u7684localstack\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack","og_description":"\u5b89\u88c5\u672c\u5730\u5806\u6808 \u5b89\u88c5awscli\u3001pip\u3001awslocal\u548clocalstack\u3002 sudo apt insta [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728\u672c\u5730\u4f7f\u7528terraform\u7684localstack\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-27T13:48:10+00:00","article_modified_time":"2024-04-30T11:48:49+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8569913a08637a6b91bd\/1-2.png"}],"author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/","name":"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-27T13:48:10+00:00","dateModified":"2024-04-30T11:48:49+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728\u672c\u5730\u4f7f\u7528Terraform\u7684LocalStack"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8%e6%9c%ac%e5%9c%b0%e4%bd%bf%e7%94%a8terraform%e7%9a%84localstack%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48514"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48514\/revisions"}],"predecessor-version":[{"id":93937,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48514\/revisions\/93937"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}