{"id":1210,"date":"2024-09-09T11:25:51","date_gmt":"2024-09-09T11:25:51","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2024\/09\/09\/automate-aws-deployments-with-hcp-terraform-and-github-actions\/"},"modified":"2024-09-09T11:25:51","modified_gmt":"2024-09-09T11:25:51","slug":"automate-aws-deployments-with-hcp-terraform-and-github-actions","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2024\/09\/09\/automate-aws-deployments-with-hcp-terraform-and-github-actions\/","title":{"rendered":"Automate AWS deployments with HCP Terraform and GitHub Actions"},"content":{"rendered":"<p>Using GitHub Actions with HashiCorp Terraform to automate infrastructure as code workflows directly from version control is a popular early path for many developer teams. However, this setup can make it difficult to stop configuration drift as your infrastructure codebase grows. <\/p>\n<p>Rather than running Terraform on the GitHub Actions instance runner, it\u2019s much easier and safer to run configurations remotely via HCP Terraform. This ensures that the creation, modification, and deletion of Terraform resources is handled on a managed cloud platform rather than on the GitHub Actions runner. HCP Terraform has many more systems and safeguards for team Terraform management and <a href=\"https:\/\/www.hashicorp.com\/resources\/how-can-i-prevent-configuration-drift\">drift prevention<\/a>.<\/p>\n<p>This post shows how to use HCP Terraform to define AWS infrastructure and GitHub Actions to automate infrastructure changes. You\u2019ll learn how to set up a GitHub Actions workflow that interacts with HCP Terraform to automate the deployment of AWS infrastructure, such as Amazon EC2 instances.<\/p>\n<h2>Workflow overview<\/h2>\n<p>For this tutorial you can use your own Terraform configuration in a GitHub repository, or use this <a href=\"https:\/\/github.com\/chefgs\/terraform_repo\/tree\/main\/tfcloud_samples\">example repository<\/a>. The example repository\u2019s GitHub Actions include a workflow that creates the AWS resources defined in the repository. Whenever the repository trigger event happens on the main branch, it runs the workflow defined in the .github\/workflows directory. It then performs the infrastructure creation or management in AWS. The figure below outlines the interaction between the GitHub repository, Actions, HCP Terraform, and AWS.<\/p>\n<p>Here\u2019s how to implement this workflow.<\/p>\n<h2>Prerequisites<\/h2>\n<p>Ensure you have the following:<\/p>\n<p>An AWS account with necessary permissions to create resources.<br \/>\nA HCP Terraform account, with a workspace set up for this tutorial.<br \/>\nA GitHub account, with a repository for Terraform configuration files.<br \/>\nThe Terraform CLI installed on your local machine for testing purposes.<\/p>\n<p>Follow the following steps below to add AWS credentials in the HCP Terraform workspace and the TF_API_TOKEN in GitHub Actions secrets.<\/p>\n<h2>Add AWS credentials to HCP Terraform<\/h2>\n<p>To allow HCP Terraform to deploy resources in AWS, you must <a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/cloud\/dynamic-credentials\">securely provide<\/a> AWS credentials. Set the AWS access key and secret access key environment variables in your HCP Terraform workspace, ensuring that Terraform runs have the necessary permissions.<\/p>\n<p>Please follow the steps mentioned in the <a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/cloud-get-started\/cloud-create-variable-set\">official documentation<\/a> to add the AWS credentials into HCP Terraform.<\/p>\n<h2>Add HCP Terraform token to GitHub Actions<\/h2>\n<p>Fetch the TF_API_TOKEN by following <a href=\"https:\/\/developer.hashicorp.com\/terraform\/cloud-docs\/users-teams-organizations\/api-tokens\">instructions available in the HCP Terraform documentation<\/a>. This example creates a user API token for the GitHub Action workflow.<\/p>\n<p>Open the GitHub repository with the Terraform configuration.<\/p>\n<p>Click on &#8220;Settings&#8221; in the repository menu. From the left sidebar, select &#8220;Secrets&#8221; and then choose &#8220;Actions&#8221;.<\/p>\n<p>To add a new repository secret, click on &#8220;New repository secret&#8221;. Name the secret TF_API_TOKEN and add the HCP Terraform API token to the \u201cValue\u201d field. Click &#8220;Add secret&#8221; to save the new secret.<\/p>\n<p>By following these steps, you will securely provide your AWS credentials to HCP Terraform and also provide the HCP Terraform API token to GitHub Actions, enabling automated infrastructure deployment through a GitHub Actions workflow.<\/p>\n<h2>Create the GitHub Actions workflow<\/h2>\n<p>After setting up the credentials, add a GitHub Actions workflow to your repository. The example repository uses a <a href=\"https:\/\/github.com\/chefgs\/terraform_repo\/blob\/main\/.github\/workflows\/tf_cloud_aws.yml\">workflow<\/a> YAML file defining one job with four steps to initialize, plan, apply, and destroy Terraform. This workflow uses the <a href=\"https:\/\/github.com\/hashicorp\/setup-terraform\">HashiCorp official marketplace actions<\/a> for performing the Terraform command operations.<\/p>\n<p># This workflow will create AWS resource using HCP Terraform<br \/>\n# It is reusable workflow that can be called in other workflows<\/p>\n<p>name: AWS Infra Creation Using in HCP Terraform<\/p>\n<p>on:<br \/>\n workflow_call:<br \/>\n   secrets:<br \/>\n       TF_API_TOKEN:<br \/>\n           required: true<br \/>\n push:<br \/>\n   branches: [ &#8220;main&#8221; ]<br \/>\n pull_request:<br \/>\n   branches: [ &#8220;main&#8221; ]<br \/>\n workflow_dispatch:<\/p>\n<p>env:<br \/>\n tfcode_path: tfcloud_samples\/amazon_ec2<br \/>\n tfc_organisation: demo-tf-org # Replace it with your TFC Org<br \/>\n tfc_hostname: app.terraform.io<br \/>\n tfc_workspace: demo-tf-workspace # Replace it with your TFC Workspace<\/p>\n<p>jobs:<br \/>\n aws_tfc_job:<br \/>\n   name: Create AWS Infra Using TFC<\/p>\n<p>   runs-on: ubuntu-latest<\/p>\n<p>   steps:<br \/>\n   &#8211; name: Checkout tf code in runner environment<br \/>\n     uses: actions\/checkout@v3.5.2<\/p>\n<p>   # Configure Terraform cloud API token, since we are using Remote backend option of Terraform cloud in AWS code<br \/>\n   &#8211; name: Setup Terraform CLI<br \/>\n     uses: hashicorp\/setup-terraform@v2.0.2<br \/>\n     with:<br \/>\n       cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}<\/p>\n<p>   # Add the AWS Creds as ENV variable in HCP Terraform workspace, since the tf run happens in HCP Terraform environment<\/p>\n<p>   # Invoke the Terraform commands<br \/>\n   &#8211; name: Terraform init and validate<br \/>\n     run: |<br \/>\n       echo `pwd`<br \/>\n       echo &#8220;** Running Terraform Init**&#8221;<br \/>\n       terraform init<\/p>\n<p>       echo &#8220;** Running Terraform Validate**&#8221;<br \/>\n       terraform validate<br \/>\n     working-directory: ${{ env.tfcode_path }}<\/p>\n<p>   &#8211; name: Terraform Plan<br \/>\n     uses: hashicorp\/tfc-workflows-github\/actions\/create-run@v1.3.0<br \/>\n     id: run<br \/>\n     with:<br \/>\n       workspace: ${{ env.tfc_workspace }}<br \/>\n       plan_only: true<br \/>\n       message: &#8220;Plan Run from GitHub Actions&#8221;<br \/>\n       ## Can specify hostname,token,organization as direct inputs<br \/>\n       hostname: ${{ env.tfc_hostname }}<br \/>\n       token: ${{ secrets.TF_API_TOKEN }}<br \/>\n       organization: ${{ env.tfc_organisation }}<\/p>\n<p>   &#8211; name: Terraform Plan Output<br \/>\n     uses: hashicorp\/tfc-workflows-github\/actions\/plan-output@v1.3.0<br \/>\n     id: plan-output<br \/>\n     with:<br \/>\n       hostname: ${{ env.tfc_hostname }}<br \/>\n       token: ${{ secrets.TF_API_TOKEN }}<br \/>\n       organization: ${{ env.tfc_organisation }}<br \/>\n       plan: ${{ steps.run.outputs.plan_id }}<\/p>\n<p>   &#8211; name: Reference Plan Output<br \/>\n     run: |<br \/>\n       echo &#8220;Plan status: ${{ steps.plan-output.outputs.plan_status }}&#8221;<br \/>\n       echo &#8220;Resources to Add: ${{ steps.plan-output.outputs.add }}&#8221;<br \/>\n       echo &#8220;Resources to Change: ${{ steps.plan-output.outputs.change }}&#8221;<br \/>\n       echo &#8220;Resources to Destroy: ${{ steps.plan-output.outputs.destroy }}&#8221;<\/p>\n<p> # Once the user verifies the Terraform Plan, the user can run the Terraform Apply and Destroy commands<br \/>\n apply_terraform_plan:<br \/>\n     needs: aws_tfc_job<br \/>\n     if: github.event_name == &#8216;workflow_dispatch&#8217;<br \/>\n     runs-on: ubuntu-latest<br \/>\n     steps:<br \/>\n     &#8211; name: Checkout<br \/>\n       uses: actions\/checkout@v3.5.2<br \/>\n     &#8211; name: Setup Terraform CLI<br \/>\n       uses: hashicorp\/setup-terraform@v2.0.2<br \/>\n       with:<br \/>\n         cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}<\/p>\n<p>     # Invoke the Terraform commands<br \/>\n     &#8211; name: Terraform init and validate<br \/>\n       run: |<br \/>\n         echo `pwd`<br \/>\n         echo &#8220;** Running Terraform Init**&#8221;<br \/>\n         terraform init<\/p>\n<p>         echo &#8220;** Running Terraform Validate**&#8221;<br \/>\n         terraform validate<br \/>\n       working-directory: ${{ env.tfcode_path }}<\/p>\n<p>     &#8211; name: Terraform Apply<br \/>\n       run: echo &#8220;** Running Terraform Apply**&#8221;; terraform apply -auto-approve<br \/>\n       working-directory: ${{ env.tfcode_path }}<br \/>\n      &#8211; name: Terraform Destroy<br \/>\n       run: echo &#8220;** Running Terraform Destroy**&#8221;; terraform destroy -auto-approve<br \/>\n       working-directory: ${{ env.tfcode_path }}<\/p>\n<p>Let\u2019s review each section of the workflow.<\/p>\n<h3>Define the triggers<\/h3>\n<p>When you push commits or open a pull request on the main branch, the workflow initializes, plans, and applies Terraform. This workflow can be triggered by a:<\/p>\n<p>workflow_call: This allows the workflow to be reused in other workflows. It requires the TF_API_TOKEN secret.<br \/>\npush: Triggers the workflow when there is a push to the main branch.<br \/>\npull_request: Triggers the workflow when a pull request is made to the main branch.<br \/>\nworkflow_dispatch: Allows the GitHub Actions interface to manually trigger the workflow.<\/p>\n<p># This workflow will create AWS resource using HCP Terraform<br \/>\n# It is reusable workflow that can be called in other workflows<\/p>\n<p>name: AWS Infra Creation Using in HCP Terraform<\/p>\n<p>on:<br \/>\n workflow_call:<br \/>\n   secrets:<br \/>\n       TF_API_TOKEN:<br \/>\n           required: true<br \/>\n push:<br \/>\n   branches: [ &#8220;main&#8221; ]<br \/>\n pull_request:<br \/>\n   branches: [ &#8220;main&#8221; ]<br \/>\n workflow_dispatch:<\/p>\n<h3>Configure environment variables<\/h3>\n<p>Set the tfcode_path environment variable to specify the location of your Terraform configuration files within the repository. Include the HCP Terraform organization, workspace, and hostname for future jobs.<\/p>\n<p>env:<br \/>\n tfcode_path: tfcloud_samples\/amazon_ec2 # Directory in which the tf files are stored<br \/>\n tfc_organisation: demo-tf-org # Replace it with your TFC Org<br \/>\n tfc_hostname: app.terraform.io<br \/>\n tfc_workspace: demo-tf-workspace # Replace it with your TFC Workspace<\/p>\n<h3>Define jobs<\/h3>\n<p>In the GitHub Actions workflow, define each automation step inside the jobs block. The job consists of job name and workflow runner instance definition in the runs-on block. This workflow uses the ubuntu-latest instance runner.<\/p>\n<p>The first step in the apply_terraform_plan is the actions\/checkout entry, which clones the repository into the GitHub Actions runner. This makes the Terraform configuration files available for subsequent steps.<\/p>\n<p>jobs:<br \/>\n aws_tfc_job:<br \/>\n   name: Create AWS Infra Using HCPTF<\/p>\n<p>   runs-on: ubuntu-latest<\/p>\n<p>   steps:<br \/>\n   &#8211; name: Checkout tf code in runner environment<br \/>\n     uses: actions\/checkout@v3.5.2<\/p>\n<p>In the second step, use the hashicorp\/setup-terraform pre-built action to configure the Terraform CLI in the runner environment. It sets up the HCP Terraform API token (TF_API_TOKEN) for authentication. This token allows the Terraform CLI to communicate with HCP Terraform, enabling it to manage state, perform operations, and apply configurations in the context of the HCP Terraform workspace.<\/p>\n<p>    &#8211; name: Setup Terraform CLI<br \/>\n      uses: hashicorp\/setup-terraform@v2.0.2<br \/>\n      with:<br \/>\n        cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}<\/p>\n<p>Next, initialize and validate Terraform. terraform init initializes the Terraform working directory by downloading necessary providers and initializing backends. If you\u2019re using HCP Terraform as the backend, this command configures the workspace and prepares it for operations. <\/p>\n<p>terraform validate checks the syntax and validity of the Terraform files, ensuring they are correctly formatted and logically sound. These commands run inside the working directory defined by env.tfcode_path, which contains the Terraform configuration.<\/p>\n<p>    &#8211; name: Terraform init and validate<br \/>\n      run: |<br \/>\n        echo `pwd`<br \/>\n        echo &#8220;** Running Terraform Init**&#8221;<br \/>\n        terraform init<\/p>\n<p>        echo &#8220;** Running Terraform Validate**&#8221;<br \/>\n        terraform validate<br \/>\n      working-directory: ${{ env.tfcode_path }}<\/p>\n<p>In general, you will want to review theterraform plan before applying to verify the changes Terraform will make. Use the hashicorp\/tfc-workflows-github\/actions\/create-run action to run a plan in HCP Terraform and export the plan using the plan_only attribute. Then, use the hashicorp\/tfc-workflows-github\/actions\/plan-output action to get the output of the Terraform plan using the plan_id from the previous step&#8217;s output. Finally, print the plan status and resource changes in the workflow\u2019s output.<\/p>\n<p>   &#8211; name: Terraform Plan<br \/>\n     uses: hashicorp\/tfc-workflows-github\/actions\/create-run@v1.3.0<br \/>\n     id: run<br \/>\n     with:<br \/>\n       workspace: ${{ env.tfc_workspace }}<br \/>\n       plan_only: true<br \/>\n       message: &#8220;Plan Run from GitHub Actions&#8221;<br \/>\n       hostname: ${{ env.tfc_hostname }}<br \/>\n       token: ${{ secrets.TF_API_TOKEN }}<br \/>\n       organization: ${{ env.tfc_organisation }}<\/p>\n<p>   &#8211; name: Terraform Plan Output<br \/>\n     uses: hashicorp\/tfc-workflows-github\/actions\/plan-output@v1.3.0<br \/>\n     id: plan-output<br \/>\n     with:<br \/>\n       hostname: ${{ env.tfc_hostname }}<br \/>\n       token: ${{ secrets.TF_API_TOKEN }}<br \/>\n       organization: ${{ env.tfc_organisation }}<br \/>\n       plan: ${{ steps.run.outputs.plan_id }}<\/p>\n<p>   &#8211; name: Reference Plan Output<br \/>\n     run: |<br \/>\n       echo &#8220;Plan status: ${{ steps.plan-output.outputs.plan_status }}&#8221;<br \/>\n       echo &#8220;Resources to Add: ${{ steps.plan-output.outputs.add }}&#8221;<br \/>\n       echo &#8220;Resources to Change: ${{ steps.plan-output.outputs.change }}&#8221;<br \/>\n       echo &#8220;Resources to Destroy: ${{ steps.plan-output.outputs.destroy }}&#8221;<\/p>\n<p>The workflow outputs the plan status and any resources to add, change, or destroy in its log.<\/p>\n<p>If the plan does not reflect the correct changes, fix the Terraform configuration to achieve the expected output. After verifying the plan in the previous job, manually trigger the workflow to run terraform apply. This command starts a run in the HCP Terraform workspace, where the actual infrastructure changes are made.<\/p>\n<p> apply_terraform_plan:<br \/>\n     needs: aws_tfc_job<br \/>\n     if: github.event_name == &#8216;workflow_dispatch&#8217;<br \/>\n     runs-on: ubuntu-latest<br \/>\n     steps:<br \/>\n     &#8211; name: Checkout<br \/>\n       uses: actions\/checkout@v3.5.2<br \/>\n     &#8211; name: Setup Terraform CLI<br \/>\n       uses: hashicorp\/setup-terraform@v2.0.2<br \/>\n       with:<br \/>\n         cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}<\/p>\n<p>     # Invoke the Terraform commands<br \/>\n     &#8211; name: Terraform init and validate<br \/>\n       run: |<br \/>\n         echo `pwd`<br \/>\n         echo &#8220;** Running Terraform Init**&#8221;<br \/>\n         terraform init<\/p>\n<p>         echo &#8220;** Running Terraform Validate**&#8221;<br \/>\n         terraform validate<br \/>\n       working-directory: ${{ env.tfcode_path }}<\/p>\n<p>     &#8211; name: Terraform Apply<br \/>\n       run: echo &#8220;** Running Terraform Apply**&#8221;; terraform apply -auto-approve<br \/>\n       working-directory: ${{ env.tfcode_path }}<\/p>\n<p>Optionally, you can add a terraform destroy step to clean up resources and avoid unnecessary costs. You can add this step in non-production or testing environments.<\/p>\n<p>    &#8211; name: Terraform Destroy<br \/>\n      run: |<br \/>\n        echo &#8220;** Running Terraform Destroy**&#8221;<br \/>\n        terraform destroy -auto-approve<br \/>\n      working-directory: ${{ env.tfcode_path }}<\/p>\n<h2>Setup review and further learning<\/h2>\n<p>This setup leverages the strengths of both platforms: GitHub Actions for CI\/CD automation and HCP Terraform for secure, collaborative infrastructure management. Integrating HCP Terraform with GitHub Actions provides a powerful, automated pipeline for deploying and managing AWS infrastructure. By leveraging these tools, teams can achieve more reliable and efficient infrastructure management, reduce manual errors, and ensure consistency across environments. <\/p>\n<p>HCP Terraform facilitates collaboration among team members ensuring that infrastructure changes are managed safely and efficiently. Platform teams can audit the runs in HCP Terraform while development teams can review runs in GitHub Actions.<\/p>\n<p>From a security perspective, HCP Terraform workspaces can be configured with environment variables, such as AWS credentials, or <a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/cloud\/dynamic-credentials\">dynamic credentials<\/a>. The GitHub Actions workflow does not directly handle the credentials, which minimizes the blast radius of compromised credentials through the workflow. HCP Terraform provides additional features like access controls, private module registry, and policy enforcement to ensure that infrastructure changes are secure and compliant with organizational policies. <\/p>\n<p>This guide has walked you through setting up a basic workflow, but the flexibility of both platforms allows for customization to fit your specific needs.<\/p>\n<p>For further questions on best practices, please refer to the GitHub Actions and HCP Terraform FAQs <a href=\"https:\/\/github.com\/chefgs\/terraform_repo\/blob\/main\/tfcloud_samples\/TFC_Workflow_BestPracticesFAQs.md\">available in this repository<\/a>. As mentioned before, this repository includes the full code example used in this post. For more information on GitHub Actions, review GitHub\u2019s <a href=\"https:\/\/docs.github.com\/en\/actions\">documentation<\/a>. To learn more about automating Terraform with GitHub Actions, review the <a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/automation\/github-actions\">official tutorial<\/a> on the HashiCorp Developer portal and the <a href=\"https:\/\/github.com\/hashicorp\/tfc-workflows-github\/tree\/main\/actions\">starter workflow templates<\/a> to use HCP Terraform with GitHub Actions.<\/p>\n<p><em>Saravanan Gnanaguru is a <a href=\"https:\/\/www.hashicorp.com\/ambassador\">HashiCorp Ambassador<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Using GitHub Actions with HashiCorp Terraform to automate infrastructure as code workflows directly from version control is a popular early [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1210","post","type-post","status-publish","format-standard","hentry","category-terraform"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/1210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=1210"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/1210\/revisions"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=1210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=1210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=1210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}