akshay-scaler
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# Script for Class 19- CFN Advance # **Agenda of the Day** - Introduction to AWS CloudFormation Designer - Writing CloudFormation Templates Using AWS Application Composer - Understanding Service Role, Stack Policy, Deletion Policy, and Termination Protection in CloudFormation - Implementing Custom Resources in AWS CloudFormation - Managing Multiple Deployments with AWS CloudFormation StackSets - Exploring Intrinsic Functions in AWS CloudFormation Templates - Working with Nested Stacks in AWS CloudFormation --- # Introduction to AWS CloudFormation Designer ### **What is AWS CloudFormation Designer?** - **AWS CloudFormation Designer** is a **visual tool** that helps you **model and visualize** your cloud infrastructure as code using AWS CloudFormation. - It provides a **drag-and-drop interface** to create and edit CloudFormation templates interactively. --- ### **Key Capabilities** - **Visual Modeling**: Design your infrastructure by dragging AWS resources onto a canvas. - **Template Editor**: View and modify the generated YAML/JSON CloudFormation code. - **Bidirectional Sync**: Changes in the diagram update the code and vice versa. - **Template Import**: Import existing templates to visualize and modify. - **Relationship Mapping**: Automatically shows how resources are connected. --- ### **Use Cases** - Rapid prototyping of CloudFormation templates - Visualizing complex infrastructures for better understanding - Teaching or demonstrating infrastructure-as-code concepts - Debugging or editing existing CloudFormation templates --- ### **Benefits** - No need to write templates from scratch - Easier for beginners to understand resource relationships - Saves time and reduces syntax errors - Integrated directly into the AWS Management Console --- # Writing CloudFormation Templates Using AWS Application Composer ### **What is AWS Application Composer?** - **AWS Application Composer** is a **visual builder tool** that simplifies the creation of **serverless applications** using **CloudFormation** or **AWS SAM templates**. - It provides a **drag-and-drop canvas** where you can connect and configure AWS services like Lambda, SQS, API Gateway, DynamoDB, and more. --- ### **How It Helps in Writing CloudFormation Templates** - **Visual Design**: Build your architecture visually without manually writing complex CloudFormation code. - **Automatic Template Generation**: As you add and configure services on the canvas, Application Composer **generates CloudFormation/SAM code** in real-time. - **YAML Template Export**: You can export the generated template and use it in your CI/CD pipelines or deploy via the AWS CLI or console. - **Modular Development**: Enables **modular and iterative development**, making it easier to build microservices. --- ### **Key Features** | Feature | Description | |--------------------------------|-----------------------------------------------------------------------------| | **Live YAML Preview** | View CloudFormation code side-by-side as you design your app | | **Drag-and-Drop Interface** | Add and connect AWS resources visually | | **Built-in Resource Templates**| Preconfigured templates for Lambda, SQS, API Gateway, and more | | **Local and Cloud Support** | Save and reuse projects locally or on the cloud | | **Simplified Permissions** | Automatically configures IAM roles and policies based on services used | --- ### **Supported Services** - AWS Lambda - Amazon SQS - Amazon DynamoDB - Amazon SNS - Amazon API Gateway - AWS Step Functions - Amazon EventBridge - AWS CloudWatch --- ### **Workflow** 1. Open Application Composer in the AWS Console. 2. Drag services like Lambda and API Gateway onto the canvas. 3. Connect services to define event triggers and data flow. 4. Review the **CloudFormation/SAM YAML** generated on the right panel. 5. Export the template and deploy using AWS SAM CLI or CloudFormation. --- # Understanding Service Role, Stack Policy, Deletion Policy, and Termination Protection in CloudFormation AWS CloudFormation provides several mechanisms to manage the security, lifecycle, and integrity of your infrastructure as code. This includes service roles, stack policies, deletion policies, and termination protection, each playing a crucial role in ensuring controlled and secure deployments. ## Service Role in CloudFormation - A **service role** is an AWS Identity and Access Management (IAM) role that CloudFormation assumes to execute stack operations on behalf of the user. - It allows CloudFormation to interact with AWS services while following the permissions defined in the role. - Service roles are essential when enforcing least privilege principles and controlling stack operations at an organizational level. ### Use Case A company wants to restrict CloudFormation to only create and manage EC2 and S3 resources. A dedicated service role can be created with specific permissions to limit CloudFormation's scope. ## Stack Policy in CloudFormation - A **stack policy** is a JSON document that defines update restrictions for specific resources in a CloudFormation stack. - It ensures that critical resources cannot be modified unintentionally during updates. - Stack policies help prevent accidental changes to important resources like databases or security groups. ### Example A stack policy can be applied to prevent deletion of an Amazon RDS instance while allowing other updates in the stack. ## Deletion Policy in CloudFormation - A **deletion policy** controls the behavior of CloudFormation when a resource is deleted from a stack. - The three available options are: - **Retain**: Keeps the resource even if it is removed from the stack. - **Snapshot**: Creates a backup snapshot before deleting the resource (used for databases like RDS). - **Delete**: Removes the resource completely without any backup. ### Best Practice Use the `Retain` policy for resources that should not be accidentally deleted, such as production databases. ## Termination Protection in CloudFormation - **Termination protection** prevents a CloudFormation stack from being accidentally deleted. - Once enabled, any delete request for the stack will fail unless termination protection is explicitly disabled. - This is a critical safeguard for production environments to prevent accidental deletions. ### Enabling Termination Protection Termination protection can be enabled via the AWS Management Console or AWS SDKs, ensuring that critical infrastructure remains intact. ## Conclusion Service roles, stack policies, deletion policies, and termination protection are essential components in CloudFormation that help control permissions, prevent unintended modifications, and safeguard resources. Properly configuring these mechanisms ensures a secure and well-managed AWS infrastructure. --- # Exploring Intrinsic Functions in AWS CloudFormation Templates AWS CloudFormation **Intrinsic Functions** provide a way to dynamically reference values, perform computations, and simplify stack configurations within templates. These functions enhance flexibility by enabling dynamic resource provisioning instead of using hardcoded values. ## What Are Intrinsic Functions? Intrinsic functions allow CloudFormation templates to: - **Reference** resource attributes and stack parameters. - **Compute** values dynamically during stack deployment. - **Transform** or **combine** strings, lists, and mappings. ## Commonly Used Intrinsic Functions 1. **`Ref` – Reference Stack Parameters & Resources** - Returns the value of a parameter or resource. - Example: ```yaml InstanceType: !Ref MyInstanceType ``` 2. **`Fn::GetAtt` – Get Attributes of a Resource** - Retrieves attributes like ARN, IP address, or DNS name. - Example: ```yaml InstancePublicIP: !GetAtt MyEC2Instance.PublicIp ``` 3. **`Fn::Sub` – String Substitution** - Inserts variables into a string. - Example: ```yaml ResourceName: !Sub "my-bucket-${AWS::Region}" ``` 4. **`Fn::Join` – Concatenate Values** - Joins strings with a specified delimiter. - Example: ```yaml CombinedString: !Join ["-", ["AWS", "CloudFormation", "Stack"]] ``` 5. **`Fn::Select` – Select an Item from a List** - Retrieves a specific index from a list. - Example: ```yaml FirstAZ: !Select [0, !GetAZs ""] ``` 6. **`Fn::If` – Conditional Statements** - Enables conditional logic within templates. - Example: ```yaml BucketName: !If [CreateS3, !Ref S3Bucket, "NoBucket"] ``` 7. **`Fn::ImportValue` – Cross-Stack References** - Imports values from other CloudFormation stacks. - Example: ```yaml VPCID: !ImportValue SharedVPC-ID ``` ## Use Cases for Intrinsic Functions - **Dynamic configuration**: Adjust stack settings based on user inputs. - **Cross-stack linking**: Share resources across multiple CloudFormation stacks. - **Simplified template management**: Reduce redundancy and improve maintainability. ## Security Considerations - Use **parameter validation** to prevent invalid inputs. - Limit **cross-stack dependencies** to avoid unexpected failures. - Enable **logging and monitoring** for debugging function outputs. ## Conclusion Intrinsic functions in AWS CloudFormation enhance flexibility by enabling dynamic resource provisioning, parameter references, and automated configurations. By leveraging these functions, users can create more efficient and scalable infrastructure-as-code templates. --- # Working with Nested Stacks in AWS CloudFormation Nested Stacks in AWS CloudFormation allow you to break a large CloudFormation template into smaller, reusable templates. This approach improves maintainability, modularity, and scalability while managing complex infrastructures. ## What Are Nested Stacks? - A **Nested Stack** is a CloudFormation stack created within another stack (the parent stack). - They help organize resources by breaking a large template into smaller, logical components. - Changes to child stacks can be made independently, reducing complexity in large deployments. ## Benefits of Using Nested Stacks - **Modular Design**: Improves organization by separating different parts of the infrastructure. - **Reusability**: Reuse templates across multiple deployments, reducing duplication. - **Simplified Management**: Manage and update components independently without affecting the entire stack. - **Efficient Updates**: Modify only affected nested stacks instead of redeploying the whole infrastructure. ## How Nested Stacks Work 1. **Create a Parent Stack** - This stack references child stacks using the `AWS::CloudFormation::Stack` resource. 2. **Define a Nested Stack Template** - A separate CloudFormation template for the nested stack. 3. **Reference Nested Stack in Parent Stack** - Use `TemplateURL` to point to the nested stack template. - Example: ```yaml Resources: MyNestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://s3.amazonaws.com/my-bucket/nested-template.yaml Parameters: InstanceType: t2.micro ``` ## Best Practices for Nested Stacks - **Use S3 for Hosting Templates**: Store templates in Amazon S3 and provide the `TemplateURL`. - **Minimize Stack Depth**: Avoid excessive nesting to prevent complexity. - **Pass Parameters Dynamically**: Use `Parameters` to customize stack behavior. - **Enable Rollback Mechanisms**: Ensure safe recovery in case of deployment failures. ## Limitations of Nested Stacks - **Stack Dependency Management**: Parent stacks fail if a nested stack encounters an error. - **Deployment Time**: More stacks mean increased deployment time. - **Stack Limits**: AWS imposes limits on the number of stacks within an account. ## Conclusion Nested Stacks in AWS CloudFormation provide a structured and reusable approach to managing large infrastructures. They help simplify template management, improve modularity, and enhance reusability while ensuring efficient resource provisioning. --- # Wrap-Up: Key AWS CloudFormation Concepts ## **Service Role, Stack Policy, Deletion Policy, and Termination Protection** Understanding these concepts is crucial for managing the security and integrity of CloudFormation stacks. - **Service Roles** define permissions for CloudFormation to interact with AWS resources. - **Stack Policies** restrict updates to specific stack resources. - **Deletion Policies** determine how CloudFormation handles resource deletions. - **Termination Protection** prevents accidental deletion of critical stacks. These features ensure that CloudFormation stacks remain secure, controlled, and protected from unintended modifications. ## **Custom Resources in CloudFormation** Custom resources extend CloudFormation capabilities beyond AWS-managed resources. - They allow integration with external systems, executing Lambda functions, or custom scripts. - Custom resources enhance automation, making CloudFormation adaptable to unique infrastructure needs. ## **Managing Multiple Deployments with StackSets** AWS **CloudFormation StackSets** help deploy and manage stacks across multiple AWS accounts and regions. - They enable consistent infrastructure provisioning at scale. - StackSets improve governance, reduce deployment time, and ensure uniform configurations across environments. ## **Intrinsic Functions in CloudFormation Templates** Intrinsic functions provide dynamic capabilities within templates. - Functions like `!Ref`, `!Sub`, and `!Join` allow flexible resource definitions. - They reduce hardcoding, improve reusability, and make CloudFormation templates more dynamic. ## **Working with Nested Stacks** Nested Stacks help break down large templates into modular, reusable components. - They improve manageability by organizing infrastructure into logical sub-stacks. - Storing nested stack templates in S3 enhances flexibility and scalability. - Best practices include minimizing stack depth, passing dynamic parameters, and enabling rollback mechanisms. --- # Multiple Choice Questions (MCQs) with Answers ## **Service Role, Stack Policy, Deletion Policy, and Termination Protection** ### **Q1: What is the purpose of a service role in AWS CloudFormation?** - A) To restrict stack updates - B) To define permissions for CloudFormation to interact with AWS resources - C) To delete stacks automatically after deployment - D) To ensure data backup before deletion **Answer:** B) To define permissions for CloudFormation to interact with AWS resources --- ### **Q2: How does Termination Protection help in AWS CloudFormation?** - A) It prevents accidental deletion of stacks - B) It restricts API calls to the AWS environment - C) It automatically updates all stack resources - D) It enables automatic scaling of stack resources **Answer:** A) It prevents accidental deletion of stacks --- ### **Q3: Which policy ensures that resources are retained even after a stack deletion?** - A) Stack Policy - B) Retain Policy - C) Termination Protection - D) Deletion Policy **Answer:** D) Deletion Policy --- ## **Custom Resources in CloudFormation** ### **Q4: What is a primary use case for Custom Resources in CloudFormation?** - A) To create AWS resources outside CloudFormation’s standard capabilities - B) To automatically delete non-required resources - C) To scale infrastructure on demand - D) To enforce IAM policies **Answer:** A) To create AWS resources outside CloudFormation’s standard capabilities --- ### **Q5: What AWS service is commonly used with Custom Resources for executing logic?** - A) AWS Lambda - B) AWS S3 - C) AWS IAM - D) AWS CloudTrail **Answer:** A) AWS Lambda --- ### **Q6: How do Custom Resources communicate status updates to CloudFormation?** - A) Through Amazon S3 buckets - B) By sending responses to a pre-signed S3 URL - C) By directly modifying stack parameters - D) By using AWS Config rules **Answer:** B) By sending responses to a pre-signed S3 URL --- ## **Managing Multiple Deployments with StackSets** ### **Q7: What is the main benefit of using AWS CloudFormation StackSets?** - A) To deploy and manage stacks across multiple AWS accounts and regions - B) To create private networking solutions - C) To automatically migrate databases - D) To encrypt sensitive stack parameters **Answer:** A) To deploy and manage stacks across multiple AWS accounts and regions --- ### **Q8: Which permission is required to deploy StackSets in multiple accounts?** - A) Read-only access to AWS resources - B) Administrator privileges in each target account - C) An IAM role with StackSet permissions - D) No special permissions are needed **Answer:** C) An IAM role with StackSet permissions --- ### **Q9: What component in StackSets ensures changes are applied to all specified accounts and regions?** - A) Stack Permissions - B) Stack Instances - C) Stack Policies - D) Deletion Policies **Answer:** B) Stack Instances --- ## **Intrinsic Functions in CloudFormation Templates** ### **Q10: Which intrinsic function is used to retrieve the value of an existing resource?** - A) `!Sub` - B) `!Join` - C) `!Ref` - D) `!ImportValue` **Answer:** C) `!Ref` --- ### **Q11: What does the `!Sub` function do in a CloudFormation template?** - A) It substitutes variables in a string - B) It joins multiple values into a single string - C) It creates new AWS resources dynamically - D) It deletes unused resources **Answer:** A) It substitutes variables in a string --- ### **Q12: How does the `!Join` function help in CloudFormation templates?** - A) It joins a stack with another stack - B) It concatenates a list of strings with a specified delimiter - C) It merges multiple stack parameters - D) It creates an IAM role **Answer:** B) It concatenates a list of strings with a specified delimiter --- ## **Working with Nested Stacks in AWS CloudFormation** ### **Q13: What is the primary purpose of Nested Stacks?** - A) To divide large templates into modular components - B) To replace manually created AWS resources - C) To enforce security policies within a stack - D) To automatically scale EC2 instances **Answer:** A) To divide large templates into modular components --- ### **Q14: How are Nested Stacks referenced in the parent stack?** - A) Using `!Ref` and an S3 URL - B) By defining them under the `Resources` section - C) Through IAM role assignments - D) By applying security groups **Answer:** B) By defining them under the `Resources` section --- ### **Q15: What is the advantage of using Nested Stacks?** - A) Reusability of stack components - B) Improved template organization - C) Simplified management of complex deployments - D) All of the above **Answer:** D) All of the above --- # Scenario-Based Questions with Step-by-Step Answers ## **Scenario 1: Managing Permissions with Service Roles in CloudFormation** ### **Scenario:** You are deploying a CloudFormation stack that needs to create an S3 bucket and an EC2 instance. However, your deployment fails due to permission issues. How can you resolve this? ### **Solution:** 1. **Check CloudFormation Execution Role:** - Go to the AWS IAM Console and review the IAM role used by CloudFormation. - Ensure that the role has permissions to create both S3 and EC2 resources. 2. **Modify the IAM Role if Needed:** - Attach the `AmazonS3FullAccess` and `AmazonEC2FullAccess` policies to the role. 3. **Reattempt the Stack Deployment:** - Retry the CloudFormation stack deployment. 4. **Verify Stack Resources:** - Confirm that both the S3 bucket and EC2 instance have been successfully created. --- ## **Scenario 2: Preventing Stack Deletion Using Termination Protection** ### **Scenario:** Your team has accidentally deleted a critical infrastructure stack. How can you prevent this from happening again? ### **Solution:** 1. **Enable Termination Protection:** - Go to the CloudFormation console. - Select the critical stack. - Click **Actions** → **Enable Termination Protection**. 2. **Verify the Protection:** - Try to delete the stack. - CloudFormation should prevent the deletion and display an error message. 3. **Educate Team Members:** - Inform the team about Termination Protection to avoid accidental deletions in the future. --- ## **Scenario 3: Using a Custom Resource to Trigger AWS Lambda** ### **Scenario:** You need to send a notification to an admin whenever a CloudFormation stack is created. How can you achieve this using a custom resource? ### **Solution:** 1. **Create a Lambda Function:** - Deploy a Lambda function that sends an email via Amazon SNS. 2. **Integrate the Custom Resource in CloudFormation:** - Define the custom resource to trigger the Lambda function. 3. **Deploy the Stack and Verify:** - Deploy the CloudFormation stack. - Check if the Lambda function runs and the email is sent. --- ## **Scenario 4: Deploying StackSets Across Multiple Accounts and Regions** ### **Scenario:** Your organization requires the same CloudFormation stack to be deployed in multiple AWS accounts and regions. How can you accomplish this? ### **Solution:** 1. **Create a StackSet in AWS CloudFormation:** - Navigate to the CloudFormation console and create a StackSet. 2. **Define Target Accounts and Regions:** - Specify the AWS accounts and regions where the stack should be deployed. 3. **Grant Necessary IAM Permissions:** - Ensure that each account has an IAM role with the correct permissions to deploy the stack. 4. **Deploy and Verify:** - Execute the StackSet deployment. - Check in different accounts to ensure the stack is deployed successfully. --- ## **Scenario 5: Using Intrinsic Functions to Retrieve Values** ### **Scenario:** You need to retrieve the Amazon RDS instance endpoint created in a CloudFormation stack and use it in another stack. How can you achieve this? ### **Solution:** 1. **Export the RDS Endpoint in the First Stack:** - Define an output in CloudFormation that exports the RDS endpoint. 2. **Import the Value in Another Stack:** - Use the `!ImportValue` function to retrieve the RDS endpoint. 3. **Verify the Imported Value:** - Deploy the second stack and check if it successfully references the RDS instance. --- ## **Scenario 6: Simplifying CloudFormation with Nested Stacks** ### **Scenario:** Your CloudFormation template is becoming too large and complex. How can you organize it better? ### **Solution:** 1. **Identify Reusable Components:** - Separate parts like IAM roles, networking, and databases into smaller stack templates. 2. **Use Nested Stacks:** - Reference these smaller stacks within the main stack as nested stacks. 3. **Deploy and Verify:** - Deploy the main stack and check that all nested stacks are properly created. ---

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully