{"id":458,"date":"2022-09-29T19:00:23","date_gmt":"2022-09-29T10:00:23","guid":{"rendered":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/?p=458"},"modified":"2022-09-29T19:00:24","modified_gmt":"2022-09-29T10:00:24","slug":"terraform%e3%81%a7aws%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%8b%e3%82%89lambda%e3%82%92%e5%91%bc%e3%81%b3%e5%87%ba%e3%81%99%e9%9a%9b%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9","status":"publish","type":"post","link":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/458\/","title":{"rendered":"Terraform\u3067AWS\u30ea\u30bd\u30fc\u30b9\u304b\u3089Lambda\u3092\u547c\u3073\u51fa\u3059\u969b\u306e\u6ce8\u610f\u70b9"},"content":{"rendered":"\n<p>\u66f4\u65b0\u65e5\u4ed8\uff1a2022\u5e748\u670831\u65e5<\/p>\n\n\n\n<p>\u3053\u3093\u306b\u3061\u306f\u3002<span style=\"border-bottom: solid 3px #4169e1;\">\u904b\u7528\u958b\u767a\u30b0\u30eb\u30fc\u30d7\u306e\u6728\u6751<\/span>\u3067\u3059\u3002\u4eca\u56de\u306fTerraform\u3067AWS\u30ea\u30bd\u30fc\u30b9\u304b\u3089Lambda\u3092\u547c\u3073\u51fa\u3059\u969b\u306e\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u8a71\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">aws_lambda_permission\u3092\u5fd8\u308c\u306a\u3044\u3088\u3046\u306b\u3057\u3088\u3046<\/h2>\n\n\n\n<p>Terraform\u3067\u306f<a href=\"https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/4.27.0\/docs\/resources\/lambda_permission\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>aws_lambda_permission<\/strong><\/a>\u3092\u8a18\u8ff0\u3057\u3066\u304a\u304b\u306a\u3044\u3068\u3001EventBridge\u3084SNS\u3001S3\u306a\u3069\u304b\u3089Lambda\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u308c\u306faws_lambda_function\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3082\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u81ea\u5206\u304cTerraform\u3092\u4f7f\u3063\u3066\u3044\u3066\u3001\u305f\u307e\u306baws_lambda_permission\u3092\u8a18\u8ff0\u3057\u5fd8\u308c\u308b\u3053\u3068\u304c\u3042\u3063\u305f\u306e\u3067\u3001\u4eca\u56de\u8a18\u4e8b\u3068\u3057\u3066\u307e\u3068\u3081\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/4.27.0\/docs\/resources\/lambda_function\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u304b\u3089\u306e\u5f15\u7528<\/h6>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>To give an external source (like an EventBridge Rule, SNS, or S3) permission to access the Lambda function, use the<strong>&nbsp;<a href=\"https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/4.27.0\/docs\/resources\/lambda_permission\" target=\"_blank\" rel=\"noreferrer noopener\">aws_lambda_permission<\/a>&nbsp;<\/strong>resource. See<strong>&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/intro-permission-model.html\" target=\"_blank\" rel=\"noreferrer noopener\">Lambda Permission Model<\/a><\/strong>&nbsp;for more details. On the other hand, the&nbsp;<code>role<\/code>&nbsp;argument of this resource is the function&#8217;s execution role for identity and access to AWS services and resources.<\/p><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">aws_lambda_permission\u304c\u7121\u304f\u3066\u3082\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u3066\u3057\u307e\u3046<\/h2>\n\n\n\n<p>aws_lambda_permission\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u3001terraform apply\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30a8\u30e9\u30fc\u306b\u306a\u3089\u305a\u30c7\u30d7\u30ed\u30a4\u304c\u5b8c\u4e86\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306e\u3088\u3046\u306bLambda\u3068EventBridge\u3092\u8a18\u8ff0\u3057\u305f\u5834\u5408\u3001\u554f\u984c\u306a\u304f\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001EventBridge\u3067\u8a2d\u5b9a\u3057\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u6642\u523b\u306b\u306a\u3063\u3066\u3082Lambda\u306f\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">aws_lambda_permission\u3092\u8a18\u8ff0\u3057\u306a\u3044tf\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b<\/h6>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"aws_cloudwatch_event_rule\" \"test_event_bridge\" {\n  name                = \"test_event_bridge\"\n  schedule_expression = \"cron(0 1 * * ? *)\"\n}\n\nresource \"aws_cloudwatch_event_target\" \"test_event_bridge_target\" {\n  rule = aws_cloudwatch_event_rule.test_event_bridge.name\n  arn  = aws_lambda_function.test_lambda.arn\n}\n\nresource \"aws_iam_role\" \"test_iam_for_lambda\" {\n  name = \"test_iam_for_lambda\"\n\n  assume_role_policy = &lt;&lt;EOF\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": &#91;\n    {\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      },\n      \"Effect\": \"Allow\",\n      \"Sid\": \"\"\n    }\n  ]\n}\nEOF\n}\n\nresource \"aws_lambda_function\" \"test_lambda\" {\n  function_name = \"test_lambda\"\n  role          = aws_iam_role.test_iam_for_lambda.arn\n  handler       = \"src\/test_lambda.lambda_handler\"\n  runtime       = \"python3.9\"\n  architectures = &#91;\"x86_64\"]\n  filename      = \"lambda\/function.zip\"\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u78ba\u8a8d\u3059\u308b<\/h2>\n\n\n\n<p>aws_lambda_permission\u304c\u8a18\u8ff0\u3055\u308c\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u30c7\u30d7\u30ed\u30a4\u3057\u305f\u5834\u5408\u3001AWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u3067Lambda\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3001\u30c8\u30ea\u30ac\u30fc\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"514\" src=\"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-1-1024x514.png\" alt=\"\" class=\"wp-image-569\" srcset=\"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-1-1024x514.png 1024w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-1-300x151.png 300w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-1-768x386.png 768w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-1.png 1247w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>\u5148\u307b\u3069\u306etf\u30d5\u30a1\u30a4\u30eb\u306baws_lambda_permission\u3092\u8ffd\u8a18\u3057\u3066terraform apply\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001Lambda\u306e\u30c8\u30ea\u30ac\u30fc\u3068\u3057\u3066EventBridge\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resource \"aws_lambda_permission\" \"test_lambda_permission\" {\n  action        = \"lambda:InvokeFunction\"\n  function_name = aws_lambda_function.test_lambda.function_name\n  principal     = \"events.amazonaws.com\"\n  source_arn    = aws_cloudwatch_event_rule.test_event_bridge.arn\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-2-1024x519.png\" alt=\"\" class=\"wp-image-570\" srcset=\"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-2-1024x519.png 1024w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-2-300x152.png 300w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-2-768x389.png 768w, https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-content\/uploads\/2022\/08\/image-2.png 1236w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306bAWS\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u78ba\u8a8d\u3059\u308c\u3070\u3001aws_lambda_permission\u304c\u6b63\u3057\u304f\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306f\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>\u4eca\u56de\u306fTerraform\u3067AWS\u30ea\u30bd\u30fc\u30b9\u304b\u3089Lambda\u3092\u547c\u3073\u51fa\u3059\u969b\u306e\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u3001\u5185\u5bb9\u3068\u3057\u3066\u306f\u7c21\u5358\u306a\u3053\u3068\u3067\u3059\u304c\u3001\u6cb9\u65ad\u3057\u3066\u3044\u308b\u3068aws_lambda_permission\u306e\u8a18\u8ff0\u3092\u5fd8\u308c\u3066\u3057\u307e\u3046\u3053\u3068\u3082\u3042\u308b\u304b\u3068\u601d\u3044\u3001\u8a18\u4e8b\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002Terraform\u306e\u30c7\u30d7\u30ed\u30a4\u304c\u554f\u984c\u306a\u304f\u5b8c\u4e86\u3057\u3066\u3044\u3066\u3082\u60f3\u5b9a\u3057\u305f\u52d5\u4f5c\u304c\u3067\u304d\u3066\u3044\u306a\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u3001\u52d5\u4f5c\u78ba\u8a8d\u7b49\u5b9f\u65bd\u3059\u308b\u3088\u3046\u306b\u6c17\u3092\u4ed8\u3051\u307e\u3057\u3087\u3046\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"\u66f4\u65b0\u65e5\u4ed8\uff1a2022\u5e748\u670831\u65e5 \u3053\u3093\u306b\u3061\u306f\u3002\u904b\u7528\u958b\u767a\u30b0\u30eb\u30fc\u30d7\u306e\u6728\u6751\u3067\u3059\u3002\u4eca\u56de\u306fTerraform\u3067AWS\u30ea\u30bd\u30fc\u30b9\u304b\u3089Lambda\u3092\u547c\u3073\u51fa\u3059\u969b\u306e\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u8a71\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002 aws_lambda_permission [&hellip;]","protected":false},"author":18,"featured_media":106,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[1],"tags":[19,18],"class_list":["post-458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-categry-cloud","tag-aws","tag-terraform"],"_links":{"self":[{"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/posts\/458"}],"collection":[{"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/comments?post=458"}],"version-history":[{"count":12,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":984,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/posts\/458\/revisions\/984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/media\/106"}],"wp:attachment":[{"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/media?parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/categories?post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/symphonict.nesic.co.jp\/tech-blog\/wp-json\/wp\/v2\/tags?post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}