{"id":48870,"date":"2022-11-01T14:10:10","date_gmt":"2023-12-02T02:33:10","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/"},"modified":"2024-04-28T22:27:52","modified_gmt":"2024-04-28T14:27:52","slug":"%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/","title":{"rendered":"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e"},"content":{"rendered":"<p>\u3010\u4e2a\u4eba\u5907\u5fd8\u5f55\u3011\u7b80\u5355\u8bbe\u7f6e\uff1a\u4eceLambda\u5411Slack\u53d1\u9001\u6d88\u606f\u3002<\/p>\n<h1>\u7b80\u800c\u8a00\u4e4b<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d87eb913a08637a6c184b\/2-0.png\" alt=\"image.png\" \/><\/div>\n<h1>Terraform\u914d\u7f6e<\/h1>\n<ul class=\"post-ul\">Terraform\u5b9f\u884c\u74b0\u5883 \u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210 (MacOS)<\/ul>\n<pre class=\"post-pre\"><code>\r\n\u251c\u2500\u2500 .terraform\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 plugins\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 darwin_amd64\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 terraform-provider-aws_v2.48.0_x4\r\n\u251c\u2500\u2500 post-slack.tf\r\n\u2514\u2500\u2500 source_code\r\n\u00a0\u00a0\u00a0 \u2514\u2500\u2500 post-slack\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u2514\u2500\u2500 main.py\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Lambda\u95a2\u6570\u3092\u4f5c\u6210\u3059\u308b tf \u30d5\u30a1\u30a4\u30eb<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">data<\/span> <span class=\"s2\">\"archive_file\"<\/span> <span class=\"s2\">\"post-slack\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">type<\/span>        <span class=\"p\">=<\/span> <span class=\"s2\">\"zip\"<\/span>\r\n  <span class=\"nx\">source_dir<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\".\/source_code\/post-slack\"<\/span>\r\n  <span class=\"nx\">output_path<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\".\/source_code\/post-slack.zip\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_lambda_function\"<\/span> <span class=\"s2\">\"post-slack\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">filename<\/span>         <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${data<\/span><span class=\"p\">.<\/span><span class=\"nx\">archive_file<\/span><span class=\"p\">.<\/span><span class=\"nx\">post-slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">output_path<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"nx\">function_name<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"post-slack\"<\/span>\r\n  <span class=\"nx\">role<\/span>             <span class=\"p\">=<\/span> <span class=\"s2\">\"arn:aws:iam::\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b:role\/service-role\/lambda-basic-execution\"<\/span>\r\n  <span class=\"nx\">handler<\/span>          <span class=\"p\">=<\/span> <span class=\"s2\">\"main.lambda_handler\"<\/span>\r\n  <span class=\"nx\">source_code_hash<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${data<\/span><span class=\"p\">.<\/span><span class=\"nx\">archive_file<\/span><span class=\"p\">.<\/span><span class=\"nx\">post-slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">output_base64sha256<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"nx\">runtime<\/span>          <span class=\"p\">=<\/span> <span class=\"s2\">\"python3.8\"<\/span>\r\n  <span class=\"nx\">memory_size<\/span>      <span class=\"p\">=<\/span> <span class=\"mi\">128<\/span>\r\n  <span class=\"nx\">timeout<\/span>          <span class=\"p\">=<\/span> <span class=\"mi\">300<\/span>\r\n    <span class=\"nx\">environment<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">variables<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">SLACK_CHANNEL<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"#hogehoge\"<\/span>\r\n      <span class=\"nx\">SLACK_TEXT<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Slack\u901a\u77e5\u30c6\u30b9\u30c8\"<\/span>\r\n      <span class=\"nx\">SLACK_USER_NAME<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"\u540d\u7121\u3057\"<\/span>\r\n      <span class=\"nx\">SLACK_ICON_EMOJI<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\":fearful:\"<\/span>\r\n      <span class=\"nx\">SLACK_COLOR<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"warning\"<\/span>\r\n      <span class=\"nx\">SLACK_WEBHOOK_URL<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"https:\/\/hooks.slack.com\/services\/\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\/\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\/\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\u203b\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Lambda \u306b\u5272\u308a\u5f53\u3066\u308b IAM\u30ed\u30fc\u30eb<\/ul>\n<pre class=\"post-pre\"><code><span class=\"k\">data<\/span> <span class=\"s2\">\"aws_iam_policy_document\"<\/span> <span class=\"s2\">\"lambda-assume-role-policy\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">statement<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">actions<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"sts:AssumeRole\"<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"nx\">principals<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">type<\/span>        <span class=\"p\">=<\/span> <span class=\"s2\">\"Service\"<\/span>\r\n      <span class=\"nx\">identifiers<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"lambda.amazonaws.com\"<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_iam_role\"<\/span> <span class=\"s2\">\"role_lambda-basic-execution\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>               <span class=\"p\">=<\/span> <span class=\"s2\">\"lambda-basic-execution\"<\/span>\r\n  <span class=\"nx\">assume_role_policy<\/span> <span class=\"p\">=<\/span> <span class=\"k\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">aws_iam_policy_document<\/span><span class=\"p\">.<\/span><span class=\"nx\">lambda<\/span><span class=\"err\">-<\/span><span class=\"nx\">assume<\/span><span class=\"err\">-<\/span><span class=\"nx\">role<\/span><span class=\"err\">-<\/span><span class=\"nx\">policy<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span>\r\n  <span class=\"nx\">path<\/span>               <span class=\"p\">=<\/span> <span class=\"s2\">\"\/service-role\/\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_iam_role_policy_attachment\"<\/span> <span class=\"s2\">\"AWSLambdaBasicExecutionRole\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">role<\/span>       <span class=\"p\">=<\/span> <span class=\"nx\">aws_iam_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">role_lambda<\/span><span class=\"err\">-<\/span><span class=\"nx\">basic<\/span><span class=\"err\">-<\/span><span class=\"nx\">execution<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span>\r\n  <span class=\"nx\">policy_arn<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"arn:aws:iam::aws:policy\/service-role\/AWSLambdaBasicExecutionRole\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Slack API \u3078\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3059\u308b python \u30b3\u30fc\u30c9<\/ul>\n<pre class=\"post-pre\"><code><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">json<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"nn\">urllib.request<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Request<\/span><span class=\"p\">,<\/span> <span class=\"n\">urlopen<\/span>\r\n\r\n<span class=\"n\">slackChannel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_CHANNEL'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"n\">slackUserName<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_USER_NAME'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"n\">slackText<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_TEXT'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"n\">slackWebhookURL<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_WEBHOOK_URL'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"n\">slackIconEmoji<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_ICON_EMOJI'<\/span><span class=\"p\">]<\/span>\r\n<span class=\"n\">slackColor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"p\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s\">'SLACK_COLOR'<\/span><span class=\"p\">]<\/span>\r\n\r\n<span class=\"k\">def<\/span> <span class=\"nf\">lambda_handler<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"p\">,<\/span> <span class=\"n\">context<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"n\">post_slack<\/span><span class=\"p\">()<\/span>\r\n\r\n<span class=\"k\">def<\/span> <span class=\"nf\">post_slack<\/span><span class=\"p\">():<\/span>\r\n    <span class=\"n\">message<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"s\">'channel'<\/span><span class=\"p\">:<\/span> <span class=\"n\">slackChannel<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'username'<\/span><span class=\"p\">:<\/span> <span class=\"n\">slackUserName<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'text'<\/span><span class=\"p\">:<\/span> <span class=\"n\">slackText<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'icon_emoji'<\/span><span class=\"p\">:<\/span> <span class=\"n\">slackIconEmoji<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'attachments'<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"p\">{<\/span>\r\n                <span class=\"s\">\"color\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">slackColor<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s\">\"text\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\u306a\u3093\u3066\u65e5\u3060\u30fb\u30fb\"<\/span>\r\n            <span class=\"p\">}<\/span>\r\n        <span class=\"p\">]<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"n\">data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"p\">.<\/span><span class=\"n\">dumps<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">).<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s\">'utf-8'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">request<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Request<\/span><span class=\"p\">(<\/span><span class=\"n\">slackWebhookURL<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"n\">urlopen<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">).<\/span><span class=\"n\">read<\/span><span class=\"p\">()<\/span>\r\n<\/code><\/pre>\n<h1>\u8fd0\u884cterraform plan<\/h1>\n<p>\u5982\u679c\u5728\u9996\u6b21\u8fd0\u884cterraform plan\u65f6\u9047\u5230\u4ee5\u4e0b\u9519\u8bef\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<pre class=\"post-pre\"><code>$ terraform plan<\/code><\/pre>\n<pre class=\"post-pre\"><code>\r\nError: Could not satisfy plugin requirements\r\n\r\n\r\nPlugin reinitialization required. Please run \"terraform init\".\r\n\r\nPlugins are external binaries that Terraform uses to access and manipulate\r\nresources. The configuration provided requires plugins which can't be located,\r\ndon't satisfy the version constraints, or are otherwise incompatible.\r\n\r\nTerraform automatically discovers provider requirements from your\r\nconfiguration, including providers used in child modules. To see the\r\nrequirements and constraints from each module, run \"terraform providers\".\r\n\r\n\r\nError: provider.archive: no suitable version installed\r\n  version requirements: \"(any version)\"\r\n  versions installed: none\r\n<\/code><\/pre>\n<p>\u6267\u884c terraform init<\/p>\n<pre class=\"post-pre\"><code>\r\n$ terraform init\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\r\nInitializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Checking for available provider plugins...\r\n- Downloading plugin for provider \"archive\" (hashicorp\/archive) 2.0.0...\r\n\r\nThe following providers do not have any version constraints in configuration,\r\nso the latest version was installed.\r\n\r\nTo prevent automatic upgrades to new major versions that may contain breaking\r\nchanges, it is recommended to add version = \"...\" constraints to the\r\ncorresponding provider blocks in configuration, with the constraint strings\r\nsuggested below.\r\n\r\n* provider.archive: version = \"~&gt; 2.0\"\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>terraform-provider-aws_v2.48.0_x4 \u5df2\u7ecf\u4e0b\u8f7d\u5230\u63d2\u4ef6\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code>\r\n\u251c\u2500\u2500 .terraform\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 plugins\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 darwin_amd64\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u251c\u2500\u2500 terraform-provider-archive_v2.0.0_x5\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 terraform-provider-aws_v2.48.0_x4\r\n<\/code><\/pre>\n<h1>\u6267\u884c Terraform \u5e94\u7528<\/h1>\n<pre class=\"post-pre\"><code>\r\n$ terraform apply\r\n<\/code><\/pre>\n<p>\u8fd0\u884c\u540e\uff0cpost-slack.zip \u5c06\u5728 source_code \u76ee\u5f55\u4e2d\u751f\u6210<\/p>\n<pre class=\"post-pre\"><code>\r\n\u2514\u2500\u2500 source_code\r\n\u00a0\u00a0\u00a0 \u251c\u2500\u2500 post-slack\r\n\u00a0\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.py\r\n\u00a0\u00a0\u00a0 \u2514\u2500\u2500 post-slack.zip\r\n<\/code><\/pre>\n<h1>\u5728 AWS \u7ba1\u7406\u63a7\u5236\u53f0\u4e0a\u67e5\u770b<\/h1>\n<p>Lambda \u51fd\u6570 &#8220;post-slack&#8221; \u7684\u914d\u7f6e<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d87eb913a08637a6c184b\/27-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u8fdb\u884c\u6d4b\u8bd5<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d87eb913a08637a6c184b\/29-5.png\" alt=\"image.png\" \/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u3010\u4e2a\u4eba\u5907\u5fd8\u5f55\u3011\u7b80\u5355\u8bbe\u7f6e\uff1a\u4eceLambda\u5411Slack\u53d1\u9001\u6d88\u606f\u3002 \u7b80\u800c\u8a00\u4e4b Terraform\u914d\u7f6e Terrafo [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48870","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\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e - 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\u7528-terraform-\u521b\u5efa\u4ece-aws-lambda-python3-8-\u53d1\u9001\u6d88\u606f\u5230-slack-\u7684\u914d\u7f6e\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e\" \/>\n<meta property=\"og:description\" content=\"\u3010\u4e2a\u4eba\u5907\u5fd8\u5f55\u3011\u7b80\u5355\u8bbe\u7f6e\uff1a\u4eceLambda\u5411Slack\u53d1\u9001\u6d88\u606f\u3002 \u7b80\u800c\u8a00\u4e4b Terraform\u914d\u7f6e Terrafo [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-terraform-\u521b\u5efa\u4ece-aws-lambda-python3-8-\u53d1\u9001\u6d88\u606f\u5230-slack-\u7684\u914d\u7f6e\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-02T02:33:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T14:27:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d87eb913a08637a6c184b\/2-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \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%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/\",\"name\":\"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-02T02:33:10+00:00\",\"dateModified\":\"2024-04-28T14:27:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e\"}]},{\"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e - 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\u7528-terraform-\u521b\u5efa\u4ece-aws-lambda-python3-8-\u53d1\u9001\u6d88\u606f\u5230-slack-\u7684\u914d\u7f6e\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e","og_description":"\u3010\u4e2a\u4eba\u5907\u5fd8\u5f55\u3011\u7b80\u5355\u8bbe\u7f6e\uff1a\u4eceLambda\u5411Slack\u53d1\u9001\u6d88\u606f\u3002 \u7b80\u800c\u8a00\u4e4b Terraform\u914d\u7f6e Terrafo [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528-terraform-\u521b\u5efa\u4ece-aws-lambda-python3-8-\u53d1\u9001\u6d88\u606f\u5230-slack-\u7684\u914d\u7f6e\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-02T02:33:10+00:00","article_modified_time":"2024-04-28T14:27:52+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d87eb913a08637a6c184b\/2-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/","name":"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-02T02:33:10+00:00","dateModified":"2024-04-28T14:27:52+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528 Terraform \u521b\u5efa\u4ece AWS Lambda Python3.8 \u53d1\u9001\u6d88\u606f\u5230 Slack \u7684\u914d\u7f6e"}]},{"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8-terraform-%e5%88%9b%e5%bb%ba%e4%bb%8e-aws-lambda-python3-8-%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e5%88%b0-slack-%e7%9a%84%e9%85%8d%e7%bd%ae%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\/48870","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48870"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48870\/revisions"}],"predecessor-version":[{"id":61669,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48870\/revisions\/61669"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}