{"id":49238,"date":"2023-09-06T15:03:02","date_gmt":"2023-12-04T08:30:18","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/"},"modified":"2024-01-15T12:51:01","modified_gmt":"2024-01-15T04:51:01","slug":"%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/","title":{"rendered":"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406"},"content":{"rendered":"<h2>\u7b80\u4ecb<\/h2>\n<p>\u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4f7f\u7528Apex\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u7ba1\u7406Lambda\u7684\u65b9\u6cd5\u3002<br \/>\n\u4f7f\u7528Apex\u548c\u73af\u5883\u53d8\u91cf\uff1a\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u8bbe\u7f6eLambda\u73af\u5883 &#8211; Qiita<\/p>\n<p>\u8fd9\u6b21\u6211\u60f3\u5c1d\u8bd5\u4f7f\u7528Apex\u548cTerraform\u6765\u7ba1\u7406Lambda\u51fd\u6570\u3002<\/p>\n<h2>\u7248\u672c\u7b49<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">OS: Mac OS X 10.11.1<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Terraform: v0.6.16<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apex: 0.9.0<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u8a00\u8a9e: Go<\/ul>\n<h2>\u9884\u5148\u8bbe\u5b9a<\/h2>\n<h3>\u5b89\u88c5Terraform<\/h3>\n<p>\u5982\u679c\u5c1a\u672a\u5b89\u88c5Terraform\uff0c\u5c31\u4e0b\u8f7d\u5e76\u5b89\u88c5Terraform &#8211; Terraform by HashiCorp\u3002<\/p>\n<h3>\u5b89\u88c5Apex<\/h3>\n<p>\u5982\u679c\u5c1a\u672a\u5b89\u88c5Apex\uff0c\u5219\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>curl https:\/\/raw.githubusercontent.com\/apex\/apex\/master\/install.sh | sh\r\n<\/code><\/pre>\n<h3>\u4e9e\u99ac\u905c\u7db2\u8def\u670d\u52d9\u914d\u7f6e<\/h3>\n<h4>\u51c6\u5907AWS\u5e10\u6237\u3002<\/h4>\n<p>\u8fd9\u6b21\u6211\u60f3\u6839\u636e\u73af\u5883\u5c06AWS\u8d26\u6237\u5206\u5f00\uff0c\u6240\u4ee5\u6211\u51c6\u5907\u4e86\u4e00\u4e2a\u7528\u4e8e\u751f\u4ea7\u7684\u548c\u4e00\u4e2a\u7528\u4e8e\u5f00\u53d1\u7684AWS\u8d26\u6237\u3002<br \/>\n\u51c6\u5907\u597d\u8d26\u6237\u540e\uff0c\u8bf7\u5c06\u5176\u4fdd\u5b58\u5728 ~\/.aws\/credentials \u6587\u4ef6\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code># dev\u7528\r\n[default]\r\nregion=ap-northeast-1\r\naws_access_key_id=XXXXXXXXXXX\r\naws_secret_access_key=XXXXXXXXXXX\r\n\r\n# prod\u7528\r\n[prod]\r\nregion=ap-northeast-1\r\naws_access_key_id=XXXXXXXXXXX\r\naws_secret_access_key=XXXXXXXXXXX\r\n<\/code><\/pre>\n<p>\u6211\u5c06dev\u914d\u7f6e\u6587\u4ef6\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u3002<\/p>\n<h4>\u51c6\u5907S3\u5b58\u50a8\u6876<\/h4>\n<p>\u4e3a\u4e86\u5b58\u50a8Terraform\u7684\u72b6\u6001\u6587\u4ef6\uff0c\u6211\u4eec\u9700\u8981\u51c6\u5907\u4e00\u4e2aS3\u5b58\u50a8\u6876\u3002\u8fd9\u6b21\u6211\u4eec\u7ed9\u5b83\u53d6\u540d\u4e3a&#8221;apex-terraform-example&#8221;\u3002<\/p>\n<h2>\u9879\u76ee\u521b\u5efa<\/h2>\n<p>\u9996\u5148\u521b\u5efa\u4e00\u4e2a\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir apex_terraform\r\n<\/code><\/pre>\n<p>\u4f7f\u7528 Apex \u547d\u4ee4\u521b\u5efa\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code>cd apex_terraform\r\napex init\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u5bf9\u8bdd\u547d\u4ee4\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>Project name: apex_terraform\r\nProject description:\r\nWould you like to manage infrastructure with Terraform? (yes\/no): yes\r\nEnvironments: dev, prod\r\nWould you like to store Terraform state on S3? (yes\/no): yes\r\nS3 bucket name: apex-terraform-example\r\n<\/code><\/pre>\n<p>\u5728\u5173\u4e8e\u662f\u5426\u4f7f\u7528Terraform\u7684\u95ee\u9898\u4e2d\uff0c\u9009\u62e9&#8221;Yes&#8221;\u3002<br \/>\n\u6b64\u5916\uff0c\u5f53\u88ab\u95ee\u53ca\u662f\u5426\u5c06Terraform\u7684\u72b6\u6001\u6587\u4ef6\u653e\u7f6e\u5728S3\u4e0a\u65f6\uff0c\u9009\u62e9&#8221;Yes&#8221;\u3002\u9009\u62e9&#8221;Yes&#8221;\u540e\u4f1a\u88ab\u8981\u6c42\u6307\u5b9aS3 Bucket\u7684\u540d\u79f0\u3002<\/p>\n<p>\u521b\u5efa\u9879\u76ee\uff0c\u5c06\u4ee5\u4ee5\u4e0b\u6587\u4ef6\u7ed3\u6784\u5b8c\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code>\u251c\u2500\u2500 functions\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 hello\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 index.js\r\n\u251c\u2500\u2500 infrastructure\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dev\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 modules\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 iam\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u251c\u2500\u2500 iam.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 outputs.tf\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 prod\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 main.tf\r\n\u2514\u2500\u2500 project.json\r\n<\/code><\/pre>\n<p>\u57fa\u7840\u8bbe\u65bd\u4e0b\u9762\u6709\u9488\u5bf9\u5f00\u53d1\u548c\u751f\u4ea7\u73af\u5883\u7684\u6587\u4ef6\u5939\uff0c\u5e76\u4e14\u5728\u8fd9\u4e9b\u6587\u4ef6\u5939\u4e2d\u5b58\u653e\u4e86terraform\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u6b64\u5916\uff0c\u5728\u57fa\u7840\u8bbe\u65bd\u7684\u6a21\u5757\u4e0b\uff0c\u8fd8\u6709\u7528\u4e8e\u521b\u5efaIAM\u89d2\u8272\u7684\u6a21\u5757\u3002\u6bcf\u4e2a\u73af\u5883\u7684main.tf\u6587\u4ef6\u4e2d\u5305\u542b\u4ee5\u4e0b\u63cf\u8ff0\uff0c\u53ef\u4ee5\u786e\u8ba4\u8be5\u6a21\u5757\u7528\u4e8eIAM\u89d2\u8272\u7684\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>module \"iam\" {\r\n  source = \"..\/modules\/iam\"\r\n}\r\n\r\noutput \"lambda_function_role_id\" {\r\n  value = \"${module.iam.lambda_function_role_id}\"\r\n}\r\n<\/code><\/pre>\n<h2>\u57fa\u7840\u8bbe\u65bd\u5efa\u8bbe (\u5f00\u53d1)<\/h2>\n<p>\u6211\u4f1a\u6839\u636e\u6bcf\u4e2a\u73af\u5883\u6267\u884cTerraform\u3002\u9996\u5148\uff0c\u6211\u4f1a\u5c1d\u8bd5\u901a\u8fc7\u6267\u884c\u8ba1\u5212(plan)\u6765\u786e\u8ba4\u6267\u884c\u65b9\u6848\u3002<\/p>\n<pre class=\"post-pre\"><code>$ apex infra plan\r\nRefreshing Terraform state prior to plan...\r\n\r\n\r\nThe Terraform execution plan has been generated and is shown below.\r\nResources are shown in alphabetical order for quick scanning. Green resources\r\nwill be created (or destroyed and then created if an existing resource\r\nexists), yellow resources are being changed in-place, and red resources\r\nwill be destroyed.\r\n\r\nNote: You didn't specify an \"-out\" parameter to save this plan, so when\r\n\"apply\" is called, Terraform can't guarantee this is what will execute.\r\n\r\n+ module.iam.aws_iam_role.lambda_function\r\n    arn:                \"\" =&gt; \"&lt;computed&gt;\"\r\n    assume_role_policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Principal\\\": {\\n        \\\"Service\\\": \\\"lambda.amazonaws.com\\\"\\n      },\\n      \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n    }\\n  ]\\n}\\n\"\r\n    name:               \"\" =&gt; \"$ apex infra plan\r\nRefreshing Terraform state prior to plan...\r\n\r\n\r\nThe Terraform execution plan has been generated and is shown below.\r\nResources are shown in alphabetical order for quick scanning. Green resources\r\nwill be created (or destroyed and then created if an existing resource\r\nexists), yellow resources are being changed in-place, and red resources\r\nwill be destroyed.\r\n\r\nNote: You didn't specify an \"-out\" parameter to save this plan, so when\r\n\"apply\" is called, Terraform can't guarantee this is what will execute.\r\n\r\n+ module.iam.aws_iam_role.lambda_function\r\n    arn:                \"\" =&gt; \"&lt;computed&gt;\"\r\n    assume_role_policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Principal\\\": {\\n        \\\"Service\\\": \\\"lambda.amazonaws.com\\\"\\n      },\\n      \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n    }\\n  ]\\n}\\n\"\r\n    name:               \"\" =&gt; \"apex_lambda_function\"\r\n    path:               \"\" =&gt; \"\/\"\r\n    unique_id:          \"\" =&gt; \"&lt;computed&gt;\"\r\n\r\n+ module.iam.aws_iam_role_policy.cloudwatchlogs_full_access\r\n    name:   \"\" =&gt; \"cloudwatchlogs_full_access\"\r\n    policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Action\\\": [\\n        \\\"logs:*\\\"\\n      ],\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Resource\\\": \\\"*\\\"\\n    }\\n  ]\\n}\\n\"\r\n    role:   \"\" =&gt; \"${aws_iam_role.lambda_function.id}\"\r\n\r\n\r\nPlan: 2 to add, 0 to change, 0 to destroy.\"\r\n    path:               \"\" =&gt; \"\/\"\r\n    unique_id:          \"\" =&gt; \"&lt;computed&gt;\"\r\n\r\n+ module.iam.aws_iam_role_policy.cloudwatchlogs_full_access\r\n    name:   \"\" =&gt; \"cloudwatchlogs_full_access\"\r\n    policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Action\\\": [\\n        \\\"logs:*\\\"\\n      ],\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Resource\\\": \\\"*\\\"\\n    }\\n  ]\\n}\\n\"\r\n    role:   \"\" =&gt; \"${aws_iam_role.lambda_function.id}\"\r\n\r\n\r\nPlan: 2 to add, 0 to change, 0 to destroy.\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u521b\u5efa\u4e86\u4e00\u4e2a\u62e5\u6709\u5bf9CloudWatch Logs\u7684\u5b8c\u5168\u8bbf\u95ee\u6743\u9650\u7684Policy\u4ee5\u53ca\u4e00\u4e2a\u540d\u4e3aapex_lambda_function\u7684IAM Role\u3002<\/p>\n<p>\u6211\u5df2\u7ecf\u786e\u8ba4\u8fc7\u4e86\uff0c\u6240\u4ee5\u6211\u4f1a\u8fd0\u884c\u771f\u6b63\u7684Terraform\u3002<\/p>\n<pre class=\"post-pre\"><code>$ apex infra apply\r\nmodule.iam.aws_iam_role.lambda_function: Creating...\r\n  arn:                \"\" =&gt; \"&lt;computed&gt;\"\r\n  assume_role_policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Principal\\\": {\\n        \\\"Service\\\": \\\"lambda.amazonaws.com\\\"\\n      },\\n      \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n    }\\n  ]\\n}\\n\"\r\n  name:               \"\" =&gt; \"apex_lambda_function\"\r\n  path:               \"\" =&gt; \"\/\"\r\n  unique_id:          \"\" =&gt; \"&lt;computed&gt;\"\r\nmodule.iam.aws_iam_role.lambda_function: Creation complete\r\nmodule.iam.aws_iam_role_policy.cloudwatchlogs_full_access: Creating...\r\n  name:   \"\" =&gt; \"cloudwatchlogs_full_access\"\r\n  policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Action\\\": [\\n        \\\"logs:*\\\"\\n      ],\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Resource\\\": \\\"*\\\"\\n    }\\n  ]\\n}\\n\"\r\n  role:   \"\" =&gt; \"apex_lambda_function\"\r\nmodule.iam.aws_iam_role_policy.cloudwatchlogs_full_access: Creation complete\r\n\r\nApply complete! Resources: 2 added, 0 changed, 0 destroyed.\r\n\r\nThe state of your infrastructure has been saved to the path\r\nbelow. This state is required to modify and destroy your\r\ninfrastructure, so keep it safe. To inspect the complete state\r\nuse the `terraform show` command.\r\n\r\nState path: terraform.tfstate\r\n\r\nOutputs:\r\n\r\n  lambda_function_role_id = arn:aws:iam::588762728270:role\/apex_lambda_function\r\n<\/code><\/pre>\n<p>\u76ee\u524d\u5df2\u7ecf\u521b\u5efa\u4e86IAM\u89d2\u8272\u3002\u4e0d\u8fc7\u76ee\u524d\u53ea\u521b\u5efa\u4e86\u5f00\u53d1\u73af\u5883\u7684IAM\u89d2\u8272\u3002<\/p>\n<h3>\u57fa\u7840\u8bbe\u65bd\u5efa\u8bbe (\u4ea7\u54c1)<\/h3>\n<p>\u76ee\u524d\u53ea\u9488\u5bf9dev\u73af\u5883\u5efa\u7acb\u4e86IAM\u89d2\u8272\uff0c\u56e0\u6b64\u6211\u5e0c\u671b\u4e5f\u80fd\u4e3aprod\u73af\u5883\u8fdb\u884c\u6784\u5efa\u3002<\/p>\n<p>\u5728\u521d\u59cb\u72b6\u6001\u4e0b\uff0cTerraform\u914d\u7f6e\u6587\u4ef6\u90fd\u88ab\u653e\u7f6e\u5728\u5b8c\u5168\u76f8\u540c\u7684\u4f4d\u7f6e\uff0c\u56e0\u6b64\u8bf7\u7f16\u8f91\u751f\u4ea7\u73af\u5883\u7684\u914d\u7f6e\u6587\u4ef6\u5e76\u5199\u5165\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">variable<\/span> <span class=\"s2\">\"aws_region\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"nx\">provider<\/span> <span class=\"s2\">\"aws\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">profile<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"prod\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"err\">...<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u5982\u679c\u6309\u7167\u539f\u6837\u4f7f\u7528\uff0c\u5219\u4f1a\u4f7f\u7528\u4e0e dev \u76f8\u540c\u7684\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\uff08AWS \u8d26\u53f7\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u8fdb\u884c\u4e86\u8bbe\u7f6e\u4ee5\u4f7f\u7528 prodProfile\u3002<\/p>\n<p>Terraform\u7684\u6267\u884c\u65b9\u9762\uff0c\u6211\u5728apex infra\u547d\u4ee4\u4e2d\u5e76\u6ca1\u6709\u627e\u5230\u6307\u5b9a\u76ee\u6807\u73af\u5883\u7684\u9009\u9879\uff08\u53ef\u80fd\u662f\u6211\u6ca1\u6709\u6ce8\u610f\u5230\uff09&#8230;\u4e0d\u8fc7\uff0c\u57fa\u672c\u4e0a\u8fd9\u8fd8\u662f\u901a\u5e38\u7684Terraform\u64cd\u4f5c\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u8fdb\u5165prod\u76ee\u5f55\u5e76\u6267\u884cterraform apply\u3002<br \/>\n\u203b2016\/06\/01\u66f4\u65b0 &#8211; \u901a\u8fc7\u6307\u5b9a-e\u9009\u9879\u53ef\u4ee5\u5b9e\u73b0\uff01<\/p>\n<pre class=\"post-pre\"><code>$ apex infra -e prod apply\r\nmodule.iam.aws_iam_role.lambda_function: Creating...\r\n  arn:                \"\" =&gt; \"&lt;computed&gt;\"\r\n  assume_role_policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Principal\\\": {\\n        \\\"Service\\\": \\\"lambda.amazonaws.com\\\"\\n      },\\n      \\\"Action\\\": \\\"sts:AssumeRole\\\"\\n    }\\n  ]\\n}\\n\"\r\n  name:               \"\" =&gt; \"apex_lambda_function\"\r\n  path:               \"\" =&gt; \"\/\"\r\n  unique_id:          \"\" =&gt; \"&lt;computed&gt;\"\r\nmodule.iam.aws_iam_role.lambda_function: Creation complete\r\nmodule.iam.aws_iam_role_policy.cloudwatchlogs_full_access: Creating...\r\n  name:   \"\" =&gt; \"cloudwatchlogs_full_access\"\r\n  policy: \"\" =&gt; \"{\\n  \\\"Version\\\": \\\"2012-10-17\\\",\\n  \\\"Statement\\\": [\\n    {\\n      \\\"Action\\\": [\\n        \\\"logs:*\\\"\\n      ],\\n      \\\"Effect\\\": \\\"Allow\\\",\\n      \\\"Resource\\\": \\\"*\\\"\\n    }\\n  ]\\n}\\n\"\r\n  role:   \"\" =&gt; \"apex_lambda_function\"\r\nmodule.iam.aws_iam_role_policy.cloudwatchlogs_full_access: Creation complete\r\n\r\nApply complete! Resources: 2 added, 0 changed, 0 destroyed.\r\n\r\nThe state of your infrastructure has been saved to the path\r\nbelow. This state is required to modify and destroy your\r\ninfrastructure, so keep it safe. To inspect the complete state\r\nuse the `terraform show` command.\r\n\r\nState path: terraform.tfstate\r\n\r\nOutputs:\r\n\r\n  lambda_function_role_id = arn:aws:iam::109572732475:role\/apex_lambda_function\r\n<\/code><\/pre>\n<p>\u8fd9\u6837\u5c31\u521b\u5efa\u4e86\u4e00\u4e2a\u7528\u4e8eprod\u7684IAM\u89d2\u8272\uff01<\/p>\n<h2>\u521b\u5efa\u51fd\u6570\uff08\u6307\u5b9a\u73af\u5883\u53d8\u91cf\uff09<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u521b\u5efaLambda\u4ee3\u7801\u3002\u6211\u4eec\u5c06\u6839\u636e\u4e0d\u540c\u7684\u73af\u5883\u6765\u66f4\u6539\u73af\u5883\u53d8\u91cf\uff0c\u5e76\u5c1d\u8bd5\u8ba9\u6267\u884c\u7ed3\u679c\u968f\u4e4b\u800c\u53d8\u5316\u3002<\/p>\n<pre class=\"post-pre\"><code>*.go\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\r\n    <span class=\"s\">\"encoding\/json\"<\/span>\r\n    <span class=\"s\">\"os\"<\/span>\r\n\r\n    <span class=\"s\">\"github.com\/apex\/go-apex\"<\/span>\r\n<span class=\"p\">)<\/span>\r\n\r\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">apex<\/span><span class=\"o\">.<\/span><span class=\"n\">HandleFunc<\/span><span class=\"p\">(<\/span><span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">RawMessage<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">*<\/span><span class=\"n\">apex<\/span><span class=\"o\">.<\/span><span class=\"n\">Context<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"k\">interface<\/span><span class=\"p\">{},<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"HOGE\"<\/span><span class=\"p\">),<\/span> <span class=\"no\">nil<\/span>\r\n    <span class=\"p\">})<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5728main()\u51fd\u6570\u4e2d\uff0c\u5b83\u8fd4\u56de\u4e86\u6307\u5b9a\u7684\u73af\u5883\u53d8\u91cfHOGE\u7684\u503c\u3002<br \/>\n\u203b\u53ef\u4ee5\u5728apex\/_examples\/go at master \u00b7 apex\/apex\u4e2d\u67e5\u770b\u4f7f\u7528Go\u7f16\u5199\u7684\u4ee3\u7801\u793a\u4f8b\u3002<\/p>\n<p>\u4e3a\u4e86\u5728dev\u548cprod\u4e4b\u95f4\u5207\u6362\u73af\u5883\u53d8\u91cf\uff0c\u6211\u4eec\u5c06\u51c6\u5907\u4e0d\u540c\u7684env\u6587\u4ef6\u3002<\/p>\n<p>.env-dev \u73af\u5883\u914d\u7f6e\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code>HOGE=FUGA\r\n<\/code><\/pre>\n<p>.env-prod &#8211;&gt; .\u73af\u5883-\u751f\u4ea7<\/p>\n<pre class=\"post-pre\"><code>HOGE=PIYO\r\n<\/code><\/pre>\n<p>\u6211\u5c06\u5728\u5f00\u53d1\u73af\u5883\u90e8\u7f72\u5e76\u8fd0\u884c\u3002\u73af\u5883\u53d8\u91cf\u5c06\u4f7f\u7528&#8211;set\u9009\u9879\u6307\u5b9a\u3002<\/p>\n<pre class=\"post-pre\"><code>$ apex deploy hello --set $(cat .env-dev)\r\n\r\n   \u2022 config unchanged          function=hello\r\n   \u2022 code unchanged            function=hello\r\n$ apex invoke hello\r\n\"FUGA\"\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u73af\u5883\u53d8\u91cf\u7684\u8bbe\u7f6e\u5df2\u7ecf\u751f\u6548\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5c1d\u8bd5\u5c06\u5176\u90e8\u7f72\u5230prod\u73af\u5883\u3002<\/p>\n<pre class=\"post-pre\"><code>$ apex deploy hello -e prod --profile prod --set $(cat .env-prod)\r\n   \u2022 config unchanged          function=hello\r\n   \u2022 updating function         function=hello\r\n   \u2022 updated alias current     function=hello version=2\r\n   \u2022 function updated          function=hello name=apex_terraform_hello version=2\r\n$ apex invoke hello -e prod --profile prod\r\n\"PIYO\"\r\n<\/code><\/pre>\n<p>\u6211\u4e5f\u786e\u8ba4\u4e86\u9488\u5bf9prod\u7684\u73af\u5883\u53d8\u91cf\u5df2\u7ecf\u6307\u5b9a\u4e86\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u4ecb \u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4f7f\u7528Apex\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u7ba1\u7406Lambda\u7684\u65b9\u6cd5\u3002 \u4f7f\u7528Apex\u548c\u73af\u5883\u53d8\u91cf\uff1a\u5728\u4e0d [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-49238","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>\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406 - 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\/\u4f7f\u7528apex\u7684lambda\uff1a\u4f7f\u7528terraform\u8fdb\u884c\u7ba1\u7406\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406\" \/>\n<meta property=\"og:description\" content=\"\u7b80\u4ecb \u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4f7f\u7528Apex\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u7ba1\u7406Lambda\u7684\u65b9\u6cd5\u3002 \u4f7f\u7528Apex\u548c\u73af\u5883\u53d8\u91cf\uff1a\u5728\u4e0d [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apex\u7684lambda\uff1a\u4f7f\u7528terraform\u8fdb\u884c\u7ba1\u7406\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-04T08:30:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-15T04:51:01+00:00\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \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\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/\",\"name\":\"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-04T08:30:18+00:00\",\"dateModified\":\"2024-01-15T04:51:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406\"}]},{\"@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\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406 - 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\/\u4f7f\u7528apex\u7684lambda\uff1a\u4f7f\u7528terraform\u8fdb\u884c\u7ba1\u7406\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406","og_description":"\u7b80\u4ecb \u5728\u4e0a\u4e00\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4f7f\u7528Apex\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u7ba1\u7406Lambda\u7684\u65b9\u6cd5\u3002 \u4f7f\u7528Apex\u548c\u73af\u5883\u53d8\u91cf\uff1a\u5728\u4e0d [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apex\u7684lambda\uff1a\u4f7f\u7528terraform\u8fdb\u884c\u7ba1\u7406\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-04T08:30:18+00:00","article_modified_time":"2024-01-15T04:51:01+00:00","author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/","name":"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-04T08:30:18+00:00","dateModified":"2024-01-15T04:51:01+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Apex\u7684Lambda\uff1a\u4f7f\u7528Terraform\u8fdb\u884c\u7ba1\u7406"}]},{"@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\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apex%e7%9a%84lambda%ef%bc%9a%e4%bd%bf%e7%94%a8terraform%e8%bf%9b%e8%a1%8c%e7%ae%a1%e7%90%86\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49238","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=49238"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49238\/revisions"}],"predecessor-version":[{"id":59625,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/49238\/revisions\/59625"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=49238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=49238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=49238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}